【ROS进阶篇】第八讲(上) URDF文件的语法详解
前言
在上一节博客中我们系统的学习了在ROS环境下机器人3D模型建立的方法,以及通过URDF、RVIZ、Gazebo等组件实现仿真的基本流程。本节博客则将会主要从建立机器人模型出发,介绍URDF文件的具体原理。
一、URDF的基本概念
- 概念:全称(United Robotics Description Format)统一机器人描述格式,是一个XML语法框架下用来描述机器人的语言格式,使用方法由以下三种:
- 通过URDF对机器人建模然后放到ROS里面进行仿真与分析
- 把一个URDF文件转换成simscape模型,在Simulink里面进行仿真分析或者控制器设计
- 把simscape模型转化成urdf格式
- 核心思想:标签化、XML树状结构、连杆层次结构
标签化
正如机器人的构成那样,URDF的标签主要可以分为连杆,即link标签和关节、joint标签,而在实际的编程中包含以下多种标签:
- robot根标签:类似于HTML中的HTML、launch文件中的launch标签,标签内部使用name属性设置名称
- link连杆标签:内部包含连杆的质量、惯量属性等
- joint标签:内部包含颜色、关节种类等
- gazebo标签:在配置仿真环境,类似于机器人材料属性等时才会使用,这里暂时不予深入介绍
- sensor标签:用于描述传感器等
- transmission标签:用于描述关节与驱动器之间的关系
7.model_state标签:用于描述模型当前状态- model标签:用于描述模型运动学参数和动态参数
<robot>
<link>
...
</link>
<link>
...
</link>
<joint>
...
</joint>
</robot>
XML树状结构
正如我们先前提到的link和joint属于robot下的子分量,而对于inertial、visual等又属于link下的子标签,geometry、material属于visual下的子标签,通过循环往复,我们就通过URDF实现了对于机器人的基本组成部分以及各部分基本信息的充分定义,再加上对于这些分量的描述,类似于name属性、color属性等,就可以建立起机器人模型的各模块外表和物理属性,结构如下:
<robot name = "linkage">
<link name = "root link">
<inertial>
...
</inertial>
<visual>
<geometry>
...
</geometry>
<material>
<color rgba = "1 0 0 1" />
</material>
</visual>
</link>
...
</robot>
连杆层次结构
对于URDF文件来说,各个link通过joint连接,而joint通过父子关系将上下的link连接起来,效果示意如图:
要注意的是:URDF存在着一定的拓扑结构限制,即URDF不能定义一个闭环的连杆模型,对于URDF用法就是:
- 一个child 只能有一个parent link
- 只有root link(也就是connectivity graph的起源)可以有多个分支
- 一个模型只能由一个root link
如上图所示,右侧的模型是不能使用URDF文件进行描述的,对于左侧的模型,对应的URDF文件如下:
<parent> and <child> Joint Elements
<robot name = "linkage">
<joint name = "joint A ... >
<parent link = "link A" />
<child link = "link B" />
</joint>
<joint name = "joint B ... >
<parent link = "link A" />
<child link = "link C" />
</joint>
<joint name = "joint C ... >
<parent link = "link C" />
<child link = "link D" />
</joint>
</robot>
二、link标签
1. 标签作用
- 用于描述机器人某个部件(也即刚体部分)的外观和物理属性,比如: 底座、轮子、激光雷达、摄像头…每一个部件都对应一个 link, 在 link 标签内,可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性
2. 子标签
1)inertial:连杆的惯性特性
\qquad ① origin:定义相对于连杆坐标系的惯性系参考坐标,此坐标原点须为连杆重心,坐标轴可与惯性主轴不平行
\qquad\qquad 1° xyz:表示 x , y , z 方向的偏置,单位为米,默认零向量。
\qquad\qquad 2° rpy:表示坐标轴在RPY方向的偏置,单位为弧度 。
\qquad ② mass:定义连杆的质量属性
\qquad ③ inertia:表示一个3*3旋转惯性矩阵
2)visual:连杆的可视化特性,用于指定连杆显示的形状
\qquad ① namel:连杆几何形状的名称
\qquad ② origin:相对于连杆坐标系的几何形状坐标系(子元素同上)
\qquad ③ geometry:可视化对象的形状
\qquad\qquad 1° box:长方体,元素包含长、宽、高,原点在中心
\qquad\qquad 2° cylinder:圆柱体,元素包含半径、长度,原点在中心
\qquad\qquad 3° sphere:球体,元素包含半径,原点在球心
\qquad\qquad 4° mesh:网格,由本地文件决定,同时提高scale界定边界
\qquad ④ material:可视化组件的材料,可在link标签外定义(引用名称即可)
\qquad\qquad 1° color:颜色,rgba属性
\qquad\qquad 2° texture:材料属性,由文件决定
3)collision:连杆的碰撞特性,由其定义的几何图形集构成,常用于简化计算
\qquad ① name:连杆几何形状的名称
\qquad ② origin:相对于连杆坐标系的碰撞组件坐标系(子元素同上)
\qquad ③ geometry:可视化对象的形状(子元素同上)
- 实例如下:
<link name="base_link">
<visual>
<!-- 形状 -->
<geometry>
<!-- 长方体的长宽高 -->
<!-- <box size="0.5 0.3 0.1" /> -->
<!-- 圆柱,半径和长度 -->
<!-- <cylinder radius="0.5" length="0.1" /> -->
<!-- 球体,半径-->
<!-- <sphere radius="0.3" /> -->
</geometry>
<!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14=180度 1.57=90度) -->
<origin xyz="0 0 0" rpy="0 0 0" />
<!-- 颜色: r=red g=green b=blue a=alpha -->
<material name="black">
<color rgba="0.7 0.5 0 0.5" />
</material>
</visual>
<collision>
<origin rpy="0 0 0" xyz="-0.065 0 0.0"/>
<geometry>
<mesh filename="package://robot_description/meshes/base_link_simple.DAE"/>
</geometry>
</collision>
<collision_checking>
<origin rpy="0 0 0" xyz="-0.065 0 0.0"/>
<geometry>
<cylinder length="0.7" radius="0.27"/>
</geometry>
</collision_checking>
<inertial>
...
</inertial>
</link>
三、joint标签
1. 标签作用
- 用于描述机器人关节的运动学和动力学属性,指定关节运动的安全极限,不同的关节有不同的运动形式.
注意:机器人的两个部件(分别称之为 parent link 与 child link)以"关节"的形式相连接,joint标签对应的数据在模型中是不可见的
2. 属性
- name:关节名称
- type:关节运动形式,具体如下
- continuous: 旋转关节,可以绕单轴无限旋转
- revolute: 旋转关节,类似于 continues,但是有旋转角度限制
- prismatic: 滑动关节,沿某一轴线移动的关节,有位置极限
- planer: 平面关节,允许在平面正交方向上平移或旋转
- floating: 浮动关节,允许进行平移、旋转运动
- fixed: 固定关节,不允许运动的特殊关节
3. 子标签
1)origin:常用于调整实际模型与理论模型的误差
\qquad 含义:表示从parent link到child link的变换,joint位于child link的原点,修改参数可调整连杆位置(子元素同上)
2)parent:强制属性
\qquad link:parent link的名字,是这个link在机器人结构树中的名字。
3)child:强制属性
\qquad link:child link的名字,是这个link在机器人结构树中的名字。
4)axis:旋转轴,位于joint的坐标系中
\qquad 含义:prismatic joint移动的轴,是planar joint的标准平面。这个轴在joint坐标系中被指定。修改该参数可以调整关节的旋转所绕着的轴,常用于调整旋转方向,若模型旋向与实际相反,只需乘-1即可
\qquad 子元素:xyz,代表轴向量的x , y , z分量,为标准化的向量。
5)calibration:参考点,用于矫正joint绝对位置
\qquad ① rising:正向运动时触发上升沿
\qquad ② falling:正向运动时触发下降沿
6)dynamics:指定物理、建模性能,仿真时重要
\qquad ① damping:阻尼值,默认为0
\qquad ② friction:摩擦力值,默认为0
7)limit:关节运动学约束
\qquad ① lower:指定关节运动范围下界的属性,默认为0
\qquad ② upper:指定关节运动范围上界的属性,默认为0
\qquad ③ effort:指定关节运行时的最大力
\qquad ④ velocity:指定关节运行最大速度
8)mimic:指定已定义joint模仿原有关节
\qquad ① joint:需要模仿的关节名称,关节值计算公式如下:value = multiplier * other_joint_value + offset.
\qquad ② multiplier:公式中的乘数因子
\qquad ③ offset:公式中的偏移项
9)safety_controller:安全控制限制
\qquad ① soft_lower_limit:指定安全控制边界的下界,为安全控制的起始限制点
\qquad ② soft_upper_limit:指定安全控制边界的上界,为安全控制的起始限制点
\qquad ③ k_position:指定位置与速度之间的关系
\qquad ④ k_velocity:指定力与速度之间的关系文章来源:https://www.toymoban.com/news/detail-412283.html
- 实例如下:
<joint name="my_joint" type="floating">
<origin xyz="0 0 1" rpy="0 0 3.1416"/>
<parent link="link1"/>
<child link="link2"/>
<calibration rising="0.0"/>
<dynamics damping="0.0" friction="0.0"/>
<limit effort="30" velocity="1.0" lower="-2.2" upper="0.7" />
<safety_controller k_velocity="10" k_position="15" soft_lower_limit="-2.0" soft_upper_limit="0.5" />
</joint>
总结
- 声明:本节博客部分参考了CSDN用户赵虚左的ROS教程,本篇博客主要针对于URDF的基本语法详解,从各个标签及其下属属性和子标签进行分析研究,在下节博客将会推出对应的URDF实例练习,敬请期待
文章来源地址https://www.toymoban.com/news/detail-412283.html
到了这里,关于【ROS进阶篇】第八讲(上) URDF文件的语法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!