ロボット研究開発、ソフトウェア開発、コンテンツ制作配信

自作ロボットの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のバージョンを確認してみます。

cat /etc/nv_tegra_release
# R32 (release), REVISION:6.1

ちゃんと、r32.6.1が入っています。
ちなみに、本jetPackには、Dockerもインストール済でした。
次は、ROSのベースイメージを作成して、コンテナを立ててみます。

jetsonNano用のROSイメージ(Melodic)を作成

以下でgitからjetsonNano用のDockerファイル一式を落とします。

$ git clone https://github.com/Tiryoh/jetson-nano-containers.git

自分のjetsonNanoのjetPackは、r32.6.1なので以下のディレクトリへ移動します。

$cd jetson-nano-containers/l4t-r32.6.1/ros-melodic

Dockerファイルをbuildしてイメージを作成します。

$sudo docker build -t ros:melodic-ros-base-l4t-r32.6.1 .

※tは、イメージにタグを付けるオプションです。

1回、ビルド中にネットワーク系のエラーが出ましたが、もう一度トライすると無事にビルドできました。
docker imageが作成されているかを以下コマンドで確認してみます。

$ docker image ls

TAG:melodic-ros-base-l4t-r32.6.1というイメージが作成されていることが確認できました。

コンテナを起動する

以下コマンドでdockerコンテナを起動してみます。

コンテナ内で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を確認します。

$ sudo docker ps

以下のコマンドでコンテナIDを指定して終了させます。

$ sudo docker stop コンテナID

その他の終了方法

以下のコマンドで即時終了できるようです。

$ sudo docker kill コンテナID

また、docker run中にCtrl+Cで終了することもできます。

最後に

さて、ここから自分が作成したROSノードなどを入れていき、最終的には自ロボット環境のdockerファイルを作り、別環境でもかんたんに動作させれるように環境を作っていこうと思います。
それでは!

スポンサーリンク

いいね!を押すと、
最新記事をお届けします。

Twitter で
関連記事(一部広告含む)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


ページトップボタン