■前回の続き
前回テレオペをしたくて、ワーキングディレクトリを作ってたところで終わりました。
メモ代わりに目指すディレクトリ構造を示します。
my_robot_teleop/ ← ROS 2パッケージ(colconビルド対象)
├── package.xml 手入力
├── setup.py 手入力
├── resource/ 手入力
├── setup.cfg 手入力
└── my_robot_teleop/ ← Pythonパッケージ(import用)
├──作ったPythonファイル
└── __init__.py ros2 runで出来る?
目指してるのが止まってる時、円運動して、キー入力した時、それに従う。(目標を少し下げました)
初心者にしては、なかなかにハードな道です。
■目標の形
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さん狙ってる?