はじめに
前回の記事ではWSL2へROS2-FoxyとGazeboをインストールしました。
今回はNavigation2のサイトを参考にロボットモデルを作成していきます。
実際にPub/Sub通信を実装していくのはもう少し先になります。
前提条件
前提条件は以下の通りです。
- 前回の記事が完了していること
- Visual Studio Codeがインストールされていること
WSL2を使用している場合、Visual Studio Code (VSCode) のインストールはこちらから可能です。
Ubuntu20.04 を使用している場合、こちらから.debファイルをダウンロードし
sudo dpkg -i <ファイル名>.deb
でインストール可能です。
VSCodeの拡張機能をインストール
まずは、VSCodeを開きます。左側の拡張機能タブをクリックすると検索ボックスが表示されます。
検索ボックスに「WSL」と入力すると拡張機能の候補が表示されます。
(Ubuntu20.04の場合、WSLのインストールは不要です)
「インストール」をクリックして、VSCodeに拡張機能をインストールします。
同様に以下の拡張機能も追加します。(WSL2、Ubuntu20.04共通)
- XML
- XML Tools
- URDF
- ROS (Microsoft)
- ROS Snippets (Liews Wuttipat)
- Code Runner
- vscode-icons
以上で、VSCodeの拡張機能のインストール作業は終わりです。
ROS2ワークスペースの作成
次に、ROS2用のワークスペースを作成します。パッケージ名はros2_first_testとします。
cd ~/
mkdir ros2_ws ← フォルダ名は自由
cd ros2_ws
mkdir src ← srcのみ可
cd src
ros2 pkg create --build-type ament_python ros2_first_test ← <ros2_first_test>は自由
cd ros2_first_test
mkdir urdf
cd ~/ros2_ws
colcon build --packages-select ros2_first_test
これでワークスペースの作成は完了です。次の作業のためにVSCodeを開いておきます。
cd ~/ros2_ws/src/ros2_first_test
touch ./urdf/first_robot.urdf
code .
URDFの作成
さて、ようやくURDFの作成へと移ります。VSCodeは開いてあるので、現在の画面は
このようになっているはずです。
urdfフォルダの中にあるfirst_robot.urdfを開き、以下を入力します。
<?xml version="1.0" ?>
<robot name="rover">
<!-- main center object -->
<link name="base_link">
<visual>
<geometry>
<box size="0.4 0.35 0.075"/>
</geometry>
<material name="gray">
<color rgba="0.2 0.2 0.2 1"/>
</material>
</visual>
<inertial>
<mass value="2"/>
<inertia ixx="0.04" ixy="0.0" ixz="0.0" iyy="0.17" iyz="0.0" izz="0.25" />
<!--<inertia ixx="0.04" ixy="0.0" ixz="0.0" iyy="0.17" iyz="0.0" izz="0.25" />-->
</inertial>
<collision>
<geometry>
<box size="0.4 0.35 0.1"/>
</geometry>
</collision>
</link>
<!-- Robot Footprint -->
<link name="base_footprint"/>
<joint name="base_joint" type="fixed">
<parent link="base_link"/>
<child link="base_footprint"/>
<origin xyz="0.0 0.0 -0.075" rpy="0 0 0"/>
</joint>
</robot>
ctrl + shift + Pでコマンドパレットを開き、[ROS: Preview URDF] を選択すると、
下の画像のように物体が表示されます。
ここまで正常に動作していれば、あとはコードを理解していくだけです。
まず、冒頭の
<?xml version="1.0" ?>
<robot name="rover">
“rover”には好きなロボット名称を記入してください。
<link name="base_link">
linkやjointの説明はROS公式のURDFのページに記載されています。
詳細は後程に回すので linkは骨 jointは関節 と考えてください。
linkタグの中に<visual><inertial><collision>がありますが、
それぞれ外観、慣性、干渉領域を表しています。
まずは<visual>タグについてです。
<visual>
<geometry>
<box size="0.4 0.35 0.075"/>
</geometry>
<material name="gray">
<color rgba="0.2 0.2 0.2 1"/>
</material>
</visual>
<geometry>タグは物体の形状を記述します。size=”x y z” とし、単位は m(メートル) です。
boxの他にもcylindar, sphere, meshがあります。
<material>タグは物体の色と透明度を表します。nameは他のタグから参照する際に、rgbaを記述しなくても名前を表記するだけで同じrgbaが適用されます。rgbaのaは透明度を示します。
次に、<inertial>タグです。
<inertial>
<mass value="2"/>
<inertia ixx="0.04" ixy="0.0" ixz="0.0" iyy="0.17" iyz="0.0" izz="0.25" />
</inertial>
<mass>は物体の質量を表します。今回は2kgです。
<inertia>は物体の件性を示します。自動で計算されないのでこちらのWikipediaを参考に計算してください。
<collision>タグについて
<collision>
<geometry>
<box size="0.4 0.35 0.1"/>
</geometry>
</collision>
<visual>タグの<geometry>とほぼ同じに設定しても問題ありません。
最後は、base_footprintと<joint>タグです。
<link name="base_footprint"/>
<joint name="base_joint" type="fixed">
<parent link="base_link"/>
<child link="base_footprint"/>
<origin xyz="0.0 0.0 -0.075" rpy="0 0 0"/>
</joint>
<link name=”base_footprint”>は、ロボットのXY平面上の座標を示しています。
<joint name=”base_joint” type=”fixed”>のnameは
他のjointと被らないように分かりやすい<joint>の名前を入力します。
type=”fixed”のtypeにも複数あり、
- fixed 固定
- revolute 回転制限を持つ回転結合
- continuous 回転制限のない結合
- prismatic 移動範囲制限のある単軸に沿って移動する結合
- planar 移動範囲制限のない平面内を移動する結合
- floating 6自由度の結合
の6種類が存在します。
終わりに
今回はVSCodeでURDFを描画する方法を説明しました。
ROS2-Foxyと絡めたURDFやGazeboの記事がまだまだ少ないので、少しでも助けになればと思います。
長くなってしまったので次回へ続きます。
次回は移動する車のモデルを作成します。
基本的には今回説明したURDFを繰り返し適用していくことで物体を完成させていきます。
コメント