LoginSignup
5

More than 5 years have passed since last update.

ROSを使ったURDF作成

Last updated at Posted at 2018-12-29

物理シミュレーションをする時にROS(Robot Operating System)が必要になります.
また,物理オブジェクトを作るのにurdf形式で物体を用意する必要もあります.
色々ハマった箇所があったので,今回はそのROSのインストールとURDFの作成についてまとめました.

目次

  1. ROSをインストールする
  2. ワークスペースを作成
  3. パッケージを作成
  4. launchファイルを作る
  5. URDFファイルを作る
  6. URDFをrivzで確認

バージョン

  • Ubuntu 14.04 Trusty
  • ROS indigo
  • Gazebo 2 (任意)

ROSの最新バージョンはmelodicですが,Ubuntu 14.04では対応していないので,indigoをインストールします.
Gazeboは物理エンジンで,ROSと連携できる機能があるため今回は一緒にインストールしましたが,特に必要ではないです.ROS indigoに対応しているGazeboはバージョン2です.(間違ってGazebo7を入れてしまってハマった)

1. ROSをインストールする

source.listとキーの設定

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu trusty main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

インストール

sudo apt-get update
sudo apt-get install ros-indigo-desktop-full

ハマった箇所

  • 私の場合,Gazebo7を先に入れてしまってROSのインストールに失敗してハマりました. (依存パッケージがインストールできない問題) Ubuntu 14.04にはGazebo7が対応しているが,ROS indigoはGazebo2までしか対応していないことが原因でした.
sudo aptitude install ros-indigo-desktop-full

をして,解決方法を受け入れる(y)にすると,Gazebo2とROS indigoが両方入る.


rosdepの初期化

sudo rosdep init
rosdep update

環境変数の設定

echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrc
source ~/.bashrc

rosinstallの準備

sudo apt-get install python-rosinstall

Gazeboのインストール

source.listとキーの設定

sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu trusty main" > /etc/apt/sources.list.d/gazebo-latest.list'
wget http://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -

インストール

sudo apt-get update
sudo apt-get install libsdformat1 libsdformat-dev gazebo2

ROSと連携するプラグインをインストール

sudo apt-get install -y ros-indigo-gazebo-ros-control ros-indigo-ros-control ros-indigo-ros-controllers

参考にしたサイト

2. ワークスペースを作成

空のワークスペースを作成

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace

catkin_makebuilddevelフォルダを作成

cd ~/catkin_ws/
catkin_make

有効化します

source devel/setup.bash

bashを立ち上げる時に自動で有効化するようbashrcに書き加えます.

echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc

ROSの設定をbashrcに記述

.bashrcに次を追加します.

# Set ROS Network
export ROS_HOSTNAME=127.0.0.1
export ROS_MASTER_URI=http://${ROS_HOSTNAME}:11311

ROS_HOSTNAMEはPCのIPアドレスを指定しますが,固定化されてない場合は127.0.0.1としておきます.


ハマった箇所

  • ROSはsystemのpython(python2系)でないと動かないので,pyenvを使っている方はsystemに変更しておきましょう.

参考にしたサイト

3. パッケージを作成

すでにROSは入っていて,新しくモデルを作りたいだけの時はここ(3. パッケージを作成)からで大丈夫です.

ワークスペースのsrcフォルダにパッケージを作成する

my_roboというワークスペースを作ります.
catkin_create_pkg <任意の名前>_descriptionでパッケージを作成します.

cd ~/catkin_ws/src
catkin_create_pkg my_robo_description

各種ディレクトリを作る

meshes, urdf, launch, rvizの4つのフォルダを作成します.

cd catkin_ws/src/my_robo_description
mkdir meshes urdf launch rviz

meshes : stlファイルを入れます
urdf : ここにurdfファイルを作ります
launch : launchファイル(urdfを確認するときに使います)を入れます
rviz : urdfを描画する際に使います

参考にしたサイト

4. launchファイルを作る

urdfをrivzで視覚的に確認したいときに必要になります.どのワークスペースでもほぼ共通です.
display.launchファイルを作ります.

cd launch
gedit display.launch

display.launchに以下を記述します.

<launch>
 
  <arg name="model" default="$(find <パッケージのときに作った名前>_description)/urdf/<モデルの名前>.urdf"/>
  <arg name="gui" default="True"/>
  <arg name="rvizconfig" default="$(find <パッケージのときに作った名前>_description)/rivz/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>

参考にしたサイト

5. URDFファイルを作る

事前に適当な3DCADソフトでstlファイルを作っておき,~/catkin_ws/src/my_robo_description/mesh/に置きます.
urdfはXMLで記述されています.例えば

<?xml version="1.0"?>  <!-- xmlコードを認識してくれる -->
<robot name="my_robo"> <!-- 全体をrobotタグでくくる -->
  <link name="base_link">
 
    <visual>
      <geometry>
        <box size="0.400 0.200 0.100"/>  
      </geometry>
    </visual>
 
    <collision>
      <geometry>
        <box size="0.400 0.200 0.100"/>
      </geometry>
    </collision>
 
  </link>
</robot>

visualタグとcollisionタグは基本的に同じ記述をします.geometryタグで形状を指定します(boxは直方体を描画).基本的に,linkタグでパーツをそれぞれ指定していき,それをjointタグで結合していきます.
各タグの詳しい説明はここを参照してください.

今回はmy_roboという名前のurdfを作成するので,適当なエディタで開きます.

cd urdf
gedit my_robo.urdf

必要な要素

linkタグ

  • inertial : 物理パラメータを記述
    • origin : 座標x,y,z
    • mass : 質量(kg)
    • inertia : 慣性モーメントixx, iyy, izz, ivy, iyz, ixz
  • visual : 見た目
    • origin : 座標x,y,z・オイラー角(向き)row, pitch, yaw
    • geometry : 形状を指定
      • mesh : stlを読み込む
    • (material) : colorを指定できます.必須ではない.
  • collision : 物理的な接触範囲.visualと同じでいい.
    • origin
    • geometry
      • mesh

jointタグ

  • parent : 物体の本体を指定
  • child : 親linkに対して結合するlinkを指定
  • origin : jointの方でパーツの位置を指定
  • axis : 軸の座標x, y, z.回転させたいパーツのときに,回転軸をここで指定します.

CADで作ったstlをurdfに取り込む

geometryタグ内にmeshタグを記述し,そこにstlのパスを指定します.

<geometry>
  <mesh filename="package://robot_description/meshes/base_link_simple.stl"/>
</geometry>

ハマった箇所

  • 3DCAD(123D Designを使ってました)でstlを作るとき,プリミティブ物体ではなく,平面を指定して押し出しというように1から作った方がいいです.物理シミュレーション上で,連続で物体を呼び出すときに途中で読み込みエラーが出ます.
  • 3DCAD上での軸がstlに採用されるので,タイヤなど回転させる物体を作る際は回転軸を考えてstlを作成してください.

jointでくっつけたlinkの関係をチェック

check_urdf <作ったurdf>.urdf

jointとlinkの関係に問題がなければ,successfulと出ます.

参考にしたサイト

6. URDFをrivzで確認

rvizというソフトで作ったurdfを視覚的に確認できます.次でrvizを起動します.

roslaunch <パッケージのときに作った名前>_description display.launch model:=<開くurdfのパスを指定>

例えば,今回ではmy_roboを作っているので

roslaunch my_robo_description display.launch model:=urdf/my_robo.urdf

model:=のパスに注意.カレントディレクトリからの相対パスを指定してください.ただ,urdfモデルはデフォルトでパスを指定してあるため(display.launchファイルに記載),パスを指定しなくても問題ないです.


ハマった箇所

  • ascii codecのエラーが起こる場合,urdfのファイルにスペースではなくtabが入っているとエラーになります.

rvizでの設定

左側のDisplaysより,Global OptionsFixed Framebase_linkを選ぶ
image.png

左下のAddボタンをクリックし,rvizRobotModelを選択しOKを押します. (これを忘れて表示されない!って焦りました)
追加すると,my_robo.urdfで定義した車体が表示されます.
Screenshot+from+2016-09-14+17%3A55%3A13.png

左側のDisplaysより,RobotoModelLinksbase_linkを展開します.

  • Alpha0.5にして,物体を半透明にします.
  • Show Axesにチェックを入れ,x軸(赤)y軸(緑)z軸(青)が表示させます.
  • 全てのlinkに上記を行い,各linkの軸の位置を確認しましょう.

参考にしたサイト

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
5