この記事について
Unreal Engine上で動く移動ロボットシミュレータVTC上のロボットをROSのnavigation stackで動かしたので、そのセットアップについて記載した。
追加したコードや各種ライブラリのinstall方法についてはここにある。
構成
構成としては下記のようにWindows PC上でVTCを動かし、別のLinux PC側のrvizにnav_goalを入力して、それをもとにmove_baseがcmd_velを決定して、cage_ros_stackに受け渡し、cage_ros_stackがcmd_velをVTCに受け渡して、VTC上のロボットがnav_goalまで移動するという風になっている。
動作環境
VTCはUnreal EngineをインストールしたWindows上で動かし、ROSはUbuntuをインストールした別のPCで動かす。
Windows側の動作環境
- Windows10 2004 64bit
- Unreal Engine 4.254
Ubuntu側の動作環境
- Ubuntu18.04
- ROS Melodic
各種セットアップ
Windows側のセットアップ
VTCの製作者が基本的なセットアップ方法について書いているので、それを参考にセットアップする。
https://github.com/furo-org/VTC/blob/TC2020/docs/editor.md
Ubuntu側のセットアップ
-
ROS Melodic
ROSのインストールについてはここを参照する
-
octomap
point cloudからoccupancygridを生成するのに使用する
sudo apt-get install ros-${ROS_DISTRO}-octomap
- move_base nav_goalを受け取り、occupancygridをもとにパスを生成して、制御信号であるcmd_velをpublsihする。
sudo apt-get install ros-${ROS_DISTRO}-move-base
- vtc_move_base_test rvizのnav_goal入力後にpublsihされるgeometry_msgsのPoseStampedをmove_baseで利用されるmove_base_msgsのMoveBaseActionGoalに変換してpublishする。
cd ~/catkin_ws/src
git clone https://github.com/yuataka/vtc_move_base_test.git
cd ..
catkin_make
-
ubuntu PC側でVTCとのやりとりを行う。インストールに関してはリンク先を参照。
Move_baseの設定
navigation_stakの設定に関してはROS公式のTutrialをもとに行った。各種configファイルはここにある。Turtrialとは各種frameとcostmap_common_params.yamlで、laser_scan_sensorからpoint_cloud_sensorに変更したところが異なる。
実行
VTCを実行する
VTCのセットアップを終えた状態でVTC.uprojectをクリックすると下記のようになる。
右上のプレイを押すと下記のような画面になるので、Randomize Layoutを押す。
これでVTCの実行は完了。カラーコーンの先のロボットを別のPCからROSで動かす。
cage_ros_stackを起動する
下記コマンドをLinux PC側で実行することでcage_ros_stackを起動する。Windows側のIPアドレスは調べて、パラメーターとして受け渡す必要がある。
roslaunch vtc_bringup bringup.launch ip:=[your Windows PC IP address]
octomap、move_base等を起動する
roslaunch vtc_move_base_test vtc_map_move.launch
動作結果
今後の改良点
今の構成だとoctomapが自己位置にIMUの情報のみを利用しているので、自己位置推定のために何らかのslamのライブラリをかませる必要がある。lio-samとLego-loamをとりあえず試してはいるが、Lego-loamは回転方向の蓄積誤差が多く問題がある。lio-samについては、おそらくVTC側のLiDARとIMUのタイムスタンプに問題があるのか、振動が起こるため、VTC側でどのようにタイムスタンプをつけているか確認する必要がある。