要約
unityとROSの連携機能があると聞いてZeroSimを触ってみた。
READMEの手順通りだとロボットアーム(UR)が動かなかったので、原因を調べてrqt_joint_trajectory_controllerで動くようにした。
環境
OS:Ubuntu18.04
ZeroSimバージョン:0.1.17 (2022年2月時点の最新版)
unityバージョン:2020.3.31
前準備
ZeroSimのREADMEの通りにSetting up a new Unity ProjectとGetting ZeroSim ROS Docker Containerをやる。
課題点
READMEの「Running Universal Robot UR10 Arm Test Scene with MoveIt!」の節に従いRvizがすでに立ち上がっているVNCにアクセスするまでは手順通り進んだがmoveitが動かない。
unity側のur10のInspectorに「ZO Arm Controller」というコンポーネントがあり、これのStartController関数が呼ばれたときにコントローラが有効になるようだが、再生直後のUnityコンソールでログを確認したところStartControllerしていない。
ROS側のrqt_joint_trajectory_controller上でも確認したところ
undefined_ur10/controller_managerなるコントローラマネージャはあるがコントローラはない状態だった。
READMEには書いてないがコントローラのセットアップが必要そうだ。
やったこと
Unity再生後にVNC上でターミナルを開き、controller_managerでコントローラのリストを確認する。
rosservice call /undefined_ur10/controller_manager/list_controllers
arm_controllerという名前のコントローラが1つ見つかるので、ロードする。
rosservice call /undefined_ur10/controller_manager/load_controller "name: 'arm_controller'"
最後にコントローラをスタートする。
rosservice call /undefined_ur10/controller_manager/switch_controller "start_controllers: ['arm_controller']
stop_controllers: ['']
strictness: 1
start_asap: false
timeout: 10.0"
ここまで実行するとrqt_joint_trajectory_controllerにarm_controllerが追加され、動かすこともできるようになる。
(ただ、デモ用のモデルはアームと他のオブジェクト間には衝突判定があったが、アームを折り曲げてアームの根本に触れさせてみたところすり抜けてしまったのでそこは要改善)
まとめ
ROSコントローラマネージャ周辺の勉強になった。
コントローラのロードとスイッチをlaunchに書けば自動でやってくれるgazebo+rosさんいつもありがとう。