URDFの基本構造と視覚モデル作成
URDF(Unified Robot Description Format)はROS環境においてロボットの幾何学的構造と構成を定義するXMLベースのフォーマットです。本稿では、視覚的に表現可能なロボットモデルの構築手法について解説します。
単一形状の基本モデル
最も単純なURDFモデルは単一のリンクとジオメトリで構成されます。
<?xml version="1.0"?>
<robot name="basic_robot">
<link name="main_body">
<visual>
<geometry>
<cylinder length="0.5" radius="0.15"/>
</geometry>
</visual>
</link>
</robot>
複数形状の組み合わせ
複数のリンクを結合するにはjoint要素を使用します。固定ジョイントによる接続例を示します。
<robot name="multi_component">
<link name="torso">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
</visual>
</link>
<link name="limb">
<visual>
<geometry>
<box size="0.5 0.1 0.15"/>
</geometry>
</visual>
</link>
<joint name="torso_limb_connector" type="fixed">
<parent link="torso"/>
<child link="limb"/>
</joint>
</robot>
座標系と原点の設定
各要素の位置と方向を正確に制御するにはoriginタグを使用します。
<link name="arm_segment">
<visual>
<geometry>
<box size="0.4 0.08 0.12"/>
</geometry>
<origin rpy="0 1.57 0" xyz="0 0 -0.2"/>
</visual>
</link>
<joint name="body_arm_joint" type="fixed">
<parent link="torso"/>
<child link="arm_segment"/>
<origin xyz="0 -0.18 0.3"/>
</joint>
マテリアルと色の指定
視覚要素の外観を定義するmaterial要素の使用方法です。
<material name="cobalt_blue">
<color rgba="0.2 0.4 0.8 1.0"/>
</material>
<material name="light_gray">
<color rgba="0.9 0.9 0.9 1.0"/>
</material>
<link name="main_body">
<visual>
<geometry>
<cylinder length="0.6" radius="0.2"/>
</geometry>
<material name="cobalt_blue"/>
</visual>
</link>
メッシュファイルの活用
複雑な形状を表現するには外部メッシュファイルを参照します。
<link name="gripper_component">
<visual>
<geometry>
<mesh filename="package://robot_meshes/gripper_assembly.stl"/>
</geometry>
</visual>
</link>
モデル表示の実行
完成したURDFモデルをRVizで表示するための起動設定例です。
#!/usr/bin/env python3
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.substitutions import LaunchConfiguration
from launch.actions import DeclareLaunchArgument
def generate_launch_description():
return LaunchDescription([
DeclareLaunchArgument(
'model_path',
default_value='path/to/robot_model.urdf',
description='URDFモデルファイルのパス'
),
Node(
package='robot_state_publisher',
executable='robot_state_publisher',
parameters=[{'robot_description': LaunchConfiguration('model_path')}]
),
Node(
package='rviz2',
executable='rviz2',
arguments=['-d', 'path/to/config.rviz']
)
])
球体とボックス形状の応用
さまざまな基本形状を組み合わせた応用例です。
<link name="sensor_head">
<visual>
<geometry>
<sphere radius="0.12"/>
</geometry>
<material name="light_gray"/>
</visual>
</link>
<link name="mounting_bracket">
<visual>
<geometry>
<box size="0.06 0.06 0.06"/>
</geometry>
<material name="cobalt_blue"/>
</visual>
</link>