JetbotをROSで動作させる


#目的
JetbotをROS環境でシミュレーション動作できるようにして、ROSによるシミュレーション環境構築の理解を深める。

#環境

  • Jetbot: Waveshare
    • Jetson nano
    • Jetpack 4.4
    • Ubuntu 18.04

#手順

インストール作業

モータードライバ(TB6612/PCA9685)と有機LED(SSD1306)のために、Adafruitのライブラリをインストール。

sudo apt-get install python-pip

pip install Adafruit-MotorHAT
pip install Adafruit-SSD1306

Workspaceを作成。

mkdir -p ~/workspace/jetbot_ws/src
cd ~/workspace/jetbot_ws
catkin_make

sudo sh -c 'echo "source ~/workspace/jetbot_ws/devel/setup.bash" >> ~/.bashrc'

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

sudo apt-get install git cmake

cd ~/workspace
git clone https://github.com/dusty-nv/jetson-inference
cd jetson-inference
git submodule update --init

mkdir build
cd build
cmake ../
make

sudo make install

ros_deep_learningをリポジトリからクローンしてビルド。rospackの確認でPackage not foundのエラーが出たけど、setup.bashを実行したら解決。

sudo apt-get install ros-melodic-vision-msgs ros-melodic-image-transport ros-melodic-image-publisher

cd ~/workspace/jetbot_ws/src
git clone https://github.com/dusty-nv/ros_deep_learning

cd ../ 
catkin_make

# confirm that the package can be found
$ rospack find ros_deep_learning
/home/nvidia/workspace/jetbot_ws/src/ros_deep_learning

次にjetbot_rosをリポジトリからクローンしてビルド。同じくrospackで確認。

# clone the repo
$ cd ~/workspace/jetbot_ws/src
$ git clone --branch https://github.com/dusty-nv/jetbot_ros

# build the package
$ cd ../    # cd ~/workspace/catkin_ws
$ catkin_make

# confirm that jetbot_ros package can be found
$ rospack find jetbot_ros
/home/nvidia/workspace/catkin_ws/src/jetbot_ros

動作確認

いよいよROSでのJetbotの動作確認。

$ roscore

別のTerminalを開いて、jetbot_motorsでモーターを動かしてみる。サンプルコードのjetbot_motors.pyが入っているので、下記コマンドで実行。

$ rosrun jetbot_ros jetbot_motors.py

新しいTerminalを開いて、下記のコマンドをテストで実行すると、勢いよくモーターが動き出した! 結構早く走り出すので慌ててjetbotを持ち上げて、stopコマンドで止める。。。

$ rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "forward"
$ rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "backward"
$ rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "left"
$ rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "right"
$ rostopic pub /jetbot_motors/cmd_str std_msgs/String --once "stop"

ROSはノード間の通信をトピックで非同期でやり取りする。

  • rostopic pubはトピック送信する際のコマンド
  • jetbot_motorsは以下の3つのトピックを受信できるが、今のところ実装されているのはcmd_strのみ。
    • /jetbot_motors/cmd_dir:相対方位 (角度[-180.0, 180.0], スピード[-1.0, 1.0])
    • /jetbot_motors/cmd_raw:生の左右のモーターへのコマンド(スピード[-1.0, 1.0], スピード[-1.0, 1.0])
    • /jetbot_motors/cmd_str:シンプルなコマンド(left/right/forward/backward/stop)

OLEDの確認

JetbotにOLEDが付いているので表示させてみる。Jetbot_oledノードを実行。そして、以下のコマンドで"My Jetbot!"と表示。問題なく表示できた。

$ rosrun jetbot_ros jetbot_oled.py

$ rostopic pub /jetbot_oled/user_text std_msgs/String --once "My Jetbot!"

カメラ動作

Jetbotについているカメラで表示させてみる。まず、jetbot_cameraノードを起動。

$ rosrun jetbot_ros jetbot_camera

カメラ表示にはros-melodic-image-viewをインストールしておく必要があるらしい。以下のコマンドを新しいTerminalで実行。カメラ用の新しいWindowが立ち上がって、カメラも表示。 VNC接続からか、かなり遅い。

$ sudo apt-get install ros-melodic-image-view
$ rosrun image_view image_view image:=/jetbot_camera/raw

#参考
以下のgithubを参考に構築。
https://github.com/dusty-nv/jetbot_ros/tree/melodic