【ROS进阶篇】第八讲 URDF文件的语法详解

【ROS进阶篇】第八讲 URDF文件的语法详解

在这里插入图片描述

文章目录

  • 【ROS进阶篇】第八讲 URDF文件的语法详解
  • 前言
    • 一、URDF的基本概念
    • 二、link标签
      • 1. 标签作用
      • 2. 子标签
    • 三、joint标签
      • 1. 标签作用
      • 2. 属性
      • 3. 子标签
  • 总结

前言

在上一节博客中我们系统的学习了在ROS环境下机器人3D模型建立的方法,以及通过URDF、RVIZ、Gazebo等组件实现仿真的基本流程。本节博客则将会主要从建立机器人模型出发,介绍URDF文件的具体原理。
在这里插入图片描述

一、URDF的基本概念

  • 概念:全称(United Robotics Description Format)统一机器人描述格式,是一个XML语法框架下用来描述机器人的语言格式,使用方法由以下三种:
  1. 通过URDF对机器人建模然后放到ROS里面进行仿真与分析
  2. 把一个URDF文件转换成simscape模型,在Simulink里面进行仿真分析或者控制器设计
  3. 把simscape模型转化成urdf格式
  • 核心思想:标签化、XML树状结构、连杆层次结构

标签化

正如机器人的构成那样,URDF的标签主要可以分为连杆,即link标签和关节、joint标签,而在实际的编程中包含以下多种标签:

  1. robot根标签:类似于HTML中的HTML、launch文件中的launch标签,标签内部使用name属性设置名称
  2. link连杆标签:内部包含连杆的质量、惯量属性等
  3. joint标签:内部包含颜色、关节种类等
  4. gazebo标签:在配置仿真环境,类似于机器人材料属性等时才会使用,这里暂时不予深入介绍
  5. sensor标签:用于描述传感器等
  6. transmission标签:用于描述关节与驱动器之间的关系
    7.model_state标签:用于描述模型当前状态
  7. 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连接起来,效果示意如图:

【ROS进阶篇】第八讲 URDF文件的语法详解_第1张图片

要注意的是:URDF存在着一定的拓扑结构限制,即URDF不能定义一个闭环的连杆模型,对于URDF用法就是:

  1. 一个child 只能有一个parent link
  2. 只有root link(也就是connectivity graph的起源)可以有多个分支
  3. 一个模型只能由一个root link

【ROS进阶篇】第八讲 URDF文件的语法详解_第2张图片

如上图所示,右侧的模型是不能使用URDF文件进行描述的,对于左侧的模型,对应的URDF文件如下:

<parent> and <child> Joint Elements
<robot name = "linkage">
	<joint name = "joint A ... >
		"link A" />
		<child link = "link B" />
	joint>
	<joint name = "joint B ... >
		"link A" />
		<child link = "link C" />
	joint>
	<joint name = "joint C ... >
		"link C" />
		<child link = "link D" />
	joint>
robot>

二、link标签

1. 标签作用

  • 用于描述机器人某个部件(也即刚体部分)的外观和物理属性,比如: 底座、轮子、激光雷达、摄像头…每一个部件都对应一个 link, 在 link 标签内,可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性

【ROS进阶篇】第八讲 URDF文件的语法详解_第3张图片


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>
                
                
                
                
                
                

            geometry>
            
            <origin xyz="0 0 0" rpy="0 0 0" />
            
            <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. 标签作用

  • 用于描述机器人关节的运动学和动力学属性,指定关节运动的安全极限,不同的关节有不同的运动形式.

【ROS进阶篇】第八讲 URDF文件的语法详解_第4张图片

注意:机器人的两个部件(分别称之为 parent link 与 child link)以"关节"的形式相连接,joint标签对应的数据在模型中是不可见的

2. 属性

  • name:关节名称
  • type:关节运动形式,具体如下
  1. continuous: 旋转关节,可以绕单轴无限旋转
  2. revolute: 旋转关节,类似于 continues,但是有旋转角度限制
  3. prismatic: 滑动关节,沿某一轴线移动的关节,有位置极限
  4. planer: 平面关节,允许在平面正交方向上平移或旋转
  5. floating: 浮动关节,允许进行平移、旋转运动
  6. 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:指定力与速度之间的关系


  • 实例如下:
 <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实例练习,敬请期待

【ROS进阶篇】第八讲 URDF文件的语法详解_第5张图片

你可能感兴趣的:(ROS进阶教程,自动驾驶,人工智能,机器学习,自动化,3d)