URDF+launch+Rvizロボットモデル memo

概要
=
ロボット（本体）モデルを作るためのURDFファイルについての概要説明、launchファイル作成してみて、作成したURDFモデルをRVitで表示してみるまでの流れをメモした

モデル構成
=
モデルは主に３つの部分で構成している。

１．手足を記述したLinkラベル
![Link.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/6aa67833-1d7d-0676-d97c-3067e342dee1.png)

２．関節を記述したJointラベル
![joint.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/29b4e8b1-ee7c-6c02-9116-a8a2b2357be1.png)

３．全体の手足と関節を記述したrobotラベル
![robot.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/6849da67-8190-a1ca-f669-5f1a515de188.png)

Pkgを作ってみよう(workspace/src)
=
PKG作成ターミナルコマンド
~~~~~~~~~~~~~~~~~~~
catkin_create_pkg mbot_description urdf xacro
~~~~~~~~~~~~~~~~~~~
Pkgできたら、手動で４つのフォルダを作成 in folder mbot_description
1.urdf　モデルファイル用
2.meshes　　モデル外観の3Dデーターファイル用
3.launch　　起動ファイル用
4.config　　rvizパラメータ設定ファイル用

下記コマンドを使えば自動で生成してくれる。 
~~~~~~~~~~~~~~~~~~~~~~
mkdir urdf launch meshes config
~~~~~~~~~~~~~~~~~~~~~~
![modelfolder.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/4b51ae8e-fd75-6486-e8bd-36cff4e0a490.png)

urdfを作って見る
=

mrobot_chassis.urdf の例は下記参照して作成できる。

urdfファイル(mrobot_chassis.urdf)
~~~~~~~~~~~~~~
<?xml version="1.0" ?>
<robot name="mrobot_chassis">

    <link name="base_link">
        <visual>
            <origin xyz=" 0 0 0" rpy="0 0 0" />
            <geometry>
                <cylinder length="0.005" radius="0.13"/>
            </geometry>
            <material name="yellow">
                <color rgba="1 0.4 0 1"/>
            </material>
        </visual>
    </link>
    
    一部省略

</robot>
~~~~~~~~~~~~~~

urdfをチェックして見る
=
urdfモデル作成できたら,liburdfdom_toolにて確認できる。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
sudo apt-get install liburdfdom-tools

check_urdf mrobot_chassis.urdf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![Screenshot from 2023-06-11 21-19-16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/4c2057b2-51a5-5bd3-d0a9-9465103e08dd.png)
これでロボットの構成が表示されていれば、概ねLinkとJointは問題なさそう。

より詳細な内容を確認したい場合は下記コマンドにて構成をpdfでoutputして見ることができる。
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
urdf_to_graphiz mrobot_chassis.urdf
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
![Screenshot from 2023-06-11 21-22-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/a184af0d-533e-51e1-1ad1-11983cdb5d42.png)
実際pdfの中身を開くとこんな感じ。
![Screenshot from 2023-06-11 21-21-45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/4ce461f2-262c-121f-7676-f1adce542600.png)

launchファイルを作って見る
=
~~~~~~~~~~~~~~
nano display_mrobot_chassis_urdf.launch
~~~~~~~~~~~~~~
中身
~~~~~~~~~~~~~~
<launch>
    <!-- robot bodyのモデルを起動 -->
    <param name="robot_description" textfile="$(find mbot_description)/urdf/mrobot_chassis.urdf" />

    <!-- GUI　パラメータ設定 -->
    <param name="use_gui" value="true"/>
    
    <!-- joint_state_publisher -->
    <node name="joint_state_publisher_gui" pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" />
    
    <!-- robot_state_publisher，tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
    
    <!-- rviz可視化設定 -->
    <node pkg="rviz" type="rviz" name="rviz" />

</launch>
~~~~~~~~~~~~~~
注釈：
joint_state_publisherは何？
これはROSのツール（node）、起動した時にJointの位置をコントロールするUIも一緒に起動され、UIのラジオボタンを調整するとGUI（RVit）上にあるJointを動かすことができる。
robot_state_publisherは何？
ロボットモデルにあるLink、Jointの位置関係をTF形式で３次元情報として出している。
![Screenshot from 2023-07-01 14-45-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/6ee06a1c-5be2-bc09-9b6a-8235f42942da.png)


モデルを表示して見る
=
ターミナルで動かしてみる
~~~~~~~~~~~~~~
roslaunch mrobot_description display_mrobot_chassis_urdf.launch
~~~~~~~~~~~~~~
エラなくうまく行けば、下記のようなモデル画面が起動され、画面のようにモデルを表示するように設定すれば、モデルが表示されるようになる。
    
![add robotmodel.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/aab6ff6f-ec9d-5920-c4f1-8693ecd00f94.png)

下記のようなエラが発生した場合,apt-getのコマンドを使ってappをインストール必要。
ERROR: cannot launch node of type [robot_state_publisher/state_publisher]: Cannot locate node of type [state_publisher] in package [robot_state_publisher]. Make sure file exists in package path and permission is set to executable (chmod +x)
~~~~~~~~~~~~~~
sudo apt-get install ros-noetic-robot-state-publisher
~~~~~~~~~~~~~~

モデルはこんな感じになりました。

![Screenshot from 2023-06-11 21-30-43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/b66c7a1a-c0f3-af23-6e5b-a5d47455f654.png)

Vizにどの座標系でデータを表示するか指定することが必要です。RViz画面中の「Fixed Frame」の右側でbase_linkを選択します。
![Screenshot from 2023-07-01 22-21-44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/65ffca33-30ab-67cb-40ee-051ac52a64f6.png)

Rviz表示するための設定はモデルによって変えることが多いので、その設定を保存することができる。
![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3181208/65388dfc-cf6b-a8ae-6917-753aabdeb9c2.png)
保存した表示設定コンフィグはlaunchファイルの中に入れてあげれば、次開く時に同じ設定で開いてくれるようになる。
コンフィグ指定する前はデフォルトの設定で開いている。
~~~~~~~~~~~~~~~~~~~~~~~~~
 <node name="rviz" pkg="rviz" type="rviz" args="-d $(find mrobot_description)/config/mrobot_chassis.rviz" required="true" />
~~~~~~~~~~~~~~~~~~~~~~~~~

https://qiita.com/ryuka0610/items/5a5df638543abfa56dce