■前回の続き

前回テレオペをしたくて、ワーキングディレクトリを作ってたところで終わりました。
メモ代わりに目指すディレクトリ構造を示します。

my_robot_teleop/ ← ROS 2パッケージ(colconビルド対象)
├── package.xml  手入力
├── setup.py    手入力
├── resource/   手入力
├── setup.cfg   手入力
└── my_robot_teleop/ ← Pythonパッケージ(import用)
    ├──作ったPythonファイル
 └── __init__.py  ros2 runで出来る?

(VSCodeでディレクトリとファイル表示)



目指してるのが止まってる時、円運動して、キー入力した時、それに従う。(目標を少し下げました)
初心者にしては、なかなかにハードな道です。

■目標の形

1. 円運動ノード → /circle_vel にPublish

2. 改造版teleopノード → /keyboard_vel にPublish

3. この合成ノード → /turtle1/cmd_vel に出力

4. turtlesim_node → 実際にカメが動く

(ノードの関係図)



これで、キー入力がある時はキーに従い、停止中は円運動する亀を目指します。

■いろいろと作り込む前に確認

キー入力は、作ってたのでTurtleSim側をリマッピングしてキーから動くようにします。

ChatGPTさんから、以下の様なコマンドを教えて貰いました。

ros2 run turtlesim turtlesim_node --ros-args -r /turtle1/cmd_vel:=/keyboard_vel

(キー入力から亀を動かした画面)





なんとか自分が用意した(作ったのはChatGPTさん)ノードから亀の操作ができる様になりました。

■次の流れとしては、

1. teleop_keyboard ノードで/keyboard_vel に速度を出す

2. 新しく circle_motion ノードを作って /circle_vel に円運動の速度を出す

3. さらに「合成ノード」で /keyboard_vel + /circle_vel → /turtle1/cmd_vel に送る

もちろん、各ノードはChatGPTさんに作ってもらいました。

それに合わせてsetup.py の entry_points に追加します。

entry_points={
    'console_scripts': [
        'teleop_keyboard = my_robot_teleop.teleop_keyboard:main',
        'circle_motion = my_robot_teleop.circle_motion:main',
        'mixer = my_robot_teleop.mixer:main',
    ],
},

以下の様にリビルドします。

cd ~/ros2_ws
colcon build
source install/setup.bash

ノードを起動する。ターミナルを新しくしたら以下の実行をお忘れなく。

cd ~/ros2_ws
source install/setup.bash

ちなみに、このコードをいちいち入れるのがめんどくさい貴方用の手があるのですが、それはまた次に持越します。

(無事に亀が動いた画面)



■まとめ

前回に続きTurtleSimを題材に、ChatGPTの力を借りながらROS2で遊んでみました。

目標を低くし、ChatGPTさんにおんぶに抱っこ状態でしたが、自分が計画したものが、実際動くと感動も人塩です。

この勢いでGAZEBO(シミュレーション)に入ろうとした所で今日のGPT-5の無料枠終了。

本当、良いところで切れますね。

ひょっとして、ChatGPTさん狙ってる?