jsk-ros-pkg / jsk_robot

jsk-ros-pkg/jsk_robot
https://github.com/jsk-ros-pkg/jsk_robot
73 stars 97 forks source link

[jsk_naoqi_robot/cross/README] バックアップのros1-pepper.tarを使う場面がよく分かりません #1771

Closed kochigami closed 1 year ago

kochigami commented 1 year ago

https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_naoqi_robot/cross/README.md#development にある、 「You can restore from saved docker container. For JSK users, you can find latest data at xxx.」 としてバックアップされているros1-pepper.tarはどのような時に使えば良いのでしょうか。

例えば、make systemが途中で失敗して、バックアップのi386_Systemフォルダをダウンロードした後、 make userする時に本当は使わないといけない、などありますでしょうか。

そのように思った理由

1769 でmake systemが途中で失敗したため(./prepare_requirements_ros1.sh, ./build_ros1_dependencies.sh, ./build_ros1.shとあるうちの、./build_ros1_dependencies.shの途中でエラー)、

バックアップのi386_Systemフォルダをダウンロードし、crossディレクトリの下に置きました。 これで、make systemは実質完了したと考えております。

そして、prepare_requirements_ros1.shを実行した時にros1-pepper イメージは作られています(ただし、バックアップされているものと比べ、色々ビルドできていないもの)。 https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_naoqi_robot/cross/prepare_requirements_ros1.sh#L23

その後、make userを実行し、 作られたプログラムをPepperにコピーし、起動することを確認しました。

しかし、make userの中身であるbuild_user.shを見ると、 https://github.com/jsk-ros-pkg/jsk_robot/blob/master/jsk_naoqi_robot/cross/build_user.sh#L71 のように、Dockerのros1-pepper イメージを使用していて、 make systemmake userは処理が独立しているのかな、と心配になりました。 (make userでdockerが何をしているのかよく分かっていないので、もう少し勉強します。)

k-okada commented 1 year ago

@kochigami

./prepare_requirements_ros1.sh

→ docker image (ros1-pepper:i386) (ros1-pepper.tarはそのイメージを書き出したもの)を作成し, Pythonをコンパイル,(以降では /home/nao/System/Pythno-2.7.17 でマウントされる) 狙いはPepperの実機の中のPCと同じ環境をDocker上に再現すること なので,これ以降の作業は全て ros1-pepper のdocker 上でコンパイルして,体内のPC(ATOM?)で動くバイナリを生成する.つまりクロスコンパイルしている.

./build_ros1_dependencies.sh

→ ROSを使うのに必要なライブラリ(普通のUbuntuだとapt get で入るもの)をインストール,インストールするライブラリの一覧はrepos/ros1_dependencies.repos これを ros1_dependencies_build_scripts のスクリプトでコンパイル&インストール 普通のPCだったら,apt-get で入るはずだが,pepper はsudo が出来ないので(だっけ?),自前でインストールする.あるいは,そもそも既存の環境を壊したくないので,ユーザのホームディレクトリ内に全てのライブラリを持っている.

./build_ros1.sh

rosinstall_generator でROSのソース一式を持ってきてコンパイル http://wiki.ros.org/rosinstall_generator

    ./build_user.sh

基本はbuild_ros1.sh と同じことをしている.が,イメージとしてはbuid_ros1 は一回やって System ディレクトリ以下を完成させる.自分が開発する時は,build_ros1 でコンパイルされるものはいじる可能性が低いので,Systemディレクトリは1回作成されれば後はコピーでよい.

一方,User以下は何度も繰り返しデバッグ修正するので,最悪 rm -fr i386_User して消しながらコンパイルする.

kochigami commented 1 year ago

1846

./prepare_requirements_ros1.shが失敗する時に、 ros1-pepper.tarを使ってイメージを復元し、./build_ros1_dependencies.shなどの続きの処理を実行できる。