机器人控制系列教程之URDF文件语法介绍
前两期推文:机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2),我们主要从数学的角度介绍了机器人的动力学建模的方式,随着机器人技术的不断发展,机器人建模成为了机器人系统设计中的一项关键任务。URDF(Unified Robot Description Format)是一种用于描述机器人结构和属性的XML文件格式。它提供了一种标准化的方式,使得不同的机器人系统能够共享和交换机器人模型的信息。在ROS(Robot Operating System,后续将重点讲解)机器人操作系统中,URDF模型是机器人导航、仿真和感知等功能的基础。
< link > 标签
< link >标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color、形状(shape)入、惯性矩阵(inertial matrix.)、入碰撞参数(collision properties)等。机器人的1ink结构一般如下图所示,其基本的URDF描述语法如下:

<link name="<link name>">
<inertial> . . . . . . </ inertial>
<visual> . . . . . . </visual>
<collision> . . . . . . </coll ision>
</link>
< visual >标签用于描述机器人link部分的外观参数,< inertial >标签用于描述link的惯性参数,而< collision >标签用于描述link的碰撞属性。从图中可以看到,检测碰撞的1ink区域大于外观可视的区域,这就意味着只要有其他物体与collision区域相交,就认为link发生碰撞。
< joint标签 >
< joint >标签用于描述机器人关节的运动学和动力学属性,包括关节运动的位置和速度限
制。根据机器人的关节运动形式,可以将其分为六种类型(如下表所示)。

<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>
其中必须指定joint的parent link和child link,还可以设置关节的其他属性。
- < calibration >:关节的参考位置,用来校准关节的绝对位置;
- < dynamics >:描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到;
- < limit >:描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等;
- < mimic >:描述该关节与已有关节的关系;
- <safety_controller>:描述安全控制器参数。保护机器人关节的运动;
与人的关节样,机器人关节的主要作用是连接两个刚体1ink,这两个link分别称为parent link和child link.

< robot >标签
< robot >是完整机器人模型的最顶层标签,< link >和< joint >标签都必须包含在< robot >标签内。一个完整的机器人模型由一系列< link >和< joint >组成。
< robot >标签内可以设置机器人的名称,其基本语法如下:
<robot><link>...</link><link>...</link><joint>...</joint>
</robot>
URDF文件里面有着与XML语言格式。要定义好一个机器人,首先你得知道机器人有什么。一个机器人主要由连杆(link)和关节(joint)组成,URDF具有类似XML树状结构的。link与 joint是robot下面的子分量,换句话说joint和link隶属于robot。知道了机器人的基本构成之后还不够,还需要知道基本组成部分的一些物理信息,例如连杆的质量属性,惯量属性,颜色,以及关节的种类,这到底是转动关节还是平动关节。因此link和joint也要有自己的子分量,比如inertial和visual, visual 下面还可以再次细分子分量geometry和material,然后material下面还可以有自己的子分量,由此往复我们就可以用URDF来充分定义好一个机器人的各个信息。所以一个增加了这些额外信息的URDF文件内容例子如下:
<robot><link><inertial>...</inertial><visual><geometry>...</geometry><material><color /></material></visual></link>...
</robot>
我们定义好了机器人的组成部分以及各个部分所具有的信息,接着还需要有属性描述这些量。比如robot,link,joint都有name属性,一个用来辨识模块的字符串。color有rgba属性,用来定义连杆的外表颜色。添加了相关信息的URDF文件长这个样子:
<robot name = "linkage"><link name = "root link"><inertial>...</inertial><visual><geometry>...</geometry><material><color rgba = "1 0 0 1" /></material></visual></link>...
</robot>
自定义模型及导入MATLAB
下面我们将通过URDF格式创建两个连杆,并创建运动副将这两个连杆固定起来。具体代码如下:
<?xml version="1.0"?>
<robot name='TechM_Robot'><link name="link_1"><visual><geometry><cylinder length="0.6" radius="0.1"/></geometry><inertial><origin rpy="0 0 0.3" xyz="0.0002 0.0002 0.1264"/> <mass value="5.6431"/><inertia ixx="0.1183" ixy="-0.0001" ixz="0.0001" iyy="0.1182" iyz="0.0001" izz="0.0140"/> </inertial></visual></link><link name="link_2"><visual><geometry><box size="0.6 0.1 0.2"/></geometry><origin rpy="0 0 1.57075" xyz="0 0 -0.3"/></visual></link><joint name="joint_1" type="fixed"><parent link="link_1"/><child link="link_2"/><origin rpy="0 0 0" xyz="0 -0.22 0.25"/><axis xyz="0 0 0"/></joint>
</robot>
打开MATLAB软件,输入
TechM_Robot=importrobot('test.urdf');
show(TechM_Robot)
即可看到刚才创建的两个连杆的机器人以及机器人的各种属性。


对于通过URDF文件建立机器人的模型来说,相关的参数设置属实较为麻烦,明天得推文我们将讲解如何利用URDF生成工具来自动导出URDF文件。
参考资料
- https://blog.csdn.net/zhelijun/article/details/102709150
- https://www.guyuehome.com/34641
往期推荐

相关文章:
机器人控制系列教程之URDF文件语法介绍
前两期推文:机器人控制系列教程之动力学建模(1)、机器人控制系列教程之动力学建模(2),我们主要从数学的角度介绍了机器人的动力学建模的方式,随着机器人技术的不断发展,机器人建模成为了机器人系统设计中的一项关键任务。URDF&…...
Arathi Basin (AB) PVP15
Arathi Basin (AB) PVP15 阿拉希盆地,PVP,15人战场...
Ubuntu/Linux SSH 端口转发
文章目录 Ubuntu/Linux SSH 端口转发概述本地端口转发场景一场景二 参考资料 Ubuntu/Linux SSH 端口转发 概述 SSH, Secure Shell 是一种在网络上用于安全远程登录到另一台机器的工具。除了远程登录以外,ssh 的端口转发是它的另一项强大功能。通过 ssh 端口转发功…...
flask的locked_cached_property
下面是一个关于 locked_cached_property 装饰器的详细教程。这个装饰器将一个方法转换为一个惰性属性,在第一次访问时计算其值,并在随后的访问中缓存该值。同时,它在多线程环境中是线程安全的。 教程:理解和使用 locked_cached_p…...
OSI七层模型TCP/IP四层面试高频考点
OSI七层模型&TCP/IP四层&面试高频考点 1 OSI七层模型 1. 物理层:透明地传输比特流 在物理媒介上传输原始比特流,定义了连接主机的硬件设备和传输媒介的规范。它确保比特流能够在网络中准确地传输,例如通过以太网、光纤和无线电波等媒…...
Swagger2及常用校验注释说明
Api(value "后台用户管理") RestController RequestMapping("bossuser") public class BossUserController {ApiOperation(value "测试接口")PostMapping("test")public String testUser(Valid RequestBody TestUser user) {LOG.inf…...
【项目实训】各种反爬策略及爬虫困难点总结
在这里,我总结了本次项目的数据收集过程中遇到的反爬虫策略以及一些爬虫过程中容易出现问题的地方。 user-agent 简单的设置user-agent头部为浏览器即可: 爬取标签中带href属性的网页 对于显示岗位列表的页面,通常检查其源代码就会发现&…...
能量智慧流转:全面升级储能电站的智能网关解决方案
监控系统是电化学储能电站的关键组成部分,储能电站也需要相应的监控系统,通过监控系统对储能设备的状态进行监测,实时感知储能设备的健康状态,控制储能设备的充放电功率和时机等, 一个好的监控系统可以实现储能电站安全…...
【金融研究】6月,对冲基金狂卖美国科技股 短期乐观,长期悲观?“油价最大空头”花旗:明年跌到60
科技股新高的背后,是对冲基金与散户投资者的分歧,对冲基金正在向散户投资者出售创纪录数量的科技/半导体/美股“七姐妹”股票。 对冲基金狂卖美国科技股 在五大明星科技股(苹果、亚马逊、微软、英伟达、谷歌)轮番创下历史新高的…...
GroundingDINO1.5突破开放式物体检测界限:介绍与应用
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
centos编译内核ko模块
1、make报错 make: * /lib/modules/4.14.0-49.el7a.aarch64/build: 没有那个文件或目录。 停止。 [rootlocalhost 4.14.0-49.el7a.aarch64]# pwd /lib/modules/4.14.0-49.el7a.aarch64 [rootlocalhost 4.14.0-49.el7a.aarch64]# ll 总用量 1744 lrwxrwxrwx. 1 root root …...
Android13 WMS窗口层级树
1,认识层级树 可以通过dumpsys activity containers 看到 WMS 层级树的结构 ACTIVITY MANAGER CONTAINERS (dumpsys activity containers) ROOT typeundefined modefullscreen override-modeundefined requested-bounds[0,0][0,0] bounds[0,0][1440,2960]#0 Displa…...
计算机毕业设计Python+LSTM+Tensorflow股票分析预测 基金分析预测 股票爬虫 大数据毕业设计 深度学习 机器学习 数据可视化 人工智能
基于TensorFlow-LSTM的股票预测系统开题报告 一、研究背景与意义 随着信息技术的飞速发展,股票市场作为现代经济活动的重要组成部分,其价格波动受到广泛关注。投资者们迫切希望通过科学的方法预测股票价格,以优化投资决策,实现利…...
仓库管理系统14--仓库设置
1、添加窗体 <UserControl x:Class"West.StoreMgr.View.StoreView"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:mc"http://schemas.openxmlformats.…...
Python 算法交易实验73 QTV200第二步: 数据清洗并写入ClickHouse
说明 先检查一下昨天启动的worker是否正常工作,然后做一些简单的清洗,存入clickhouse。 内容 1 检查数据 from Basefuncs import * # 将一般字符串转为UCS 名称 def dt_str2ucs_blockname(some_dt_str):some_dt_str1 some_dt_str.replace(-,.).re…...
记录:有趣的C#多元运算符 ? : 表达式写法
有时候用 if //...Whatre you she wanna go else if //...do do do else //...and i know something just like this... 感觉代码太多了怎么优雅的、高端的替换? 看个高端的栗子菊: LedCOM["parity"] ledData[4] "N" ? …...
华宽通中标长沙市政务共性能力建设项目,助力智慧政务建设新飞跃
在数字化浪潮的推动下,长沙市政府正积极拥抱智慧城市建设,以科技力量提升政务服务效能。华宽通凭借其卓越的技术实力与丰富的项目经验,成功中标长沙市政务共性能力建设项目,这无疑是对华宽通在智慧城市领域实力的高度认可。 华宽…...
[面试题]计算机网络
[面试题]Java【基础】[面试题]Java【虚拟机】[面试题]Java【并发】[面试题]Java【集合】[面试题]MySQL[面试题]Maven[面试题]Spring Boot[面试题]Spring Cloud[面试题]Spring MVC[面试题]Spring[面试题]MyBatis[面试题]Nginx[面试题]缓存[面试题]Redis[面试题]消息队列[面试题]…...
企业级低代码开发效率变革赋能业务增长
企业级低代码开发已经成为当今软件开发领域的一大趋势,它为企业带来了前所未有的效率变革,从而赋能业务增长。本文将围绕这一主题,深入探讨低代码开发的概念、优势以及如何在企业级应用中实现高效的低代码开发,以助力我国企业实现…...
2024最新总结:1500页金三银四面试宝典 记录35轮大厂面试(都是面试重点)
学习是你这个职业一辈子的事 手里有个 1 2 3,不要想着去怼别人的 4 5 6,因为还有你不知道的 7 8 9。保持空瓶心态从 0 开始才能学到 10 全。 毕竟也是跳槽高峰期,我还是为大家准备了这份1500页金三银四宝典,记录的都是真实大厂面…...
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明
LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造,完美适配AGV和无人叉车。同时,集成以太网与语音合成技术,为各类高级系统(如MES、调度系统、库位管理、立库等)提供高效便捷的语音交互体验。 L…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能
下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面
代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口(适配服务端返回 Token) export const login async (code, avatar) > {const res await http…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Java + Spring Boot + Mybatis 实现批量插入
在 Java 中使用 Spring Boot 和 MyBatis 实现批量插入可以通过以下步骤完成。这里提供两种常用方法:使用 MyBatis 的 <foreach> 标签和批处理模式(ExecutorType.BATCH)。 方法一:使用 XML 的 <foreach> 标签ÿ…...
NPOI操作EXCEL文件 ——CAD C# 二次开发
缺点:dll.版本容易加载错误。CAD加载插件时,没有加载所有类库。插件运行过程中用到某个类库,会从CAD的安装目录找,找不到就报错了。 【方案2】让CAD在加载过程中把类库加载到内存 【方案3】是发现缺少了哪个库,就用插件程序加载进…...
