自作ロボットのDocker環境を作る(#01 jetsonNanoにDocker+ROSベース環境を作る)
これまで、自作ロボットの環境は定期的にSDカードへバックアップし、新たな機能や変更を加えていました。
最近Dockerを使い始めてから、その便利さに感動しています。
そこで私のロボットの環境もDocker上に構築していけば、もっと管理が簡単になり、外部へリリースする際も便利なのでは?と思うようになりました。
ということで、自作ロボット(Inobo)の環境をDocker上に構築することを目指します。
Dockerについては勉強中ということで、おそらく色々と試行錯誤がありそうです。
とりあえず、備忘録としてブログに記録していきます。
今回はjetsoNanoにDocker+ROSベース環境を構築していきます。
メモリ2GB版Jetson NanoでDocker内のROSを使うまで
目次
JetsonNanoにJetPack4.6をインストール
JetPackのダウンロード
まずはまっさらな環境からDocker環境を構築していくため、新しいSDカードを購入しJetPackをインストールします。
購入したMicroSDカードは、Sandisk microSDカード 64GB
jetsonNano用のROS Dockerイメージを確認すると、l4t-r32.6.1と書かれています。
JetPackのReleaseバージョンとContainer Version Tagの一覧表(link)を見ると、r32.6.1は、JetPack4.6でしたので、以下サイトからJetPack4.6をダウンロードします。
JetPack Archive
※はじめ、r32.6.1は、JetPack4.6.1と思ってましたが、JetPack4.6.1は、r32.7.1のようです。(バージョンの関連がややこしいですね。。。)
SDカードへイメージを書き込む
MicroSDカードをフォーマットし、balenaEtcherでダウンロードしたJetPack4.6のイメージを書き込みます。
SDフォーマットソフト:SD Card Formatter
イメージ書込みソフト:balenaEtcher
SDカードをjetsonNanoに挿入し起動
作成したMicroSDカードをjetsonNanoに挿入し、電源ONします。
初期セットアップ等が終わり、JetPackのバージョンを確認してみます。
# R32 (release), REVISION:6.1
ちゃんと、r32.6.1が入っています。
ちなみに、本jetPackには、Dockerもインストール済でした。
次は、ROSのベースイメージを作成して、コンテナを立ててみます。
jetsonNano用のROSイメージ(Melodic)を作成
以下でgitからjetsonNano用のDockerファイル一式を落とします。
自分のjetsonNanoのjetPackは、r32.6.1なので以下のディレクトリへ移動します。
Dockerファイルをbuildしてイメージを作成します。
※tは、イメージにタグを付けるオプションです。
1回、ビルド中にネットワーク系のエラーが出ましたが、もう一度トライすると無事にビルドできました。
docker imageが作成されているかを以下コマンドで確認してみます。
TAG:melodic-ros-base-l4t-r32.6.1というイメージが作成されていることが確認できました。
コンテナを起動する
以下コマンドでdockerコンテナを起動してみます。
1 |
sudo docker run --network host --runtime nvidia --rm -it ros:melodic-ros-base-l4t-r32.6.1 |
コンテナ内でroscoreを実行し問題なく立ち上がることを確認できました。
コマンドの意味を調べました。
–network host
ホスト側(jetsonNano)とネットワークを共有するための設定です。これにより、コンテナ内のプロセスはホストのネットワークインターフェースを直接使用できます。
要は、この設定にすると、コンテナのIPアドレスがホスト側と同じになるため、色々と設定が楽になるようです。
例えば、ROS_MASTER_URIやROS_IPなど、ホスト側(jetsonNano)と同じIPアドレスを設定できます。
この設定にしない場合、コンテナ内は独自のIPアドレスを持つようになるため、設定が複雑になりそうです。
–runtime nvidia
NVIDIAのGPUを使用するためのオプションです。コンテナがホスト(jetsonNano)のGPUにアクセスできるようになります。
–rm
コンテナを停止したとき自動的に削除されるオプションです。不要なコンテナが残らないようにするためのものです。
-it
-i:コンテナを対話モードで実行します。
-t:疑似ターミナルを割り当てます。
コンテナ終了方法
コンテナの終了は以下の方法で終了できます。
コンテナ内で終了
セルセッション内でexitを押す。
ホスト側での終了
以下コマンドで、終了したいコンテナのIDを確認します。
以下のコマンドでコンテナIDを指定して終了させます。
その他の終了方法
以下のコマンドで即時終了できるようです。
また、docker run中にCtrl+Cで終了することもできます。
最後に
さて、ここから自分が作成したROSノードなどを入れていき、最終的には自ロボット環境のdockerファイルを作り、別環境でもかんたんに動作させれるように環境を作っていこうと思います。
それでは!
スポンサーリンク