Help us understand the problem. What is going on with this article?

ROS講座33 車輪ロボットを作る1(rvizで表示)

項目
CPU Core i5-8250U
Ubuntu 16.04
ROS Kinetic
Gazebo 7.0.0

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

概要

gazeboで車輪型のロボットをを作って動かすことを目標にします。ロボットのシミュレーションのためにはそれ用のurdfを作成する必要があります。車輪ロボットの全体のurdfは複雑になるので、今回はrvizで表示できる最低限のurdfを作ります。

目標

今回は対向2輪車輪型のロボットを目的としています。対向2輪ではモーターのついている2輪とロボットの車体を支えるキャスターが必要です。
右輪と左輪を駆動することで前進・後退と回転の移動をすることができる基本的な移動ロボットです。
本当は2自由度のキャスターがあるのですが、個々のシミュレーションは色々と問題があるので、摩擦の小さい球体で代用します。

差動2輪ロボット概要.png

車体パラメーター

パラメーター
車輪半径 0.05m
車輪間距離 0.2m

urdf

sim1_lecture/xacro/dtw_robot1.xacro
<?xml version="1.0"?>
<robot name="dtw_robot" xmlns:xacro="http://ros.org/wiki/xacro">
  <material name="gray">
    <color rgba="0.5 0.5 0.5 2.5"/>
  </material>
  <material name="red">
    <color rgba="1.0 0.0 0.0 2.5"/>
  </material>

  <xacro:macro name="wheel_macro" params="parent prefix xyz">
    <joint name="${prefix}_joint" type="continuous">
      <origin xyz="${xyz}" rpy="${radians(-90)} 0 0"/>
      <parent link="${parent}"/>
      <child  link="${prefix}_link"/>
      <axis xyz="0 0 1" />
    </joint>
    <link name="${prefix}_link">
      <visual>
        <geometry>
          <cylinder radius="0.05" length="0.02" />
        </geometry>
        <material name="red"/>
      </visual>
    </link>
  </xacro:macro> 

  <link name="base_link"/>

  <joint name="body_joint" type="fixed">
    <parent link="base_link"/>
    <child  link="body_link"/>
    <origin xyz="-0.07 0 0.07" rpy="0 0 0"/>
  </joint>
  <link name="body_link">
    <visual>
      <origin xyz="0 0 0" rpy="0 0 0" />
      <geometry>
        <box size="0.24 0.18 0.06" />
      </geometry>
      <material name="gray" />
    </visual>
  </link>

  <xacro:wheel_macro prefix="left_wheel"  parent="base_link" xyz="0 0.1 0.05"/>
  <xacro:wheel_macro prefix="right_wheel" parent="base_link" xyz="0 -0.1 0.05"/>

  <joint name="ball_joint" type="fixed">
    <parent link="base_link"/>
    <child  link="ball_link"/>
    <origin xyz="-0.14 0 0.04" rpy="0 0 0"/>
  </joint>
  <link name="ball_link">
   <visual>
     <origin xyz="0 0 0" rpy="0 0 0" />
     <geometry>
       <sphere radius="0.04" />
     </geometry>
     <material name="gray" />
   </visual>
  </link>
</robot>

詳しく説明していきます。

  • base_linkという名前のlinkには重要な意味があります。これは慣例的にロボットの基準の位置に置かれるlinkです。制御や位置トラッキングの基準点として使われるのでロボットの形態によって置く場所は慎重に考える必要があります。対向2輪型では2つの動輪の中心で、ロボットが地上にいるときに地上(つまりz=0)になるようにbase_linkを設定します。
  • ロボットの進行方向がx軸、上方向がz軸になります。
  • 後々出てくる「diff_drive_controller」の都合で各jointは前進している時に回転速度が正になるように回転軸を付けます。

表示の確認

rvizでモデルを表示
roscd sim1_lecture/xacro/
roslaunch urdf_tutorial display.launch model:=dtw_robot1.xacro 

sim1_dtw_rviz.png

joint_state_publisherのGUIで軸を回すことができます。回転軸があっているか(=正回転が前進する向きになっていること)確認をしましょう。

参考

urdfの書き方

目次ページへのリンク

ROS講座の目次へのリンク

srs
ロボットを日々こつこつと製作しています。ロボットやROSやC++、pythonに関心があります。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away