ROS Navigation Stack について1 ~ move_baseの起動スクリプト作成 ~

今日はROSのチュートリアルに従って,move_baseに対してシンプルな移動コマンドを発行するところをやりたいと思います.
が,まずはmove_baseを必要なパラメータを提供しつつ起動してあげないといけないので,move_baseの起動スクリプトを作成します.

1. turtlebot_navigationのlaunchファイルを参考に,必要な箇所だけ抜き出す.

まずは,move_baseを起動するためのlaunchファイルをturtlebot_navigationから持ってきます.
turtlebot_navigationのファイルはローカリゼーションまでやっているものなので,
今回は,3D Sensor,Map Server, AMCL無しの構成なので,不要な箇所を削除します.
結局,一つにまとめると,下記のようにすればmove_baseが単体で立ち上がります.
使用するパッケージに関しては,自作パッケージになるので,turtlebot_navigationのところは変えないといけないです.
今回は,tsukuba_exploration_rover_navigationパッケージを自作する前提で作ります.

<launch>
  <include file="$(find tsukuba_exploration_rover_navigation)/launch/includes/velocity_smoother.launch.xml"/>
  <include file="$(find tsukuba_exploration_rover_navigation)/launch/includes/safety_controller.launch.xml"/>
  
  <arg name="odom_frame_id"   default="odom"/>
  <arg name="base_frame_id"   default="base_footprint"/>
  <arg name="global_frame_id" default="odom"/>
  <arg name="odom_topic" default="odom" />

  <node pkg="move_base" type="move_base" respawn="false" name="move_base" output="screen">
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/costmap_common_params.yaml" command="load" ns="global_costmap" />
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/costmap_common_params.yaml" command="load" ns="local_costmap" />   
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/local_costmap_params.yaml" command="load" />   
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/global_costmap_params.yaml" command="load" />
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/dwa_local_planner_params.yaml" command="load" />
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/move_base_params.yaml" command="load" />
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/global_planner_params.yaml" command="load" />
    <rosparam file="$(find tsukuba_exploration_rover_navigation)/param/navfn_global_planner_params.yaml" command="load" />
    
    <!-- reset frame_id parameters using user input data -->
    <param name="global_costmap/global_frame" value="$(arg global_frame_id)"/>
    <param name="global_costmap/robot_base_frame" value="$(arg base_frame_id)"/>
    <param name="local_costmap/global_frame" value="$(arg odom_frame_id)"/>
    <param name="local_costmap/robot_base_frame" value="$(arg base_frame_id)"/>
    <param name="DWAPlannerROS/global_frame_id" value="$(arg odom_frame_id)"/>

    <remap from="cmd_vel" to="navigation_velocity_smoother/raw_cmd_vel"/>
    <remap from="odom" to="$(arg odom_topic)"/>
  </node>
</launch>

上記のファイルをひとまずmove_base.launchと命名して保存します.保存したものは,自分のパッケージ下のlaunchにでも入れておけばいいかと.
で,その専用のパッケージを作ります.

2. 変更したスクリプトを保存するパッケージを作成する.

cd ~/reps/catkin_ws/src/
catkin_create_pkg tsukuba_exploration_rover_navigation

もともとのturtlebot_navigationからパラメータファイル等々一式をコピーします.

roscd turtlebot_navigation
cp -r launch/ ~/reps/catkin_ws/src/tsukuba_exploration_rover_navigation
cp -r param/ ~/reps/catkin_ws/src/tsukuba_exploration_rover_navigation

3. local_costmapの内容をglobal_costmapにコピーする.

 今回はオドメトリ情報のみを頼りにロボットを動かすので,global_costmapは使いません.が,move_base自体はglobal_costmapを必要とするので,local_costmap_params.yamlの内容をglobal_costmap_params.yamlに上書きします.一行目のglobal_costmap:はそのままにします.

4. move_base.launchの実行

 作成したlaunchファイルを早速実行します.すると,下記の警告が出てきますが,これはまだodom情報を作成・パブリッシュしてないからですね.

[ WARN] [1486792398.759467327]: Timed out waiting for transform from base_footprint to odom to become available before running costmap, tf error: . canTransform returned after 0.100692 timeout was 0.1.

ということで,ひとまずmove_baseを起動するところまでは来ました.次はOdometry情報をパブリッシュするとこをやります.