LoginSignup
33
24

More than 1 year has passed since last update.

ROS講座13 URDFを記述する1

Last updated at Posted at 2018-05-20

環境

この記事は以下の環境で動いています。

項目
CPU Core i5-8250U
Ubuntu 20.04
ROS Noetic

インストールについてはROS講座02 インストールを参照してください。
またこの記事のプログラムはgithubにアップロードされています。ROS講座11 gitリポジトリを参照してください。

概要

この先Rvizのプログラムの製作方法を解説していきます。今回はその第1段階のロボットの記述ファイルであるURDFの書き方ととりあえずの表示の仕方を解説します。

URDFとは

URDF (Unified Robot Description Format)とは、ロボットの構造を記述するためのXMLのフォーマットです。URDFにおける記述はLinkとJointから構成されます。

  • Linkはロボットの駆動しない1ブロックです。Linkは以下のような要素を持ちます。
    • 見た目の形、色
    • 衝突判定の形
    • 重さとイナーシャ
  • JointはLinkとLinkの接続を表します。
    • jointの種類(固定、回転、直動....)
    • jointの詳細オプション

このlinkとjointによって、木構造となります。

またurdfに詳細なオプションを書くことで、これからsimulation用モデルを生成することができます。

link.png

ROS wikiより

前準備

パッケージの作成

(git cloneした場合は必要ありません)

cd ~/catkin_ws/src/
catkin_create_pkg vis_lecture std_msgs rospy roscpp tf

urdf_tutrialパッケージのインストール

urdfを表示するlaunchが含まれているのでそれを使用します。

sudo apt-get install -y ros-kinetic-urdf-tutorial 

URDFファイルの作成

URDFファイルは慣例的にROSパッケージ名/urdf/以下に置きます。今回は簡単な箱が1つあるだけの簡単なURDFを作成します。

vis_lecture/urdf/simple_body1.urdf
<robot name="test_robot">
  <link name="base_link"/>

  <joint name="body_joint" type="fixed">
    <parent link="base_link"/>
    <child  link="body_link"/>
  </joint>
  <link name="body_link">
    <visual>
      <geometry>
        <box size="0.3 0.3 0.2"/>
      </geometry>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <material name="red">
        <color rgba="1.0 0.0 0.0 1.0"/>
      </material>
    </visual>
  </link>
</robot>

URDFファイルの解説

<robot>タグの中に書いていきます。今回のファイルには大きく分けて3つの要素があります。

  • base_linkは中身のないlinkです。流儀としてロボットの位置を示す基準のとしてbase_linkという名のlinkを製作します。
  • body_linkは言わばロボットの本体を示すlinkです。 <link name="body_link"></link>の中身としてvisual要素があります。これはRviz上での見た目を定義しています。形は今回は箱型(box)を使っています。size="0.3 0.3 0.2"は箱のx軸方向、y軸方向、z軸方向のサイズを示しています。ほかのオプションについては次回解説します。 material以下では色を定義できます。HTMLなどではredと入れるだけで赤色が入るのですが、URDFでは名前とRGBAの両方を定義しなくてはなりません。colorタグの中のrgba属性で定義している値は、順に赤、緑、青、アルファ値(透明度)です。赤緑青は0.0~1.0までの値をとれてすべての値が0.0なら黒、1.0なら白になります。アルファ値は0.0~1.0で値が小さいと透明、大きいと不透明なのですが、バグなのか2.0ぐらいにならないと不透明になりません。
  • body_jointbase_linkbody_linkを接続するjointです。種類はfixedで名前の通り固定された稼働しない接続です。

URDFのチェック

製作したURDFが正しいフォーマットになっているかを確認します。ただこのツールはlinkやjointの関係が正しいかを見るだけで、細かいチェックはできません。例えば<material name="red"><materialllll name="red">のようにつづり間違えをしていてもチェックしてくれません。

URDFのチェック
roscd vis_lecture/urdf/
check_urdf simple_body1.urdf 

正しいと以下のような表示が出ます。

robot name is: test_robot
---------- Successfully Parsed XML ---------------
root Link: base_link has 1 child(ren)
    child(1):  body_link

表示

本当はURDFの作成後にRviz上のロボットを動かすためのROSノードやlaunchファイルの記述が必要なのですが、とりあえず表示をします。
下のコマンドを実行すると以下のような画面が出てきます。赤い直方体がURDFで記述して表示されているロボットです。
もし表示されていないときはFixed framebase_linkであること、RobotModelにチェックがついていることを確認してください。

URDFの表示
roscd vis_lecture/urdf/
roslaunch urdf_tutorial display.launch model:=simple_body1.urdf 

rviz.png

launchの解説

apt-getで入手したROSパッケージであるurdf_displayの今回呼び出しだlaunchファイルの中身を見てみましょう。

launchの表示
roscd urdf_tutorial/launch/
less display.launch 
urdf_tutorial/display.launch
<launch>

  <arg name="model" />
  <arg name="gui" default="true" />
  <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" />

  <param name="robot_description" command="$(find xacro)/xacro.py $(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="state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />

</launch>

今まで解説していない要素がありますが、ざっくり理解してほしいところは以下の3点です。

  • modelという変数で読み込むurdfファイルを設定している。
  • GUIを表示するrvizという名前のROSノードを起動している。
  • Rviz中での物体の表示のためにjoint_state_publisher、robot_state_publisherというROSノードが使われている。

参考

ROS wiki

目次ページへのリンク

ROS講座の目次へのリンク

33
24
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
24