统一机器人描述格式——URDF

URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中一个非常重要的机器人模型描述格式,ROS同时也提供URDF文件的C++解析器,可以解析URDF文件中使用XML格式描述的机器人模型。

在使用URDF文件构建机器人模型之前,有必要先梳理一下URDF文件中常用的XML标签,对URDF有一个大概的了解。

<link>标签

<link> 标签用于描述机器人某个刚体部分的外观和物理属性,包括尺寸(size)、颜色(color)、形状(shape)、惯性矩阵(inertial matrix)、碰撞参数(collision properties)等。

机器人的link结构一般如图6-1所示,其基本的URDF描述语法如下:

<link name="<link name>"><inertial> . . . . . . </inertial><visual> . . . . . . </visual><collision> . . . . . . </collision>
</link>

标签用于描述机器人link部分的外观参数,标签用于描述link的惯性参
数,而标签用于描述link的碰撞属性。从下图可以看到,检测碰撞的link区域大于外
观可视的区域,这就意味着只要有其他物体与collision区域相交,就认为link发生碰撞。

6-1
标签用于描述机器人关节的运动学和动力学属性,包括关节运动的位置和速度限制。根据机器人的关节运动形式,可以将其分为六种类型

URDF模型中的joint类型

在这里插入图片描述
与人的关节一样,机器人关节的主要作用是连接两个刚体link,这两个link分别称为parent link和child link,如图

在这里插入图片描述
标签的描述语法如下:

<joint name="<name of the joint>"><parent link="parent_link"/><child link="child_link"/><calibration .... /><dynamics damping ..../><limit effort .... />....
</joint>

其中必须指定joint的parent link和child link,还可以设置关节的其他属性。

calibration>:关节的参考位置,用来校准关节的绝对位置。

dynamics>:用于描述关节的物理属性,例如阻尼值、物理静摩擦力等,经常在动力学仿真中用到。

limit>:用于描述运动的一些极限值,包括关节运动的上下限位置、速度限制、力矩限制等。

mimic>:用于描述该关节与已有关节的关系。

safety_controller>:用于描述安全控制器参数。

robot>标签

是完整机器人模型的最顶层标签,和标签都必须包含在标签 内。

如下图所示,一个完整的机器人模型由一系列和组成。

在这里插入图片描述

<robot name="<name of the robot>"><link> ....... </link><link> ....... </link><joint> ....... </joint><joint> ....... </joint>
</robot>

标签

标签用于描述机器人模型在Gazebo中仿真所需要的参数,包括机器人材料的属性、Gazebo插件等。该标签不是机器人模型必需的部分,只有在Gazebo仿真时才需加入。

该标签的基本语法如下:

<gazebo reference="link_1">
<material>Gazebo/Black</material>
</gazebo>

创建机器人URDF模型

在ROS中,机器人的模型一般放在RobotName_description功能包下。下面尝试仿照MRobot 机器人从零开始创建一个移动机器人的URDF模型

创建机器人描述功能包

可以使用如下命令创建一个新的功能包:

catkin_create_pkg mrobot_description urdf xacro

mrobot_description功能包中包含urdf、meshes、launch和config四个文件夹

  • urdf:用于存放机器人模型的URDF或xacro文件。
  • meshes:用于放置URDF中引用的模型渲染文件。
  • launch:用于保存相关启动文件。
  • config:用于保存rviz的配置文件

创建URDF模型

在之前的学习中,我们已经大致了解了URDF模型中常用的标签和语法,接下来使用这些基本语法创建一个如图所示的机器人底盘模型。

在这里插入图片描述
这个机器人底盘模型有7个link和6个joint。

7个link包括1个机器人底板、2个电机、2个驱动轮和2个万向轮;
6个joint负责将驱动轮、万向轮、电机安装到底板上,并设置相应的连接方式。

先来看一下该模型文件mrobot_description/urdf/mrobot_chassis.urdf的具体内容:

<?xml version="1.0" ?>
<robot name="mrobot_chassis">
<link name="base_link"><visual><origin xyz=" 0 0 0" rpy="0 0 0" /><geometry><cylinder length="0.005" radius="0.13"/></geometry><material name="yellow"><color rgba="1 0.4 0 1"/></material></visual>
</link>
<joint name="base_left_motor_joint" type="fixed"><origin xyz="-0.055 0.075 0" rpy="0 0 0" /><parent link="base_link"/><child link="left_motor" /></joint>
<link name="left_motor"><visual><origin xyz="0 0 0" rpy="1.5707 0 0" /><geometry><cylinder radius="0.02" length = "0.08"/></geometry><material name="gray"><color rgba="0.75 0.75 0.75 1"/></material></visual>
</link>
<joint name="left_wheel_joint" type="continuous">
<origin xyz="0 0.0485 0" rpy="0 0 0"/>
<parent link="left_motor"/>
<child link="left_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="left_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.033" length = "0.017"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="base_right_motor_joint" type="fixed">
<origin xyz="-0.055 -0.075 0" rpy="0 0 0" />
<parent link="base_link"/>
<child link="right_motor" />
</joint>
<link name="right_motor">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.02" length = "0.08" />
</geometry>
<material name="gray">
<color rgba="0.75 0.75 0.75 1"/>
</material>
</visual>
</link>
<joint name="right_wheel_joint" type="continuous">
<origin xyz="0 -0.0485 0" rpy="0 0 0"/>
<parent link="right_motor"/>
<child link="right_wheel_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="right_wheel_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0" />
<geometry>
<cylinder radius="0.033" length = "0.017"/>
</geometry>
<material name="white">
<color rgba="1 1 1 0.9"/>
</material>
</visual>
</link>
<joint name="front_castor_joint" type="fixed">
<origin xyz="0.1135 0 -0.0165" rpy="0 0 0"/>
<parent link="base_link"/>
<child link="front_castor_link"/>
<axis xyz="0 1 0"/>
</joint>
<link name="front_castor_link">
<visual>
<origin xyz="0 0 0" rpy="1.5707 0 0"/>
<geometry><sphere radius="0.0165" />
</geometry>
<material name="black">
<color rgba="0 0 0 0.95"/>
</material>
</visual>
</link>
</robot>

URDF提供了一些命令行工具,可以帮助我们检查、梳理模型文件,需要在终端中独立安装:

sudo apt-get install liburdfdom-tools

然后使用check_urdf命令对mrobot_chassis.urdf文件进行检查:

check_urdf mrobot_chassis.urdf

check_urdf命令会解析URDF文件,并且显示解析过程中发现的错误。如果一切正常,在终端中会输出如图所示的信息。

在这里插入图片描述
还可以使用urdf_to_graphiz命令查看URDF模型的整体结构:

urdf_to_graphiz mrobot_chassis.urdf

执行urdf_to_graphiz命令后,会在当前目录下生成一个pdf文件,打开该文件,可以看到模型的整体结构图

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/102270.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode力扣】75 快速排序的子过程partition(荷兰国旗问题)

目录 1、题目介绍 2、解题思路 2.1、冒泡排序暴力破解 2.2、快速排序的子过程partition 2.2.1、详细过程描述 2.2.2、代码描述 1、题目介绍 原题链接&#xff1a;75. 颜色分类 - 力扣&#xff08;LeetCode&#xff09; 示例 1&#xff1a; 输入&#xff1a;nums [2,0,2…

【Python深度学习】目标检测和语义分割的区别

在计算机视觉领域&#xff0c;语义分割和目标检测是两个关键的任务&#xff0c;它们都是对图像和视频进行分析&#xff0c;但它们之间存在着明显的区别。本文将通过图像示例&#xff0c;详细阐述语义分割和目标检测之间的差异。 一、基本概念 1.1 语义分割&#xff08;Semantic…

升级MacOS后无法打开 Parallels Desktop,提示“要完成 Parallels Desktop 设置,请重新启动 Mac 。”

有用户升级macOS后&#xff0c;发现无法打开PD虚拟机了&#xff0c;提示“要完成 Parallels Desktop 设置&#xff0c;请重新启动 Mac 。”但是重启电脑之后&#xff0c;尝试了卸载重装&#xff0c;安装新版本&#xff0c;都无法解决问题&#xff0c;打开依旧如此提示&#xff…

C#关于接口的常见面试问题

1.1 关于C#接口的问题以及与抽象类的异同 什么是接口 继承有几种形式 为什么要使用接口&#xff1f; 接口类型可以用public关键字修饰吗&#xff1f; 接口能不能派生于抽象类&#xff1f; 接口能不能用Sealed修饰&#xff1f; 一个类可以继承多个接口吗&#xff1f; 必…

TSINGSEE青犀视频AI分析/边缘计算/AI算法·厨师帽检测功能——多场景高效运用

在餐饮厂房等场景中&#xff0c;为保障食品安全与卫生&#xff0c;后厨操作人员规范着装要求是必不可少的。由于后厨温度较高&#xff0c;环境较为恶劣&#xff0c;很多后厨人员为自身方便不按照规定佩戴厨师帽和着厨师服&#xff0c;为切实解决此问题&#xff0c;TSINGSEE青犀…

【FreeRTOS】【STM32】03 FreeRTOSConfig.h头文件简介与修改

基于[野火]《FreeRTOS%20内核实现与应用开发实战—基于STM32》.pdf FreeRTOSConfig.h头文件是FreeRTOS各项功能的打开与关闭 FreeRTOSConfig.h头文件简介 之前也说过了&#xff0c;FreeRTOSConfig.h文件可以添加在工程中任意文件夹&#xff0c;只需要在路径中添加好了就行。…

【C++初阶】前言——C++的发展简述及学习方法分享

主页点击直达&#xff1a;个人主页 我的小仓库&#xff1a;代码仓库 C语言偷着笑&#xff1a;C语言专栏 数据结构挨打小记&#xff1a;初阶数据结构专栏 Linux被操作记&#xff1a;Linux专栏 LeetCode刷题掉发记&#xff1a;LeetCode刷题 算法&#xff1a;算法专栏 C头…

取消加考!自考专业调整,2026年起执行新计划!

就在2023年10月7日&#xff0c;广东省教育考试院发布《关于广东省高等教育自学考试专业调整有关事项的通知》&#xff0c;自学考试迎来新变化&#xff0c;本次专业调整政策性强&#xff0c;涉及面广&#xff0c;持续时间长&#xff0c;一起来看看具体说明~ 关于广东省高等教育自…

【码银送书第八期】《Python数据挖掘:入门进阶与实用案例分析》

摘要&#xff1a;本案例将主要结合自动售货机的实际情况&#xff0c;对销售的历史数据进行处理&#xff0c;利用pyecharts库、Matplotlib库进行可视化分析&#xff0c;并对未来4周商品的销售额进行预测&#xff0c;从而为企业制定相应的自动售货机市场需求分析及销售建议提供参…

模拟大数相加

字符串的大数相加&#xff0c;不可以直接使用stoi&#xff0c;或者stoll这种函数去相加&#xff0c;随时有可能越界。只需要模拟计算加法的过程就可以了。 1.定义两个尾指针&#xff0c;指向num1,nums2的最后一个数字&#xff0c;让这两个数字相加&#xff0c;并把相加的结果记…

易点易动设备管理系统:打通采购管理的智能化设备管理解决方案

在现代企业的运营中&#xff0c;设备管理是一个关键的环节。传统的设备管理方法往往效率低下&#xff0c;导致设备故障频发、巡检和维修工作不协调&#xff0c;备件管理不规范。为了解决这些问题&#xff0c;我们引入了易点易动设备管理系统&#xff0c;它能够全面管理设备的生…

华为云云耀云服务器L实例评测 | 实例评测使用之硬件参数评测:华为云云耀云服务器下的 Linux 网络监控神器 bmon

华为云云耀云服务器L实例评测 &#xff5c; 实例评测使用之硬件参数评测&#xff1a;华为云云耀云服务器下的 Linux 网络监控神器 bmon 介绍华为云云耀云服务器 华为云云耀云服务器 &#xff08;目前已经全新升级为 华为云云耀云服务器L实例&#xff09; 华为云云耀云服务器是什…

前端笔记:Create React App 初始化项目的几个关键文件解读

1 介绍 Create React App 是一个官方支持的方式&#xff0c;用于创建单页应用的 React 设置用于构建用户界面的 JAVASCRIPT 库主要用于构建 UI 2 项目结构 一个典型的 Create React App 项目结构如下&#xff1a; ├── package.json ├── public # 这…

Python使用MySQL,无记录则插入,有记录则更新 - ON DUPLICATE KEY UPDATE

一、基本语法 ON DUPLICATE KEY UPDATE 语句基本功能是&#xff1a;当表中没有原来记录时&#xff0c;就插入&#xff0c;有的话就更新。 使用注意事项如下&#xff1a; ON DUPLICATE KEY UPDATE语句根据主键id或唯一键来判断当前插入是否已存在。记录已存在时&#xff0c;只…

git删除文件

qt中点击删除文件后&#xff0c;不要从git版本控制中删除此文件 git rm test.txt 然后git add&#xff0c;git commit-m""

Linux 测试端口是否放行

Linux 测试端口是否放行 1、准备2、在 CentOS 7 上放行端口&#xff0c;你可以使用以下方法&#xff1a;4、错误解决&#xff1a;[rootlocalhost backup]# netcat -l -p 11111 netcat: cannot use -p and -l 装了netcat不能用5、能用telnet去测试吗6、效果&#xff1a; 1、准备…

STM32 PA15/JTDI 用作普通IO,烧录口不能使用问题解决

我们一般用SW调试接口 所以DEBUG选择Serial Wire 这样PA15可以用作普通IO使用。 工程中默认加上&#xff1a; PA13(JTMS/SWDIO).ModeSerial_Wire PA13(JTMS/SWDIO).SignalDEBUG_JTMS-SWDIO PA14(JTCK/SWCLK).ModeSerial_Wire PA14(JTCK/SWCLK).SignalDEBUG_JTCK-SWCLK

Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)

星光下的赶路人star的个人主页 你生而真实&#xff0c;而非完美 文章目录 1、Flink SQL1.1 SQL-Client准备1.1.1 基于yarn-session模式1.1.2 常用配置 1.2 流处理中的表1.2.1 动态表和持续查询1.2.2 将流转换为动态表1.2.3 用SQL持续查询1.2.4 将动态表转换为流 1.3 时间属性1.…

什么是存储服务器?

随着互联网的发展&#xff0c;越来越多的信息会在网络上暴露&#xff0c;所以企业就会更加重视数据&#xff0c;因此更加安全可靠的数据存储服务器受到了大多数人的信赖&#xff0c;今天就让小编带大家了解一下什么是存储服务器吧&#xff01; 存储服务器的含义。存储服务器是…

oracle connect by详解

1、作用&#xff1a; 用于存在父子&#xff0c;祖孙&#xff0c;上下级等层级关系的数据表进行层级查询。 2、语法 SELECT ... FROM .... START WITH cond1 CONNECT BY cond2 WHERE cond3;2.1、说明 start with: 指定起始节点的条件 connect by: 指定父子行的条件关系 …