View on GitHub

introduction-to-ros

ROS (Robot Operating System) 入門

Gazebo上にロボットをスポーン

前のページ

概要

Gazebo上にロボットをスポーンさせるlaunchファイルを書きます.

launchファイル作成

my_urdf_tutorial配下にlaunchディレクトリを作成し,robot_simulation.launchという名前のlaunchファイルを作成します.

<?xml version="1.0"?>
<launch>
  <param name="robot_description" textfile="$(find my_urdf_tutorial)/urdf/roomba_sim.urdf"/>

  <include file="$(find gazebo_ros)/launch/empty_world.launch"/>

  <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -x 0.0 -y 0.0 -z 0.5 -R 0 -P 0 -Y 0 -urdf -model roomba_sim" />

  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen" />
  
  <node name="rviz" pkg="rviz" type="rviz"/>

</launch>

各行解説

  <param name="robot_description" textfile="$(find my_urdf_tutorial)/urdf/roomba_sim.urdf"/>

urdfをrobot_descriptionという名前のROSのパラメータとして読み込んでいます."$(find my_urdf_tutorial)/urdf/roomba_sim.urdf"でurdfの在処を示しています. なお,Rvizはロボットモデルをrobot_descriptionという名前のパラメータから読み込むよう指定されているので,ここの名前はrobot_descriptionである必要があります.

  <include file="$(find gazebo_ros)/launch/empty_world.launch"/>

Gazeboを起動するlaunchファイルを含めています.このlaunchファイルは何もない環境を起動します.

  <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -x 0.0 -y 0.0 -z 0.5 -R 0 -P 0 -Y 0 -urdf -model roomba_sim" />

urdfで作成したロボットモデルをGazeboにスポーンさせます. xyzRPYはスポーンさせる座標で,車輪が地面にめり込むのを防ぐためにz=0.5の上空から降らせています.modelには自身で作成したurdfのrobotタグで指定した名前を記載します.

  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen" />

Gazebo上のロボットの各リンクの状態をpublishするノードを立ち上げています.これをRvizが受け取ることで,Rviz上のロボットもGazebo上と同様に動きます.

  <node name="rviz" pkg="rviz" type="rviz"/>

Rvizを起動する記述です.

launch

roslaunch my_urdf_tutorial robot_simulation.launch

ロボットを操作してみる

以下のコマンドを打つと,キーボードでgeometry_msgs/Twist型のcmd_velトピックをpublishすることができるようになります.すなわち,キーボードで先程のロボットを動かせるようになります.

sudo apt install ros-noetic-teleop-twist-keyboard

launchを立ち上げます.

roslaunch my_urdf_tutorial robot_simulation.launch

その後,別ターミナルで

rosrun teleop_twist_keyboard teleop_twist_keyboard.py

として先程ダウンロードしたノードをrosrunしましょう.

Rvizは再度上記と同様のカスタマイズを行ってください.ただ,毎回これを行うのは面倒なので,次の章でカスタマイズを保存するRviz configについて説明します.

以下のように環境が整います. ここで,teleop_twist_keyboard.pyを起動したターミナルをアクティブにした状態で(カーソルを合わせた状態で),表示されているキーコンフィグに従ってキーボードを押してみましょう.例えば,iボタンを押してみましょう.ロボットが動くはずです!

Rviz config

現在のRvizコンフィグを保存し,以降呼び出すようにします. FileのSave Config Asをクリック

my_urdf_tutorialパッケージの場所まで移動したら,configという名前の新たなフォルダを作成しましょう.

my_urdf_tutorial/config配下にrobot_simulation.rvizを作成しましょう.以下のようにrobot_simulationと入力してSaveを押せばOKです.

その後Ctrl+Cで閉じます.次はRviz起動時にコンフィグを読み込むようにrobot_simulation.launchを以下のように書き換えます.

<?xml version="1.0"?>
<launch>
  <param name="robot_description" textfile="$(find my_urdf_tutorial)/urdf/roomba_sim.urdf"/>
  <arg name="rvizconfig" default="$(find my_urdf_tutorial)/config/robot_simulation.rviz" />

  <include file="$(find gazebo_ros)/launch/empty_world.launch"/>

  <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -x 0.0 -y 0.0 -z 0.5 -R 0 -P 0 -Y 0 -urdf -model roomba_sim" />

  <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" output="screen" />
  
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig) -f odom"/>
</launch>

arg name="rvizconfig" default="$(find my_urdf_tutorial)/config/robot_simulation.rviz" />を追加し,Rviz起動部分を<node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig) -f odom"/>と書き換えました. rviz configファイルをlaunchの変数として読み込み,Rviz起動時に渡しています.また,Rviz起動時に-f odomとすることで座標系 (frame) がmapではなく始めからodomに固定されます.

リンク

次のページ

目次


余談

odometry(前頁のを再掲)

車輪型移動ロボットにおける車輪の回転角からそれぞれの車輪の移動量を求め、ロボットの位置を推定する手法の総称をオドメトリ (odometry) と言います.