オドメトリー実験車の動かし方は次の3通りある。
➀ ジョイスティックでコントールする
単純にジョイスティックをラジコンのコントローラーとして使う動かし方。
➁ ロボットの動きを画面上で確認する
➀の動きをRviz2を使って画面上で確認する。
➂ ArUcoマーカーを使ってロボットの位置を補正する
ジョイスティックによる移動に加え、トピック/waypointsを使って指定の位置に移動することができる。また0,0への移動を指定すると、0,0に到着したタイミングでロボット上のArUcoマーカーをカメラが検出し、その位置を使ってロボットの現在位置を補正することができる。
ロボットカーに電池をセットする。
まずは、下記の画像のように電池を設定し、電源ボタンをonにする。

ジョイスティックでコントロールする

ジョイスティックでロボットカーを操作する場合の起動手順である。上の図でジョイスティックはPC2に接続しているが、Raspberry Pi 5でよいし、この方が使いやすい。
➀Raspberry Pi 5のターミナルから起動。
その他のコマンド
sudo bluetoothctl # bluetoothctlコマンドのインタラクティブモードで実行する
connect 6B:CF:6F:C4:1D:9E # ペアリングは済んでいるので接続する ※ジョイスティックを接続可能にしておく
disconnect 6B:CF:6F:C4:1D:9E # 切断する
Raspi5のターミナル2 --- ジョイステックをROS2に接続する。
ros2 run joy_linux joy_linux_node
Raspi5のターミナル3 --- micro-ROS-Agentを起動する 【ESP32の ENボタン を押して再起動すること】
ros2 run micro_ros_agent micro_ros_agent udp4 -p 8888
※dockerを使う場合
sudo docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:jazzy udp4 --port 8888
Raspi5のターミナル1 --- ジョイステックをRaspi5にペアリングする
➁ジョイスティックでロボットをコントロールするプログラムを起動する。
PC2(DELL2)のターミナル --- ロボットをコントロールするAPP
ros2 run dc_motor_encoder micro_ROS_joy2cmd_vel --- APPを起動する
画面上のロボットの動きをRviz2(可視化ツール)で見てみる

上の「ジョイスティックでコントロールする」に加えて、Rviz2(可視化ツール)を使うと画面上でロボットの動きを見ることができる。
➂エンコーダ値からオドメトリーをパブリッシュするプログラムを起動する。
PC1(DELL2)のターミナル --- オドメトリーをパブリッシュするAPP
ros2 run dc_motor_encoder micro_ROS_odometry --- APPを起動する
④Rviz2を起動する。
PC1(DELL2)のターミナル --- Rviz2を起動する。
rviz2
➀ 画面の右下「Add」をクリックして現れたダイアログからOdometryを選択する。
➁ Odmetryが表示され Status OK を確認する。
➂ Fixed Frame で odomを選択すると右のロボット移動の状態が表示される。

odomとbase_linkを表示する。

odometryをパブリッシュする例
odomとbase_linkをRviz2に表示した例
ArUcoマーカーでロボットの位置情報を補正する

➀カメラを座標0.0の真上にセットする。
カメラから見た中心が、座標0,0になる。この実験では、カメラを真下に向け、床面から1.25mの高さに設定した。
➁Raspberry Pi 5 のターミナルから下記を起動する。
bluetoothctlのその他のコマンド
sudo bluetoothctl # bluetoothctlコマンドのインタラクティブモードで実行する
connect 6B:CF:6F:C4:1D:9E # ペアリングは済んでいるので接続する ※ジョイスティックを接続可能にしておく
disconnect 6B:CF:6F:C4:1D:9E # 切断する
ターミナル2 --- ジョイステックをROS2に接続する。
ros2 run joy_linux joy_linux_node
ターミナル3 --- カメラの画像とカメラ情報をトピックで出力する。
ros2 run usb_cam usb_cam_node_exe --ros-args --remap video_device:=/dev/video0 -p framerate:=15.0
ターミナル4 --- 画像を確認する。
ros2 run rqt_image_view rqt_image_view
ターミナル5 --- 画像トピックからマーカー情報をトピックで出力する。
ros2 run ros2_aruco aruco_node --ros-args -p aruco_dictionary_id:=DICT_4X4_50 -p image_topic:=/image_raw -p camera_info_topic:=/camera_info -p marker_size:=0.055 # マーカーのサイズを 0.065 → 0.055 に補正
ターミナル6 --- micro-ROS-Agentを起動する 【ESP32の ENボタン を押して再起動すること】
ros2 run micro_ros_agent micro_ros_agent udp4 -p 8888
※dockerを使う場合 --- PC2(ubuntu)の場合
sudo docker run -it --rm -v /dev:/dev --privileged --net=host microros/micro-ros-agent:jazzy udp4 --port 8888
ターミナル1 --- ジョイステックをRaspi5にペアリングする
PC2(DELL2)のターミナル --- ロボットをコントロールするAPP
ros2 run dc_motor_encoder micro_ROS_joy2cmd_vel --- APPを起動する
※以下は、PCの組み合わせを変えた場合の操作方法
PC2(DELL2)の代わりにPC1(WSL2)を使ってファイアウォール再設定する場合。操作方法
現在PC1(WSL2)のターミナルから使えない。 ---- アップデート以降、WSL2とWindowsのミラーリングが機能していない。
PC1(WSL2)のターミナル --- ロボットをコントロールするAPP
source ~/myenv/bin/activate --- 仮想環境に入る
ros2 run dc_motor_encoder micro_ROS_joy2cmd_vel --- APPを起動する
ジョイステックをPC(ubuntu)にペアリングする場合(参照)。
ジョイスティックの操作
十字ボタン | 上下→前進/行進 左右→左右の回転 | 停止状態からは、6回押して動き出す。 |
〇ボタン | 停止 | 停止と同時に巡回も打ち切る。 |
✕ボタン | 現在地の座標設定 x:0,y:0,theta:0 | |
△ボタン | 座標x:0,y:0に移動し、 マーカーの座標で更新する | マーカーを監視するカメラが動作していること。 |
🔲ボタン | 巡回パターン3 | |
L1ボタン | 巡回パターン1 | |
R1ボタン | 巡回パターン2 | |
OPTIONボタン | トピックで指定した巡回パターン | 下の「トピック/waypointsを使った巡回パターンの使い方」参照。 |
トピック/waypointsを使った巡回パターンの使い方
トピック/waypointsは、文字列型のトピックで、巡回する座標を指定する。
p:[x座標]/[y座標] ------ 指定する座標と次の座標との区切り文字は';'(セミコロン)である。
座標0,0を指定するとロボットのマーカーをカメラが認識し、現在のオドメトリーを更新する。
c:- ------ これ以前に指定した内容をクリアする。
指定例
ros2 topic pub --once /waypoints std_msgs/msg/String "{data: p:0.0/1.8;p:-1.0/1.0;p:-1.5/0.0;p:-1.0/-0.5;p:-0.7/0.5;p:0.0/0.0}"
ros2 topic pub --once /waypoints std_msgs/msg/String "{data: p:-0.5/0.0;p:-1.0/-0.5;p:-1.5/0.0;p:-1.0/1.0;p:0.0/1.8;p:0.0/0.0}"
# これ以前の指定をクリアする。
ros2 topic pub --once /waypoints std_msgs/msg/String "{data: c:-}"
動作環境
PC1 | Windows11上のWSL2 Ubuntu 24.04.1 LTS jazzy ※ESP32 dev ModuleがCOMポートで認識しない。 |
PC2 | Ubuntu 24.04 LTS ※joystickのBluetooth接続ができるので使用。 |
Raspberry Pi 5 | Ubuntu 24.04.1 LTS jazzy Arduino IDE 1.8.19 |
ESP32 | ESP32 dev Module 38pin |
実験車 | こちらを参照 |
—-