当前位置:网站首页>《ROS2机器人建模URDF》8.1URDF统一机器人建模语言
《ROS2机器人建模URDF》8.1URDF统一机器人建模语言
2022-04-21 20:36:00 【鱼香ROS】
本系列教程作者:小鱼
公众号:鱼香ROS
QQ交流群:139707339
教学视频地址:小鱼的B站
完整文档地址:鱼香ROS官网
版权声明:如非允许禁止转载与商业用途。
8.1 URDF统一机器人建模语言
大家好,我是小鱼,本节课我们来介绍机器人的URDF建模。
URDF(Unified Robot Description Format)统一机器人描述格式,URDF使用XML格式描述机器人文件。
XML是 被设计用来传输和存储数据的可扩展标记语言,注意语言本身是没有含义的,只是规定了其数据格式
比如说下面这段信息:
<note> <to>小鱼</to> <from>鱼粉</from> <heading>100万</heading> <body>收到来自鱼粉的100万打赏!</body> </note>其中的
<node></node>等标签都是自定义的,只要符合xml格式即可XML格式在线校验工具:在线代码格式化 (oschina.net)
XML格式注释:
robot标签的属性
name:<robot name="fishbot"></robot>robot标签的子标签
link:<robot name="fishbot"><link name="base_link"></link>link></robot>
使用XML定义的一个最简单的URDF模型可以像下面这样
<?xml version="1.0"?>
<robot name="fishbot">
<link name="base_link">
<visual>
<geometry>
<cylinder length="0.18" radius="0.06"/>
</geometry>
</visual>
</link>
</robot>
接着我们从下面四个方面介绍URDF:
- URDF的组成介绍
- URDF-Link介绍
- URDF-Joint介绍
- 创建一个简单的URDF并在RVIZ2中可视化
1.URDF的组成介绍
一般情况下,URDF由一个声明信息和两种关键组件共同组成
1.1 声明信息
声明信息包含两部分,第一部分是xml的声明信息,放在第一行
<?xml version="1.0"?>
第二部分是机器人的声明,通过robot标签就可以声明一个机器人模型
<robot name="fishbot">
</robot>
1.2 两种关键组件
观察下图机器人的结构

可以简化为如下五个部件组成:
-
躯体
-
左右轮子
-
支撑轮
-
雷达激光
-
IMU模块
这五个部件之间的固定方式为:
我们把左轮,右轮、支撑轮子,IMU和雷达部件称为机器人的Link
而Link和Link之间的连接部分称之为Joint关节
接着我们给每个link和joint取个名字。
所以我们就可以使用6个link和5个joint来描述这个机器人,接着我们分别对link和joint进行详细的介绍。

2.Link介绍
上面我们介绍完了link,那一个link该怎么写呢?
我们来看一个base_link的,通过link标签即可声明一个link,属性name指定部件名字
<link name="base_link">
</link>
通过两行代码就可以定义好base_link,但现在的base_link是空的,我们还要声明我们的base_link长什么样,通过visual子标签就可以声明出来机器人的visual形状。
<!-- base link -->
<link name="base_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
</visual>
</link>
2.1 link标签定义
link的子标签列表
- visual 显示形状
<geometry>(几何形状)<box>长方体- 标签属性:
size-长宽高 - 举例:
<box size="1 1 1" />
- 标签属性:
<cylinder>圆柱体- 标签属性:
radius-半径length-高度 - 举例:
<cylinder radius="1" length="0.5"/>
- 标签属性:
sphere球体- 属性:
radius-半径 - 举例:
<sphere radius="0.015"/>
- 属性:
mesh第三方导出的模型文件- 属性:filename
- 举例:
<mesh filename="package://robot_description/meshes/base_link.DAE"/>
- origin (可选:默认在物体几何中心)
- 属性
xyz默认为零矢量rpy弧度表示的翻滚、俯仰、偏航 - 举例:
<origin xyz="0 0 0" rpy="0 0 0" />
- 属性
- material 材质
- 属性
name名字- color
- 属性
rgbaa代表透明度 - 举例:
<material name="white"><color rgba="1.0 1.0 1.0 0.5" /> </material>
- 属性
- color
- 属性
- collision 碰撞属性,仿真章节中讲解
- inertial 惯性参数 质量等,仿真章节中讲解
3.Joint介绍
joint为机器人关节,机器人关节用于连接两个机器人部件,主要写明父子关系
-
父子之间的连接类型,是否固定的,可以旋转的等
-
父部件名字
-
子部件名字
-
父子之间相对位置
-
父子之间的旋转轴,绕哪个轴转

比如我们再建立一个雷达部件laser_link,然后将laser_link固定到base_link
<?xml version="1.0"?>
<robot name="fishbot">
<!-- base link -->
<link name="base_link">
<visual>
<origin xyz="0 0 0.0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.12" radius="0.10"/>
</geometry>
</visual>
</link>
<!-- laser link -->
<link name="laser_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0"/>
<geometry>
<cylinder length="0.02" radius="0.02"/>
</geometry>
<material name="black">
<color rgba="0.0 0.0 0.0 0.5" />
</material>
</visual>
</link>
<!-- laser joint -->
<joint name="laser_joint" type="fixed">
<parent link="base_link" />
<child link="laser_link" />
<origin xyz="0 0 0.075" />
</joint>
</robot>
3.1 joint标签详解
joint属性
- name 关节的名称
- type 关节的类型
- revolute: 旋转关节,绕单轴旋转,角度有上下限,比如舵机0-180
- continuous: 旋转关节,可以绕单轴无限旋转,比如自行车的前后轮
- fixed: 固定关节,不允许运动的特殊关节
- prismatic: 滑动关节,沿某一轴线移动的关节,有位置极限
- planer: 平面关节,允许在xyz,rxryrz六个方向运动
- floating: 浮动关节,允许进行平移、旋转运动
joint的子标签
parent父link名称<parent link="base_link" />
child子link名称<child link="laser_link" />
origin父子之间的关系xyz rpy<origin xyz="0 0 0.014" />
axis围绕旋转的关节轴<axis xyz="0 0 1" />
下一节我们尝试将我们的机器人模型在RVIZ2中显示出来

参考文档
-
http://docs.ros.org/en/foxy/Tutorials/URDF/URDF-Main.html
技术交流&&问题求助:
-
微信公众号及交流群:鱼香ROS
-
小鱼微信:AiIotRobot
-
QQ交流群:139707339
-
版权保护:已加入“维权骑士”(rightknights.com)的版权保护计划
作者介绍:
我是小鱼,机器人领域资深玩家,现深圳某独脚兽机器人算法工程师一枚
初中学习编程,高中开始接触机器人,大学期间打机器人相关比赛实现月入2W+(比赛奖金)
目前在输出机器人学习指南、论文注解、工作经验,欢迎大家关注小鱼,一起交流技术,学习机器人
版权声明
本文为[鱼香ROS]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_27865227/article/details/124297160
边栏推荐
- 金山云前COO刘志刚加入白海科技担任总裁
- Andorid --- 為什麼要使用事務,什麼叫做事務的提交和回滾?
- 【Azure 应用服务】Azure Function 启用 Managed Identity后, Powershell Funciton出现 ERROR: ManagedIdentityCredential authentication failed
- 如何用Sonic云真机打王者
- The whole process of callback registration and callback of openharmony sensor module
- Construction of distributed second kill system
- 微信服务端配置
- 无人机组装调试教程
- Pfsense configuring IPSec site to site tunneling using certificate authentication Guide
- Yaml
猜你喜欢

After three years of graduation, he achieved nothing and was forced to go back to his hometown. He made a decision to change his life.

Specific methods of configuring Profibus and PROFINET communication in two TIA botu projects

C语言求完全平方数

88% of industrial people don't know that these 7 points of small programs can make the revenue surge, rough and effective! It is strongly recommended to collect and read repeatedly!

88%工业人都不知,小程序这7点,能让营收暴增,粗暴有效!强烈建议收藏,反复读!

Know that Chuangyu issued a heavy strategic plan to build a practical defense system for continuous exchange of fire

MySQL view (detailed explanation)

Tracup|使用项目管理软件帮助战胜拖延症

C语言题目一:1,2,3,4能组成的三位数

实战 | 电商业务性能测试(二): Jmeter 参数化功能实现注册登录的数据驱动
随机推荐
MySQL view (detailed explanation)
Sketch
Actual combat | performance pressure test of JMeter typical e-commerce scenario (order / payment)
Pytorch框架 || torch.nn.modules.Module(nn.Module)
外包干了五年,差不多是个废人了
TCP example of grpc implemented by golang
After five years of outsourcing, I'm almost a loser
双链表插入、删除操作单步解析(十四)
Go语言自学系列 | golang init函数
异常处理器
One click installation of ROS and rosdep (no wall)
composer的源切换
Channel allocation don't use the four-color theorem
C# 版本的 計時器類 精確到微秒 秒後保留一比特小數 支持年月日時分秒帶單比特的輸出
C语言求完全平方数
RTMP(4):User Control Message
About c34d
(转载)MySQL读写分离--集群和高并发
<2021SC@SDUSC>山东大学软件工程应用与实践JPress代码分析(二)
素描
