2016年6月23日木曜日

rosのurdfとlaunchファイルを作成して、モデルをrvizで確認する方法


戸惑ったのでメモを残します。
全体の流れは、下記のページを参考にしました。

rosのチュートリアル
Building a Visual Robot Model with URDF from Scratch

オープンソースのROS解説本 11章ROSによるロボットアームの制御
詳説 ROSロボットプログラミング

全体像

  1. 事前条件
  2. パッケージの作成
  3. urdfファイルの作成
  4. urdf.rvizのコピー
  5. launchファイルの作成
  6. launchの実施

事前条件

  • ros-indigoがインストールされていること。
  • ~/catkin_ws/srcでcakin_init_workspaceが実施され、~/cation_ws/srcが作業フォルダとして認識されていること。

パッケージの作成

urdf確認のためのテスト用パッケージ(my_urdf_test_pkg)を作成します。
cd ~/catkin_ws/src
catkin_create_pkg my_urdf_test_pkg urdf

urdfファイルの作成

円柱2本で出来た腕を作ります。
roscd my_urdf_test_pkg
mkdir urdf
gedit urdf/my_simple_model.urdf
my_urdf_test_pkg/urdf/my_simple_model.urdf
<?xml version="1.0"?>
<robot name="my_simple_model">
  <link name="world"/>
  <link name="base_link">
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.5"/>
      <mass value="0.1"/>
      <inertia ixx="0.1" ixy="0" ixz="0" iyy="0.1" iyz="0" izz="0.1"/>
    </inertial>
    <visual>
      <origin xyz="0 0 0.3" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </visual>
  </link>
  <link name="l1">
    <inertial>
      <origin rpy="0 0 0" xyz="0 0 0.5"/>
      <mass value="0.1"/>
      <inertia ixx="0.1" ixy="0" ixz="0" iyy="0.1" iyz="0" izz="0.1"/>
    </inertial>
    <visual>
      <origin xyz="0 0 0.3" rpy="0 0 0"/>
      <geometry>
        <cylinder length="0.6" radius="0.2"/>
      </geometry>
    </visual>
  </link>

  <joint name="base_joint" type="fixed">
    <parent link="world"/>
    <child link="base_link"/>
  </joint>
  <joint name="j1" type="revolute">
    <axis xyz="0 1 0"/>
    <origin rpy="0 0 0" xyz="0 0 0.6"/>
    <parent link="base_link"/>
    <child link="l1"/>
    <dynamics damping="0.01" friction="0.0"/>
    <limit effort="100" lower="-1.57" upper="1.57" velocity="100.0"/>
  </joint>

</robot>

urdfのチェック
roscd my_urdf_test_pkg
check_urdf urdf/my_simple_model.urdf

launchファイルの自作をせずにモデルだけ確認したい場合は、urdf_tutorialを使うとrvizで確認できます。
roslaunch urdf_tutorial display.launch model:=urdf/my_simple_model.urdf


rvizで確認できるurdfファイルができました。
urdf_tutorialでrvizを起動したことをベースに、カスタマイズ出来る環境を作ります。

urdf.rvizのコピー

urdf_tutorialが使っているrvizの設定ファイルを「my_urdf_test_pkg/urdf.rviz」にコピーします。
roscd my_urdf_test_pkg
roscp urdf_tutorial urdf.rviz ./

urdf.rvizを利用せずにrvizを実行すると、Global Statusに「Fixed Frame [map] does not exist」というwarningかErrorが出て、モデルが表示されません。


launchファイルの作成

rvizやアームの操作に必要なguiなどを実行するlaunchファイルを作ります。
roscd my_urdf_test_pkg
mkdir launch
gedit launch/my_simple_model.launch
my_urdf_test_pkg/launch/my_simple_model.launch
<launch>
  <arg name="model" default="$(find my_urdf_test_pkg)/urdf/my_simple_model.urdf" />
  <arg name="gui" default="true" />
  <param name="robot_description" textfile="$(arg model)" />
  <param name="use_gui" value="$(arg gui)"/>
  <node name="joint_state_publisher" pkg="joint_state_publisher"
        type="joint_state_publisher" />
  <node name="robot_state_publisher" pkg="robot_state_publisher"
        type="robot_state_publisher" />
  <node name="rviz" pkg="rviz"
        type="rviz"
        args="-d $(find my_urdf_test_pkg)/urdf.rviz" required="true" />
</launch>


launchの実施

launchして動作を確認します。
roscd my_urdf_test_pkg
roslaunch launch/my_simple_model.launch

角度を変えられるguiとロボットが表示されたrvizが起動します。


guiでjointの角度を変えられます。


これは…楽しい。

以上です。
間違いがありましたら、ご指摘ください。
参考になれば嬉しいです。

その他参考

Rviz reporting no fixed frame

0 件のコメント :

コメントを投稿