お疲れ様です。秋並です。
今回は、gazeboで使用できる
- 動的にjointをつけ外し可能になるプラグイン「AttachablePlugin」
を紹介します。
本プラグインを使用することで、下動画のように
- 移動ロボットによるシェルフへのドッキング
- バキュームグリッパーの模擬
などが実現できます。
本プラグインは、Dagu12氏が作成したgazebo用pluginを「gazebo harmonic用に修正」「デモ用プログラムを追加」したものになります。
目次
動作環境
本プラグインは以下の環境で動作確認しています。
- Ubuntu 24.04
- ROS 2 Jazzy
- gazebo harmonic
インストール
最初に、本リポジトリをROS2のワークスペースにクローンします(ROS2のワークスペースは作成済みの前提とし、ここでは~/ros2_wsとします)。
cd ~/ros2_ws/src
git clone https://github.com/akinami3/AttachablePlugin.git
ワークスペースをビルドし、ソースをとおします。
cd ~/ros2_ws
colcon build --symlink-install
source ~/ros2_ws/install/setup.bash
デモ
ここからは、本プラグインを使用したデモの実行手順を記載します。
移動ロボットへのシェルフのドッキング
ここでは、下動画のような搬送ロボットとシェルフをアタッチするシミュレーションを実行します。
搬送ロボットへのシェルフのドッキングのサンプルを実行します。
ros2 launch attachable_plugin_demos mobile_robot_demo.launch.py
gazeboが起動したら、最初に搬送ロボットをteleopで動かしてみてください。この時点では、アタッチされておらず搬送ロボットは独立して動くはずです。
搬送ロボットをシェルフの真下付近に移動させたら、アタッチするためのトピックを発行します。
gz topic -t /attach -m gz.msgs.StringMsg -p 'data:"[mobile_robot_model][base_link][shelf][poll1][attach]"'
トピックが発行されると、搬送ロボットとシェルフがアタッチされます。アタッチされた状態で、搬送ロボットを動かすと、シェルフも一緒に動きます。
今回は、キャスターのついていないシェルフを使用しているため、シェルフをつけた状態だと移動ロボットの動作が少し不安定になります。実際は、「アタッチする直前にシェルフを少し浮かせる」 「キャスターのついたシェルフを使用する」などの工夫が必要です。)
バキュームグリッパーの模擬
ここでは、下動画のようにバキュームグリッパーを模擬するようなシミュレーションを実行します。
バキュームグリッパーのサンプルを実行します。
ros2 launch attachable_plugin_demos arm_robot_demo.launch.py
次に、以下のノードを起動します。
ros2 run attachable_plugin_demos attach_contact_link
こちらは、「"接触センサが設定されたリンク"にオブジェクトが接触したら、アタッチする」というノードになります。
gazeboの接触センサは「接触したオブジェクトのモデル名/リンク名」を取得できるため、それを利用しています。
次に、アームの各関節をキーボードで制御するノードを起動します。
ros2 run attachable_plugin_demos arm_joint_teleop
ノードを起動したら、アームの先端のリンクをボックスに近づけてください。
接触センサが反応すると、アームの先端のリンクとボックスがアタッチされます。
アタッチされた状態で、アームを動かすと、ボックスも一緒に動くことが確認できます。
最後に、デタッチするためのトピックを発行すると、アームの先端のリンクとボックスがデタッチされます
ros2 topic pub /detach std_msgs/Empty "{}"
さいごに
今回は、「jointを動的につけ外し可能になるプラグイン」を紹介しました。
本記事が、お役に立つことがあれば幸いです。