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

这篇具有很好参考价值的文章主要介绍了【ROS进阶篇】第八讲(上) URDF文件的语法详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

前言

在上一节博客中我们系统的学习了在ROS环境下机器人3D模型建立的方法,以及通过URDF、RVIZ、Gazebo等组件实现仿真的基本流程。本节博客则将会主要从建立机器人模型出发,介绍URDF文件的具体原理。
【ROS进阶篇】第八讲(上) 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文件的语法详解

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

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

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

如上图所示,右侧的模型是不能使用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 标签内,可以设计该部件的形状、尺寸、颜色、惯性矩阵、碰撞参数等一系列属性

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


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. 标签作用

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

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

注意:机器人的两个部件(分别称之为 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文件的语法详解文章来源地址https://www.toymoban.com/news/detail-412283.html

到了这里,关于【ROS进阶篇】第八讲(上) URDF文件的语法详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS自学笔记二十九:如何从SolidWorks导出URDF文件

    SolidWorks是一款三维计算机辅助设计(CAD)软件,用于创建三维模型。要将SolidWorks模型导出为URDF(Unified Robot Description Format)文件,您可以按照以下步骤进行操作: 1. 安装SolidWorks URDF插件: 首先,您需要安装SolidWorks URDF插件,以便能够导出URDF文件。这个插件通常由SolidWorks社

    2024年02月05日
    浏览(57)
  • 【Java基础教程】(十四)面向对象篇 · 第八讲:多态性详解——向上及向下转型、关键字 final与 instanceof的作用~

    掌握final 的主要作用及使用; 掌握对象多态性的概念以及对象转型的操作; 掌握instanceof 的主要作用及使用; 在Java 中 final称为终结器,在Java 里面可以使用 final定义类、方法和属性,用于表示不可变性 。 final 类:当一个类被声明为 final 时,意味着该类不能被

    2024年02月16日
    浏览(53)
  • ros2机器人urdf内<gazebo>标签解释(非传感器)(源自sdf文件官网)

    原文链接SDFormat extensions to URDF (the \\\'gazebo\\\' tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了: Toggle navigation  Specification API Documentation Download Back Edit                  Version: 1.6            Table of Contents SDFormat extensions to URDF (the gazebo tag) gazebo Element

    2024年02月01日
    浏览(50)
  • SQL入门之第八讲——UPDATE更新语句

    定义:UPDATE更新语句是用来修改表中一条数据或者多条数据记录 基本语法: 1. 更新单行数据 实例1:在学生表中,将学生编号Sid为6的学生姓名Sname修改为:杨红梅 执行结果: SET后面除了带文本之外,还可以是数学表达式 实例2:在学生表中,将学生编号Sid为10的学生姓名对应

    2023年04月12日
    浏览(41)
  • Redis 7 第八讲 集群模式(cluster)架构篇

    Redis 集群架构图         Redis 集群是一个提供在多个Redis节点间共享数据的程序集;Redis集群可以支持多个master  Redis集群支持多个master,每个master又可以挂载多个slave 读写分离 支持数据的高可用 支持海量数据的读写存储操作 集群自带Sentinel的故障转移机制,内置支持高可用,

    2024年02月10日
    浏览(35)
  • 【AWS系列】第八讲:AWS Serverless之S3

    目录 序言 1.基础介绍 1.1 概念介绍 1.2 原理介绍 1.3 应用场景 1.3.1 构建数据湖 1.3.2 备份和还原关键数据 1.3.3 以最低成本存档数据 1.3.4 运行云原生应用程序 1.4 S3 的功能 1.4.1 存储类 1.4.2 存储管理 1.4.3 访问管理 2 使用方法 2.1 创建存储桶 ​2.2 配置 CORS 规则 3 投票 三言两

    2024年02月03日
    浏览(45)
  • Git从入门到熟练第八讲 创建和使用分支

    前言   在上一讲中我们讲到了git中时间线和提交commit的关系,还介绍了master,HEAD,branch的基本概念。这一讲内容我们学习非常重要的对分支的操作,其中包括:创建分支、分支切换、删除分支以及分支节点的切换。 目录 课前准备: 8.1 分支简介 8.1.1  master分支不是必要的分支

    2024年02月06日
    浏览(48)
  • ElasticSearch第八讲 ES索引字段映射类型以及动态映射相关操作

    ES的映射:映射就是 Mapping,它用来定义一个文档以及文档所包含的字段该如何被存储和索引。所以,它其实有点类似于关系型数据库中表的定义。其中ES中映射可以分为动态映射和静态映射,静态映射就是提前创建好对应字段文档映射关系,如果插入的类型不对会出错,而动

    2024年02月10日
    浏览(47)
  • 设计模式第八讲:常见重构技巧 - 去除多余的if else

    最为常见的是代码中使用很多的if/else,或者switch/case;如何重构呢?方法特别多,本文是设计模式第八讲,带你学习其中的技巧。 通常业务代码会包含这样的逻辑:每种条件下会有不同的处理逻辑。比如两个数a和b之间可以通过不同的操作符(+,-,*,/)进行计算,初学者通

    2024年02月10日
    浏览(41)
  • 第八讲 单片机驱动彩色液晶屏 控制RA8889软件:显示图片

    目录 第一讲 单片机最小系统STM32F103C6T6通过RA8889驱动彩色液晶屏播放视频 第二讲 单片机最小系统STM32F103C6T6控制RA8889驱动彩色液晶屏硬件框架 第三讲 单片机驱动彩色液晶屏 控制RA8889软件:如何初始化 第四讲 单片机驱动彩色液晶屏 控制RA8889软件:绘图 第五讲 单片机驱动彩色液

    2024年01月22日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包