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

2023-05-16

【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连接起来,效果示意如图:

在这里插入图片描述

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

  1. 一个child 只能有一个parent link
  2. 只有root link(也就是connectivity graph的起源)可以有多个分支
  3. 一个模型只能由一个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:关节运动形式,具体如下
  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实例练习,敬请期待

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • HAN论文模型代码复现与重构

    论文简介 本文主要介绍CMU在2016年发表在ACL的一篇论文 xff1a Hierarchical Attention Networks for Document Classification及其代码复现 该论文是用于文档级情感分类 xf
  • Http Digest认证协议

    http blog csdn net htjoy1202 article details 7067287 其认证的基本框架为挑战认证的结构 xff0c 如下图所示 xff1a xfeff xfeff 1 客户端希望取到服务器上的某个资源 x
  • 【系统分析师之路】嵌入式系统章节错题集锦

    系统分析师之路 嵌入式系统章节错题集锦 系分章节错题集第01题 xff1a 红色 01 雷达设计人员在设计数字信号处理单元时 xff0c 其处理器普遍采用DSP芯片 xff08 比如 xff1a TI公司的TMS320C63xx xff09
  • 【软工】程序编码

    目录 前言正文 程序设计语言 分类 选择原则 程序编码总原则 好程序的标准 结构化程序设计 主要内容 主要原则 程序设计风格 源程序文档化 数据说明 语句结构 输入输出方法 程序设计质量评价 正确性结构清晰性易修改性 易读性 简单性 程序复
  • TPM1.2到TPM 2.0的变化

    原文地址 xff1a http www vonwei com mod 61 pad amp act 61 view amp id 61 11 TPM 1 2规范主要面向PC平台 xff0c 其103版本在2009年被接受为ISO标准 xff
  • 关于Cmake与CmakeLists(一)--背景,须知,示例

    一 背景及须知 1 背景 xff1a VS2019与VS2010在编写程序时都是创建了一个工程 xff0c 然后直接打开 sln即可 但是vscode仅仅是一个编辑器 xff0c 打开之后只有 c或者 cpp文件 xff0c 故需要手动编译
  • webgl(three.js)实现室内定位,楼宇bim、实时定位三维可视化解决方案——第五课

    webgl three js 实现室内定位 楼宇bim 实时定位三维可视化解决方案 第五课 参考文章 xff1a xff08 1 xff09 webgl three js 实现室内定位 楼宇bim 实时定位三维可视化解决方案 第五课 xff
  • Linux虚拟机在线扩容lvm类型root分区

    目录 Linux虚拟机在线扩容lvm类型root分区写在前面正文写在后面 Linux虚拟机在线扩容lvm类型root分区 写在前面 这是我在CSDN上的第一篇文章 作为一个半江湖的IT人 xff0c 这些年来也在CSDN受益很多 今天是20
  • 无vCenter创建vSAN集群

    无vCenter创建vSAN集群 最近仍有朋友在问题 xff0c vCenter如果 挂了 xff0c vSAN还能正常运行吗 xff1f 这个小文通过手动创建vSAN集群的方式来解答下这个问题吧 xff08 生产环境慎用 xff01 xf
  • 记一次mdadm软raid1升级容量

    MDRaid 2块4TB做了软RAID1 xff0c 需要升级成2块8TB盘 查看磁盘信息 xff0c SerialNumber等会儿会用到 xff0c 防止换错盘 span class token function sudo span h
  • [简洁版]youtube-dl下载命令

    简介 YouTube dl是python上的pip模块 xff08 开源 xff09 xff0c 可以用来下载YouTube Bilibili等多个平台的视频 音频文件 xff0c 可谓是居家旅行必备小工具 本文主要介绍一些常用的youtu
  • [简版]VMware强大的管理工具-PowerCLI

    一 PowerCLI介绍 什么是 PowerCLI PowerCLI 是一个命令行工具 xff0c 可以用于自动化vSphere管理 xff0c 包括网络 存储 虚拟机以及其他很多功能 PowerCLI包含超过700个命令 要安装Power
  • [简版]使用PowerCLI自定义vSphere ISO安装镜像

    一 什么情况下要自定义ISO镜像 一般来说 xff0c 对于DELL Lenovo HPE这类主流的服务器厂商 xff0c VMware官方vSphere ISO镜像或者官网的第三方客制镜像 xff08 由服务器厂商提供的封装镜像 xff0
  • [简版] 关于vSphere漏洞-OpenSLP

    一 前言 近期vSphere OpenSLP漏洞在野利用的新闻频频被爆出来 xff0c 大伙儿非常关注 由于vSphere虚拟化客户之广泛 xff0c 很多朋友都表达了自己的焦虑 xff0c 同时也会担心自己管理的vSphere虚拟化平台是
  • [简版] Linux搭建SAMBA文件共享服务

    SMB服务搭建 更多参数含义参考链接 常用配置 安装samba span class token comment Ubuntu span span class token function sudo span span class toke
  • STM32 HAL库详解

    STM32 HAL库整体总结 STM32 之二 HAL库详解 及 手动移植 本篇博客是对以上参考资源的一个二次总结与整理 1 HAL库文件结构 对于开发人员而言 xff0c 首先要清楚 HAL 库的文件结构 根据文件类型可认为以下两大类 x
  • STM32 HAL库学习(四):DMA之串口空闲中断

    STM32CubeMX 配置实现参考这里 1 串口空闲中断 1 1 UART DMA方式接收数据 STM32串口使用DMA方式接收数据可以减小CPU的开销 对于接收定长数据 xff0c 可以将DMA接收缓冲区的长度设定为待接收数据的长度 x
  • Android Studio 启动模拟器出现“Timed out after 300seconds waiting for emulator to come online“解决方案

    Android Studio 启动模拟器出现 34 Timed out after 300seconds waiting for emulator to come online 34 解决方案 参考文章 xff1a xff08 1 xff0
  • 结构体中的位定义

    1 结构体位定义 在工作中 xff0c 经常遇到按位 xff08 bit xff09 定义结构体 的情况 由于一个字节有8个位 xff0c 这时 xff0c 程序员往往对bit的位置产生困惑 现在给出2个例子 xff0c 来说明位的定义次序
  • 蓝牙基础(三):蓝牙协议栈总体认知

    蓝牙基础 xff08 三 xff09 xff1a 蓝牙协议栈总体认知 0 前言 初入门经典蓝牙学习 xff0c 网上资料参差不齐 xff0c 本博客旨在整理自己的一些总结内容 xff0c 建立整体功能认识 xff0c 以便后续深入学习 1

随机推荐

  • FreeRTOS学习(四)任务调度与切换

    文章目录 1 任务调度2 任务切换2 1 SVC 和 PendSV2 2 上下文2 3 切换场景2 4 PendSV Handler 3 总结 1 任务调度 在建立完任务后紧接着调用任务调度函数 xff0c 便会使系统运行起来 span c
  • FreeRTOS学习(五)队列与信号量

    文章目录 1 队列1 1 队列特性1 2 队列创建1 2 1 接口函数1 2 2 内存占用1 2 3 创建过程分析 1 3 入队与出队1 3 1 队列项入队1 3 1 队列项出队 2 信号量2 1 二值信号量2 2 计数型信号量2 3 互斥
  • FreeRTOS学习(六)时间管理

    文章目录 1 延时函数1 1 vTaskDelay 1 2 vTaskDelayUntil 1 3 系统时钟节拍 2 软件定时器2 1 定时器概述2 2 定时器 API 3 总结 1 延时函数 当任务需要调用延时函数延时时 xff0c 任务
  • C语言 sscanf库函数

    目录 1 函数描述2 函数应用2 1 基础应用2 2 高级应用 1 函数描述 xff08 1 xff09 函数功能 xff1a 通常被用来解析并转换字符串 xff0c 从str指定的字符串读取数据 xff0c 并根据参数format字符串来
  • C语言 文件读写

    目录 1 文件打开与关闭1 1 打开文件 fopen 1 2 关闭文件 fclose 2 读取文件2 1 fgetc 2 2 fgets 2 3 fscanf 3 写入文件3 1 fputc 3 2 fputs 3 3 fprintf 1
  • C语言 条件编译

    目录 1 if elif else endif 2 ifdef else endif 3 ifndef else endif 4 三者区别 根据不同情况编译不同代码 产生不同目标文件的机制 xff0c 称为条件编译 条件编译是预处理程序的功
  • yolo 学习系列(三):训练参数与网络参数

    yolo 学习系列 xff08 三 xff09 xff1a 训练参数与网络参数 手把手教你做目标检测 xff08 YOLO SSD xff09 视频链接 1 训练参数 博主在使用 yolov2 tiny voc 训练 人 这一类目标物体时
  • Caffe 学习系列(七):MobileNet-YOLO 安装与训练

    Caffe 学习系列 xff08 七 xff09 xff1a MobileNet YOLO 安装与训练 基于darknet实现mobilenet 基于darknet框架实现DepthwiseConvolutional层 深度学习 xff08
  • 完美解决api-ms-win-crt-runtime-l1-1-0.dll 丢失问题

    完美解决api ms win crt runtime l1 1 0 dll 丢失问题 参考文章 xff1a xff08 1 xff09 完美解决api ms win crt runtime l1 1 0 dll 丢失问题 xff08 2 x
  • Moveit!入门——古月居机械臂开发笔记(一)

    Moveit 入门 古月居机械臂开发笔记 xff08 一 xff09 引言Moveit xff01 与机械臂控制1 创作机械臂模型2 生成配置文件3 如何使用Moveit xff01 实现机械臂仿真 xff08 gazebo xff09 完
  • 数据处理:Excel读取txt文本

    数据处理 xff08 一 xff09 xff1a Excel读取txt文本 1 1 任务需求 txt 文本为四列数据 xff0c 以空格为分隔符号 xff0c 现导入 Excel 中 1 2 实现步骤 新建 excel 文件点击 数据 来自
  • Raspberrypi 3 系统备份还原, 基于最小系统镜像实现

    Raspberrypi 3 备份还原系统 一 为什么要备份系统 xff1f 1 经常在树莓派上调试程序 xff0c 安装各种软件 xff0c 越来越多的库和程序的安装带来的系统更改几乎是不可逆的 xff0c 一旦某个程序或者驱动出现问题 x
  • linux 内核链表

    linux内核中大量使用如下数据结构实现双向链表 xff1a struct list head struct list head next prev 如果需要有某种数据结构的双向队列 xff0c 就在这种结构内部放一个list head数据
  • FreeRTOS任务基础知识总结

    1 单任务系统 前后台系统 xff1a 中断服务函数为前台程序 xff0c 大循环while 1 作为后台程序 前后台系统的实时性差 xff0c 但是前后台系统简单 xff0c 资源消耗少 2 FreeRTOS是一种抢占式的实时多任务系统
  • 第一章面试题整理

    一 C 43 43 域操作符的使用 include 34 stdio h 34 include 34 windows h 34 int value 61 0 初始化全局变量 void printvalue printf 34 value 6
  • 第十三届蓝桥杯JAVAB组国赛部分思路及代码

    JAVA B组参考代码 文章目录 JAVA B组参考代码 试题 A 重合次数 答案 494 试题 B 数数 答案 25606 试题 C 左移右移 思路 xff1a 对于操作从后向前记录 xff0c 最后操作的肯定是在两端 xff0c 并对该
  • MicroStrategy的面经(from bbs.byr..

    搜了一下论坛 xff0c 发现基本上没有MicroStrategy的面经 xff0c 既然有幸参加了他们的面试 xff0c 这里把面试过程给大家描述一下 xff0c 希望对后来的人有点帮助吧 1 公司介绍 xff1a 中文叫凌策软件 xff
  • 4G工业路由器的透传好处与安全因素

    透传 xff0c 通俗了说就是 透明传输 需要在保证质量的前提下 xff0c 将数据传送到目的节点 xff0c 并且不对数据做任何处理 透传一般都是用来读取远程的串口数据 例如火车站都需要刷身份证信息才能进入 xff0c 但身份证信息数据库
  • 程序员迷茫:30岁以上的“大龄程码农”出路在哪?java码农该怎么办?

    程序员生存 成功 制胜的法则源自IT精英的职业发展秘诀热爱工作 xff0c 享受生活 为什么程序员过了30就不行了 xff1f 我们被固定在 敲代码 的坑里 xff0c 一干就是10年 xff0c 再干别的早已不会 敲代码已经成了一项流水线
  • 【ROS进阶篇】第八讲(上) URDF文件的语法详解

    ROS进阶篇 第八讲 xff08 上 xff09 URDF文件的语法详解 文章目录 ROS进阶篇 第八讲 xff08 上 xff09 URDF文件的语法详解前言一 URDF的基本概念二 link标签1 标签作用2 子标签 三 joint标签