スポンサーリンク

JetsonNanoにROSを入れてJetbotを動かす方法

今回はJetsonNanoにROS(Melodic)をインストールし、Jetbotを動かすところまで説明したいと思います。

参考サイト

今回は以下の記事の手順を参考にしています。

ROS nodes and Gazebo model for NVIDIA JetBot with Jetson Nano

Jetson NanoにROSをインストールする方法

Jetbot for ROS Rotsonを作ろう! Jetson NanoにROSをセッティングするよ

ROS(Melodic)のインストール

何はともあれ、まずはROS(Melodic)のインストールを行っていきます。今回はスクリプトなどを作成せずに一行ずつ丁寧に実行していきます。

ROS(Melodic)のインストール

ターミナルで以下のコマンドを実行し、ROS(Melodic)をインストールします。今回バージョンは「Melodic」を使用します。

Adafruitライブラリをインストール

ターミナルで以下のコマンドを実行してAdafruitライブラリをインストールします。

ユーザーにi2cバスへのアクセスを許可します。

catkinワークスペースを作成

catkinワークスペースを作成します。今回は「workspace」というフォルダの下に「catkin_ws」というワークスペースを作成しました。こちらのフォルダ名は任意で設定することができます。必要なパッケージやソースがあれば以下のワークスペースの中に格納していきます。

上記まで実行したら最後に再起動を行います。

ROSの起動確認

再起動したらターミナルを立ち上げてROSを起動させてみます。

サンプル「turtlesim」の起動確認

新しいターミナルを起動させて以下を実行し、カメを表示できたら正常にROSが動いていることを確認できます。

キーボードでカメを操作してみます。新しいターミナルを起動して以下を実行すると矢印キーでカメを操作できるようになります。動かない場合はターミナルを選択してから動かしてみてください。

次はトピックに直接パブリッシュしてカメを操作してみます。以下を実行するとカメがグルグル回るようになります。

トピックのパラメータについてはこちらの記事が分かりやすいのでご参照ください。

ROSのトピック通信

3D可視化ツール「RViz」の起動確認

3D可視化ツール「RViz」が起動するか確認してみます。

バーチャルシミュレータ「Gazebo」のインストール

バーチャルシミュレータの「Gazebo」もよく利用するのでこちらもインストールしておきます。

バーチャルシミュレータ「Gazebo」の起動確認

バーチャルシミュレータ「Gazebo」が起動するか確認してみます。

Jetbotの環境構築

ROSのインストールまでは完了しましたので、次にJetbotの環境構築を実施していきます。ROSが起動している状態なら「Ctrl+C」で一度終了してしまいます。

以下を実行してROSのパスを確認してみましょう。

jetson-inferenceの構築

jetson-inferenceリポジトリをクローンしてビルドします。

ros_deep_learningをビルドする

ros_deep_learningリポジトリをクローンしてビルドします。

jetbot_rosをビルドする

jetbot_rosリポジトリをクローンしてビルドします。

jetbot_rosがインストールされたか確認

新しくターミナルを起動して以下を実行してみます。

以下が表示されればjetbot_rosがインストールされていることになります。

jetbot_rosを動かす方法

新規ターミナルを起動させてROSを起動しておきます。

Jetbotのモータを動かす

上記とは別にターミナルを立ち上げて以下を実行します。

これでROSのJetbotが動く状態になりましたので以下のコマンドを実行して動かしてみます。

jetbot_motorsノードの補足

jetbot_motorsノードを実行すると以下のトピックをリッスンするようになります。ただし、現在は③のcmd_strメソッドのみが実装されているそうなので、例えば左右のモーターをそれぞれ動かしたいという場合は自分で実装する必要がありそうです。

トピック① /jetbot_motors/cmd_dir ⇒相対方位(度[-180.0, 180.0]、速度[-1.0, 1.0])
トピック② /jetbot_motors/cmd_raw ⇒生のL / Rモーターコマンド(速度[-1.0, 1.0]、速度[-1.0, 1.0])
トピック③ /jetbot_motors/cmd_str ⇒単純な文字列コマンド(左/右/前方/後方/停止)

ノードからJetbotを動かす

上記ではコマンドを直接入力してJetbotを操作しました。こちらだと多少物足りない感じがします。
なので別途ノードを作成し、その中にJetbotの動作を記述して動かしてみたいと思います。

まずは以下のディレクトリに移動して「publish_motor.py」というファイルを作成します。私は「nano」エディタをよく利用しているのでこちらで編集しています。nanoをインストールしていない方は他のエディタでファイルを作成してみてください。


ファイルの中身に以下を書き込んで保存します。処理としては「前進→後進→左旋回→右旋回→停止」の順でJetbotを動かすようにしています。

ファイルを保存したらワークスペースまで戻ってビルドを再度実行します。rosを起動しっぱなしのときは「Ctrl+C」で停止してからビルドを行います。

これでノードからJetbotを動かす準備ができました。まずはマスタを起動しておきます。

次にサブスクライブ側のノードを実行しておきます。

作成したパブリッシュ側のノードを実行します。これでJetbotが「前進→後進→左旋回→右旋回→停止」の順で動くと思います。

実際に動かしてみた様子がこちらです。左旋回と右旋回が逆になっていました。。配線を間違えていたかもしれないので確認する予定です。

OLEDの点灯確認

次にOLEDの点灯確認も行ってみます。別のターミナルを立ち上げて以下を実行します。

さらに別のターミナルを立ち上げて以下を入力します。HELLOという文字が液晶に表示されることを確認します。

カメラを使う

「ros-melodic-image-view」をインストールしておきます。

ターミナルで以下を実行し、「jetbot_camera」のストリーミングを開始しておきます。
新しくターミナルを立ち上げて以下を実行し、サブスクライブでストリーミングデータを受け取ります。