1. はじめに
[1]で公開されているRMF DemosのOffice Worldというシミュレーション環境ではtinyRobotというロボットがコーラ缶をピックアップして配送するということが以下の手順でできます。
cd ~/rmf_ws
source ~/rmf_ws/install/setup.bash
ros2 launch rmf_demos_gz_classic office.launch.xml
ros2 run rmf_demos_tasks dispatch_delivery -p pantry -ph coke_dispenser -d hardware_2 -dh coke_ingestor --use_sim_time
コーラの缶をピックアップして配送する様子をシミュレーションした際の動画を以下に示します。
(この機能の設定方法などは[2]の「Workcells」の項目に詳細に書かれておりますので、そちらをご参照ください。)
しかし配送シミュレーションをするのであれば、コーラの缶だけでなく他のものも運ばせたいなと考え、そのことに取り組んだことが本記事になります。
2. 実行環境
- CPU: CORE i7 7th Gen
- メモリ: 32GB
- GPU: GeForce RTX 2070
- OSと構築した環境: Window11でWSL2にUbuntu22.04をインストールした環境
- ROS2: Humble
- Open-RMFの構築環境:WSL2の環境下において、Traffic-Editorを使って複数ロボットとエレベータの連携をシミュレーションできる環境を構築してみたの記事で構築した環境
3. 方針
[3]のサイトで公開されているモデルをダウンロードして、RMF DemosのOffice Worldのコーラの缶と入れ替えます。そしてそのモデルをtinyRobotが問題なく搬送できるか、Office Worldのシミュレーション環境を使って試行します。
4. モデルをOffice Worldに反映する手順
モデルをシミュレーション環境に反映した手順は以下です。
-
[3]のサイトで適切なモデルを選んだら、以下の図で赤枠で囲んだボタンをクリックして、モデルをダウンロードします。(画面はCardboard box)
-
ダウンロードしたファイルを解凍します。そのしてそのファイルをそのまま.gazebo\models(Open-RMFの環境構築したときにrmf_wsと同じ階層に.gazeboというファイルができていました。)の中にコピーします。
-
~/rmf_demos_maps/maps/officeの中にある、office.building.yamlの以下の部分の「model_name」(デフォルトではOpenRobotics/Coke)と「name」(デフォルトではCoke)をダウンロードしてきたモデルの名前に変更します。
office.building.yaml- {dispensable: false, model_name: OpenRobotics/Coke, name: Coke, static: false, x: 2098.6509999999998, y: 650.52300000000002, yaw: 1.5708, z: 1.0800000000000001}
5. 各モデルの検討
5.1 段ボールの場合(Cardboard box)
段ボールモデルのリンクから段ボールのモデルをダウンロードして、.gazeboの中に保存した後に、office.building.yamlの以下の部分をこのように修正しました。
- {dispensable: false, model_name: OpenRobotics/Coke, name: Coke, static: false, x: 2098.6509999999998, y: 650.52300000000002, yaw: 1.5708, z: 1.0800000000000001}
- {dispensable: false, model_name: cardboard_box, name: cardboard_box, static: false, x: 2098.6509999999998, y: 650.52300000000002, yaw: 1.5708, z: 1.0800000000000001}
そして、以下のコマンドを実行して、段ボールをピックアップして配送をしようとした結果を以下の動画に示します。(モデル以外は変えてませんので、指示はコーラ缶の時と同じで動きます。)
cd ~/rmf_ws
source ~/rmf_ws/install/setup.bash
ros2 launch rmf_demos_gz_classic office.launch.xml
ros2 run rmf_demos_tasks dispatch_delivery -p pantry -ph coke_dispenser -d hardware_2 -dh coke_ingestor --use_sim_time
5.2 小包の場合(Google_Cardboard_Original_package)
小包のモデルのリンクから小包のモデルをダウンロードして、.gazeboの中に保存した後に、office.building.yamlの以下の部分をこのように修正しました。
- {dispensable: false, model_name: OpenRobotics/Coke, name: Coke, static: false, x: 2098.6509999999998, y: 650.52300000000002, yaw: 1.5708, z: 1.0800000000000001}
- {dispensable: false, model_name: Google_Cardboard_Original_package, name: Google_Cardboard_Original_package, static: false, x: 2098.6509999999998, y: 650.52300000000002, yaw: 1.5708, z: 1.0800000000000001}
そして、以下のコマンドを実行して、小包をピックアップして配送をしようとした結果を以下の動画に示します。(モデル以外は変えてませんので、指示はコーラ缶の時と同じで動きます。)
cd ~/rmf_ws
source ~/rmf_ws/install/setup.bash
ros2 launch rmf_demos_gz_classic office.launch.xml
ros2 run rmf_demos_tasks dispatch_delivery -p pantry -ph coke_dispenser -d hardware_2 -dh coke_ingestor --use_sim_time
5.3 その他
その他、以下のモデルの配送も試してみましたが、いずれもtinyRobotが途中で落としてしまい、問題なく運べるものはありませんでした。
- 本:
Eat_to_Live_The_Amazing_NutrientRich_Program_for_Fast_and_Sustained_Weight_Loss_Revised_Edition_Book - コピー用紙の箱:
INTERNATIONAL_PAPER_Willamette_4_Brown_Bag_500Count
6. まとめ
私が追加したモデルでtinyRobotにて運ぶものとしてしっくりくるものはありませんでした。そのためtinyRobotを用いた配送シミュレーションはコーラ缶を第1の配送対象物として今後環境構築に取り組んでいきたいと思います。またtinyRobotよりも大きいDeliveryRobotとかであれば今回追加したモデルを問題なく配送できるのかもしれません。この点についても今後取り組んでいきたいと思います。
参考記事やサイト
[1]open-rmf/rmf_demos
[2]Programming Multiple Robots with ROS 2
[3]Gazebo