はじめに
Jetson Xavier NXでROSを使うのに,dockerコンテナを立てて中で一般ユーザを設定し,virtualenv的な使い方をしたかったのですが良い設定が見つからなかったので作りました.
cudaにアクセスできてrvizをjetson単体で実行でき,簡単に起動できて,ROSをネイティブインストールしたのと同じような感覚で使えることを目指しました.
以前にOpenGLを呼べるDocker環境までは作っていたのですが,肝心のROS部分を用意していなかったのでその続きです.
想定環境
- ハードウェア : Jetson Xavier NX
- ホスト側OS : Jetpack 4.5.0 --- Jetpack 4.6以降だとnvidia-runtimeを使ってコンテナを立てる際にPermmission Deniedが出る[1]そうなので,4.5系を使っています.
(後で確認したらSDに焼いたイメージは4.5.0でしたが勝手に4.5.2まで上がっていました,ぱっと見は動作に問題なさそうです.) - コンテナ側OS : Jetpack 4.5.0
- ROS Distribution : Melodic
- CUDA使用 : あり
- GUI使用 : あり
- コンテナ内ユーザ種別 : 一般ユーザ
- コンテナ内ユーザ名 : docker
- コンテナ内ユーザPW : docker (ユーザ名/PWはDockerfileを編集して適宜変更してください)
- Dockerバージョン : 20.10.13 build 1224086
- docker-composeバージョン : 1.29.2 build unknown(aptで入れると1.19が入りますが,1.21以降でないとruntimeのタグが使えないためエラーで落ちるので注意.僕はpip3でインストールしました)
注意
- コンテナ内ユーザのID/PWをDockerfileに平文でベタ書きしているので,セキュリティには気をつけてください.
- コンテナ内にattachしている間は分かりやすいようにbashのユーザ名表示をデフォルトの緑から水色に変えていますが,かなり無理矢理に設定を変えています.気になる方はDockerfile末尾3行をコメントアウトしてからお使いください.
使い方
-
リポジトリをcloneする.
git clone https://github.com/kim-xps12/jetson_docker_ros.git
-
公式の手順でDockerをインストール[2] する.
-
pip3でdocker-composeをインストール[3]する.
sudo apt install python3-pip pip3 install --upgrade pip pip3 install docker-compose sudo reboot docker-compose --version
-
お使いのユーザをdockerグループに追加し,sudo無しでdockerコマンドが実行できるように[4]する.
-
launch_compose.shに実行権限を付与する.
cd jetson_docker_ros chmod +x
-
launch_compose.shを実行する.エラーが起きなければattachまで自動で行われる.
./launch_compose.sh
-
コンテナ内で
glmark2
やrviz
正常に動作すればOK!glmark2の場合
glmark2
rvizの場合
tmuxでペインを2個以上作り,片方で
roscore
,もう片方でrviz
-
お好みでパッケージ名のtab補完[5]も使えるようにしておくと便利かもしれません.
参考
[2] https://docs.docker.com/engine/install/ubuntu/
[3] https://matsuand.github.io/docs.docker.jp.onthefly/compose/install/