URDF ファイルの記述構文
urdf ファイルは標準的な xml ファイルであり、ロボット モデルを記述するためのいくつかのタグ列があらかじめ定義されており、主にリンク (link) とジョイント (joint) の 2 種類に分けられます。
- コネクティングロッド: ロボットの目に見える部分、つまり剛体部分
- ジョイント: コネクティングロッド間のハンガー接続 (ジョイント) ですが、ジョイントのこの部分は直感的には見えません
- robot: タグの存在と同様
- ガゼボ: ガゼボ シミュレーションで使用されるラベル。ロボットのマテリアル プロパティ、ガゼボ プラグインなど、ロボットの必要なパラメータを構成するために使用されます。ただし、そのようなラベルは必須ではなく、シミュレーションが実行される場合にのみ設定されます。必要。
(1)ロボットタグ
XML ファイルの文法的整合性を確保するために、urdf はルート タグとしてロボット タグを使用します。リンク、ジョイント、その他のタグはすべてロボット タグに含める必要があり、ロボット モデルの名前は名前を通じて設定できます。このタグの属性。
(2)リンクタグ
ロボットベース、ホイール、LIDAR、カメラなど、ロボットの特定の部分の外観と剛体プロパティを記述します。各部分はリンクに対応します。リンクタグでは、形状、サイズ、色を設計できます、慣性マトリックス、部品の衝突パラメータなどの一連の属性
urdf ファイルを記述するときのポイントは、階層関係を明確にすることです
1. 属性
名 —> コネクティング ロッドに名前を付けます。
2. サブラベルの
ビジュアル —> 外観を説明します (対応するデータが表示されます)。
①ジオメトリコンロッドのジオメトリを設定します。
ラベル1:ボックス(箱の形状)
属性: size=長さ (x) 幅 (y) 高さ (z)
ラベル 2: 円柱 (円柱)
属性: radius=半径 長さ=高さ
ラベル3: sphere(球体)
属性: radius=radius
ラベル 4: メッシュ (コネクティング ロッドにスキンを追加)
属性: filename=リソースパス (形式: \package:///
例は次のとおりです。
<!-- 设置不同形状的机器人部件 -->
<robot name="mycar">
<link name="base_link">
<!-- 可视化标签 -->
<visual>
<!-- 形状 -->
<geometry>
<!-- 立方体 -->
<!-- <box size="0.3 0.2 0.1"/> -->
<!-- 圆柱体-->
<!-- <cylinder radius="0.2" length="1"/> -->
<!-- 球体-->
<!-- <sphere radius="1"/> -->
<!-- 添加皮肤 -->
<mesh filename="package://urdf_rviz/meshes/autolabor_mini.stl"/>
</geometry>
</visual>
</link>
</robot>
②originはオフセットとチルトラジアンを設定します。
属性 1: xyz=x オフセット y 安価な z オフセット
属性 2: rpy=x ロール y ピッチ z ヨー (単位はラジアン)
例は次のとおりです。
<!-- 偏移量与倾斜弧度 -->
<!-- xyz:设置分别在xyz上的偏移量
rpy用于设置xyz三个方向的旋转角 -->
<origin xyz='0 0 0' rpy='1.57 0 0'/>
③メトリックセットマテリアルプロパティ(色)
属性: 名前
タグ: カラー
属性: rgba=red、green、blue ウェイト値と透明度 (各ウェイト値と透明度値 [0,1])
例は次のとおりです。
<!-- 颜色 -->
<!-- rgba:
rgb三原色,a透明度,四个值取值都在0到1之间 -->
<material name="car_color">
<color rgba = "0.7 0.34 0.8 0.5"/>
</material>
衝突 —> コネクティングロッドの衝突特性
慣性 —> コネクティングロッドの慣性行列
(3) ジョイントラベル
urdf のジョイント タグは、ロボットのジョイントの運動学およびダイナミクスのプロパティを記述するために使用され、ジョイント動作の安全限界を指定することもできます。ロボットの 2 つの部分 (それぞれ親リンクおよび子リンクと呼ばれます) は、 「関節」の形状 接続されている関節が異なれば、回転、スライド、固定、回転速度、回転角度の制限など、さまざまな動作形式が異なります。たとえば、ベースに取り付けられた車輪は 360 度回転でき、カメラは回転することができます。ベースに完全に固定されます。ジョイント タグに対応するデータはモデルには表示されません。
- 属性
- name —> ジョイントに名前を付けます
- タイプ —> 関節動作形式
- 連続: 単一軸の周りを無限に回転できる回転ジョイント
- revolute: 回転ジョイント、continuity に似ていますが、回転角度制限があります。
- プリズム: スライド ジョイント、位置制限のある特定の軸に沿って移動するジョイント
- 平面: 平面に直交する方向の並進または回転を可能にする平面ジョイント
- フローティング: フローティング ジョイントにより、並進運動と回転運動が可能になります。
- 固定: 固定されたジョイント、動きを許さない特殊なジョイント
- 子ラベル
-
親 (必須)
親リンクの名前は必須の属性です。
- link: 親リンクの名前。ロボット構造ツリー内のこのリンクの名前です。
-
子供 (必須)
子リンクの名前は必須の属性です。
- link: 子リンクの名前。ロボット構造ツリー内のこのリンクの名前です。
-
元
- 属性: xyz=各軸のオフセット rpy=各軸の円弧のオフセット。
-
軸
- 属性: xyz は、どのジョイント軸を中心に移動するかを設定するために使用されます。
<!-- 需求:设置机器人底盘,并添加摄像头 -->
<robot name="mycar">
<!-- 1 底盘link -->
<link name="base_link">
<!-- 可视化标签 -->
<visual>
<!-- 形状 -->
<geometry>
<!-- 立方体 -->
<box size="0.3 0.2 0.1"/>
</geometry>
<!-- 偏移量与倾斜弧度 -->
<!-- xyz:设置分别在xyz上的偏移量
rpy用于设置xyz三个方向的旋转角 -->
<origin xyz='0 0 0' rpy='0 0 0'/>
<!-- 颜色 -->
<!-- rgba:
rgb三原色,a透明度,四个值取值都在0到1之间 -->
<material name="car_color">
<color rgba = "0.3 0.4 0.8 0.8"/>
</material>
</visual>
</link>
<!-- 2 摄像头link -->
<link name="camera">
<!-- 可视化标签 -->
<visual>
<!-- 形状 -->
<geometry>
<!-- 立方体 -->
<box size="0.03 0.05 0.05"/>
</geometry>
<!-- 偏移量与倾斜弧度 -->
<!-- xyz:设置分别在xyz上的偏移量
rpy用于设置xyz三个方向的旋转角 -->
<origin xyz='0 0 0.025' rpy='0 0 0'/>
<!-- 需要上移半个摄像头的高度,才不会导致摄像头内嵌在机器人车体里 -->
<!-- 颜色 -->
<!-- rgba:
rgb三原色,a透明度,四个值取值都在0到1之间 -->
<material name="car_color">
<color rgba = "0 1 0 0.8"/>
</material>
</visual>
</link>
<!-- 3 关节 -->
<joint name="camera_to_link" type="continuous">
<!-- 父级link -->
<parent link="base_link"/>
<!-- 子级link -->
<child link="camera"/>
<!-- 设置偏移量 -->
<origin xyz='0.13 0 0.05' rpy='0 0 0'/>
<!-- 设置关节旋转参考的坐标轴 -->
<axis xyz='0 0 1'/>
</joint>
</robot>
ファイルの書き込みを開始します。
<launch>
<!-- 1、在参数服务器载入urdf文件 -->
<param name="robot_description" textfile="$(find urdf_rviz)/urdf/urdf/joint.urdf"/>
<!-- 2、启动rviz -->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf_rviz)/config/showmycar.rviz"/>
<!-- 注意:只有上述两条语句时会抛出异常:显示位置与颜色异常,给出提示 no transform from camera to baselink(缺少坐标变换) -->
<!-- 原因:rviz中显示urdf时.必须发布不同部件之间的坐标系关系 -->
<!-- 解决:ROS中提供的关于机器人模型显示的坐标发布相关节点(joint_state_publisher 和 robot_state_publisher) -->
<!-- 关节状态发布节点 -->
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher"/>
<!-- 机器人状态发布节点 -->
<node pkg="robot_state_publisher" type="robot_state_publisher"
name="robot_state_publisher"/>
<!--添加控制机器人关节运动的节点-->
<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui"
name="joint_state_publisher_gui"/>
</launch>
注: ジョイント コントロール ノードは必須ではありませんが、その機能は、ジョイント ノードの動きを制御するための UI インターフェイスを提供することであり、urdf ファイルが正常であるかどうかのデバッグに便利です。