4章.urdfを作成する

##本章の流れ
 本章では試作した3D-CADモデルからurdfを生成し、それをROS上のrvizで表示することまでを記載します。
これが出来れば、ロボットを画面の中で表現でき、遠隔地からでもロボットの状況をつぶさに把握できる環境を手に入れることが出来ます。
その手順は以下となります。
  1. モデル(3D-CADモデル)を用意する
  2. blenderに取り込む
  3. urdfのディレクトリ作成
  4. urdfを記述する
  5. urdfが正しく出来ているか確認する
  6. rvizで確認する
      
## 実施環境
OS  　　:　Ubuntu16.04LTS. , Ubuntu18.04LTS.
ROS環境 ：　kinetic    , melodic
対象PC　：LattepandaAlphaによる動作（Intel Core m3-7y30 程度の動作）を想定

## 1. モデル(3D-CADモデル)を用意する
　3D-CADモデルを準備するには、現在基本的に無料で使えるCADや、ホームーユーザーライセンスと言った自宅でも3D-CADを利用できる環境が少しづつ増えてきました。そんな中今回はFusion360を使って設計したメカナムロボットを用意しました。この3D-CADモデルを作成するに当たりモデルの向きを注意して作ると良いでしょう。
こちらの下図の様なXYZの向きで配置すると、途中の段階で混乱せずに円滑に変換していけると思います。
![urdf_3D-modelからの変換.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/65663ecc-eaf6-2c41-c111-af4e4340eaa5.png)

3D-CADモデルが配置出来たらFBXファイルに変換します。
![urdf_3D-modelからの変換1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/d79f7f74-8ddb-4b36-c105-f9c9a054bdae.png)
![urdf_3D-modelからの変換2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/694b33a8-bf55-0596-c14f-cff76127df51.png)

普通だとSTLファイルに変換したものをurdfに使ったりするケースも多いのですが、全てのパーツを一変にSTLへ変換すると、色が全て同じ色になってしまったり、STLファイル生成時にエラーが内包されていて読み取れず、ROS上でurdfを何故か表示できない場面がありました。

　そのため$\huge{FBXファイル形式で保存}$することをお勧めします。

## 2. blenderに取り込む
　先程までに作成したFBXファイルをフリーソフトであるblenderに取り込み、urdfで使えるCOLLADAファイル(*.dae)に変換します。
　まずはblenderを起動し、COLLADAファイルを生成するまで図解します。
![blender_変換①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/da3f5cbb-21fd-69fc-0e21-28a1d7ec37b1.png)
![blender_変換②.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/ae74d7c1-31e3-f0b3-403d-9abf6644648e.png)
![blender_変換③.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/fb0975bc-391f-db0e-8077-825505dde6ed.png)
![blender_変換④.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/42c02844-bea2-ad49-0b67-f6491f193eb1.png)
![blender_変換⑤.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/351a96fb-e1cc-107f-1b1d-3f8afe89f3ac.png)
![blender_変換⑥.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/6ce29a9e-8fa9-8945-d55b-bdf33d0fac5c.png)
![blender_変換⑦.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/723a9bc5-8a1e-421b-f2c5-e9576b6158fd.png)

この色の修正方法については以下が参考になると思います。
[Blenderの易しい使い方 : https://blender-cg.net/material/](https://blender-cg.net/material/)


そして出来上がった3Dモデルがこちらです！
![blender_変換⑧.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/e950f567-6de8-9dfe-13ca-925ecab5f0c6.png)

最後にCOLLADAファイルを生成します。
![blender_変換⑨.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/cc992bdb-2e8d-c148-fc6b-520ed9359f14.png)
![blender_変換⑩.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/a92e3686-14d6-3057-e21c-c5ab21df953f.png)


## 3. urdfのディレクトリ作成
 catkin_ws/srcの中にurdf用のパッケージを作成します。

```sh
cd ~/catkin_ws/src
catkin_create_pkg crawler_description
```
　
　ディレクトリ構成の参考として、catkin_ws/src内に以下のディレクトリ構成とファイルを記入しています。
![robot_description.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/23b6a45a-0e3a-2c86-bd6b-a3fea0012f36.png)


## 4. urdfを記述する
ではurdfについての内容を以下に記します。今回作成したCOLLADA(*.dae)ファイルによって記述内容がとても簡単な内容になっています。これは原点配置、配色が既に完了しているためです。

```xml:yonku.urdfの内容
<?xml version="1.0"?>
<robot name="mechanum_robot">
  <link name="base_link">
    <visual>
      <geometry>
        <mesh filename="package://crawler_description/meshes/yonku.dae"/>
      </geometry>
      <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0"/>
    </visual>
  </link>
</robot>

```
もし個別に動く関節が必要であったり、可動範囲を限定させたい場合などはこちらを参考に
内容を追加してみて下さい。
・[GR-ROSEでいこう！](https://techbookfest.org/product/6333114930429952)
  　　↑多関節ロボットアームのurdf作成や、SLAM、ROS2など多彩な内容があります。

・[Create your own urdf file](http://wiki.ros.org/ja/urdf/Tutorials/Create%20your%20own%20urdf%20file)
・[ROS講座13 URDFを記述する1](https://qiita.com/srs/items/35bbaadd6c4be1e39bb9)

## 5. urdfが正しく出来ているか確認する
　先程作成したファイルが正しく出来ているか、以下のコマンドを記入して確認できます。
crawler_description/urdfは、自身で作成しているurdfディレクトリであり、yonku.urdfは
自身で作成したurdfファイルを指定します。

```bash:check_urdf
roscd crawler_description/urdf
check_urdf yonku.urdf
```

## 6. rvizで確認する
　ではrviz上で簡単にurdfを簡単に表示出来るようにするため、launchディレクトリにdisplay.launchを作成します。

```xml:display.launch
<launch>
	<arg name="model" />
	<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="state_publisher" />
 	<node name="rviz" pkg="rviz" type="rviz" args="-d $(find crawler_description)/urdf.rviz" required="true" />  
</launch>
```
このdisplay.launchを使ってrviz上にurdfを表示させます。

```bash:rviz上にyonku.urdfを表示させる
roscore
roslaunch crawler_description display.launch model:=`(rospack find crawler_description)`/urdf/yonku.urdf gui:=False
```

rvizが表示されたら左側のテーブルに記載されたGlobal Optionの中にあるFixed Frameには、base_linkを記入しておきます。またAddボタンを押してRobotModelを追加します。
![rvizの設定_robotmodel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/a7c6c456-f4d7-299e-045c-c1dbf655fd6a.png)

すると以下の様に表示できるでしょう。
![ワークスペース 1_028.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/212663/75035904-757d-b964-a6e2-667298687e8c.png)

やっぱり$\huge{自分で作ったロボットが画面に現れると}$
$\huge{      嬉しいものですね！！}$

## 次は5章.SLAMを使ってみる
　遂に次はSLAMを使ってみます！SLAMの中でもgmappingとcartographerを使ってみたいと思います！
これが出来れば、ROSを使って良かったと実感できると思いますのでお楽しみに！
[5章.SLAMを使ってみる](https://qiita.com/motoms/items/4c45f75911e210088ea1)

## 今までの道のり
[作って分かった「ROSを使う前のロボットと、ROSを使った後のロボットの変化」](https://qiita.com/motom0509/items/1e1b6866eba52dcdf90b)

目次： [ROSを使った自動航行ロボットをつくるまでの道のり　ー序章　概要ー](https://qiita.com/motom0509/items/ea297fffbd6865b85bdb)
[1章.ロボットのROS対応](https://qiita.com/motom0509/items/c81d85b2e7967a780eb9)
[2章.ロボットを操作する](https://qiita.com/motom0509/items/e5b3310c248b23f36ef7)
前章 ：[3章.LiDARを動かす](https://qiita.com/motom0509/items/382bfcee80aa05f5dcd9)

##参考文献
・[GR-ROSEでいこう！](https://techbookfest.org/product/6333114930429952)
・[Learning URDF](http://wiki.ros.org/ja/urdf/Tutorials)
・[ROS講座13 URDFを記述する1](https://qiita.com/srs/items/35bbaadd6c4be1e39bb9)
・[ロボットをURDFで記述する](http://ishi.main.jp/ros/ros_create_urdf.html)
・[ROSを使ったURDF作成](https://qiita.com/yumion/items/cda93cc8b4bafa3e5897)