当前位置: 首页 > news >正文

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解

        URDF 文件是一个标准的 XML 文件格式,用于在 ROS 中描述机器人模型的结构。URDF 通过预定义的一系列标签,简洁地表达机器人的组成和运动关系。虽然机器人模型可能非常复杂,但在 URDF 中可以主要简化为两个核心部分:

        连杆(link标签):描述机器人各个部件的形状、尺寸、质量、惯性等物理属性。连杆是机器人的“基本组成单元”,每个部件都由一个连杆表示。

        关节(joint标签):定义各个连杆之间的连接关系和运动方式。关节描述了连杆的运动类型(如旋转、平移等)以及其在三维空间中的位置和方向。

        通过合理使用linkjoint标签,可以构建出符合物理和运动特性的机器人模型,并结合其他ROS工具进行仿真和可视化。这种简化使得复杂机器人模型在URDF中也能轻松描述并应用于多种仿真任务。

        参考学习资料:urdf/XML - ROS Wiki

robot 根标签,类似于 launch文件中的launch标签;
link 连杆标签;
joint 关节标签;
gazebo 集成gazebo需要使用的标签。

1 URDF语法详解-robot

        在 URDF 文件中,robot标签是整个文件的根标签,用于确保XML语法的完整性。所有描述机器人的标签(如linkjoint等)都必须嵌套在robot标签内。该标签的作用是定义机器人模型的整体框架,并通过name属性为机器人模型命名。 

(1)属性

        name:用于指定机器人模型的名称,方便在不同的仿真环境中进行标识和引用。

(2)子标签

        所有其他的标签(如linkjointmaterialsensor 等)都是robot标签的子标签,用来定义机器人的物理结构、运动方式、材质等属性。

2 URDF语法详解-link

        在 URDF 文件中,link标签用于描述机器人某个部件(即刚体部分)的外观和物理属性。每一个机器人部件都由一个link标签表示,例如机器人底座、轮子、激光雷达、摄像头等。通过link标签,可以详细定义该部件的形状、尺寸、颜色、质量属性,以及与仿真相关的惯性、碰撞和视觉参数。

(1)属性

        name: 用于为该连杆命名,确保在机器人模型中唯一识别该部件。

(2)子标签

visual ---> 描述外观(对应的数据是可视的),定义连杆的视觉外观,包括形状、颜色和材质等,用于 Rviz 等工具中的可视化。geometry 设置连杆的形状标签1: box(盒状)属性:size=长(x) 宽(y) 高(z)标签2: cylinder(圆柱)属性:radius=半径 length=高度标签3: sphere(球体)属性:radius=半径标签4: mesh(为连杆添加皮肤)属性: filename=资源路径(格式:package://<packagename>/<path>/文件)origin 设置偏移量与倾斜弧度属性1: xyz=x偏移 y偏移 z偏移属性2: rpy=x翻滚 y俯仰 z偏航 (单位是弧度)material设置材料属性(颜色)属性: name标签: color属性: rgba=红绿蓝权重值与透明度 (每个权重值以及透明度取值[0,1])
collision ---> 连杆的碰撞属性了,定义碰撞模型,用于物理仿真,描述与其他物体碰撞时的行为。
Inertial ---> 连杆的惯性矩阵,定义连杆的质量和惯性矩阵属性,用于动力学仿真。
geometry --->  用于定义连杆的几何形状,可以是简单的形状(如盒子、圆柱体、球体)或者通过网格文件指定复杂模型(如 .stl 文件)。

3 URDF语法详解-joint

        在URDF文件中,joint标签用于定义机器人关节的运动学和动力学属性。它描述了两个连杆(分别称为父连杆 parent link和子连杆child link)通过关节的连接方式。joint标签还可以指定关节的运动范围、限制以及运动方式。关节的运动形式可以多样,如旋转、滑动、固定等,具体取决于机器人的设计需求。

(1)属性

name ---> 为关节命名
type ---> 关节运动形式continuous: 旋转关节,可以绕单轴无限旋转revolute: 旋转关节,类似于 continues,但是有旋转角度限制prismatic: 滑动关节,沿某一轴线移动的关节,有位置极限planer: 平面关节,允许在平面正交方向上平移或旋转floating: 浮动关节,允许进行平移、旋转运动fixed: 固定关节,不允许运动的特殊关节

(2)子标签

parent(必需的)
parent link的名字是一个强制的属性:link:父级连杆的名字,是这个link在机器人结构树中的名字。
child(必需的)
child link的名字是一个强制的属性:link:子级连杆的名字,是这个link在机器人结构树中的名字。
origin属性: xyz=各轴线上的偏移量 rpy=各轴线上的偏移弧度。
axis属性: xyz用于设置围绕哪个关节轴运动。

需求:创建机器人模型,底盘为长方体,在长方体的前面添加一摄像头,摄像头可以沿着 Z 轴 360 度旋转。

        base_footprint 优化 URDF 是为了解决机器人模型在仿真中“半沉入地面”的问题。通常情况下,机器人模型的底盘中心点会默认位于地图原点,这就会导致部分机器人部件渗入地面,影响仿真效果。为了解决这一问题,可以采取以下优化策略:

优化策略:

  • 设置初始 link 为尺寸极小的连杆: 将初始link定义为一个非常小的几何形状,如半径为 0.001m 的球体或边长为 0.001m 的立方体。
  • 添加底盘等主要连杆: 在这个尺寸极小的初始link上,再添加实际的底盘或其他机器人部件。通过这种方式,即便初始link仍然存在“半沉”的情况,但由于其尺寸极小,对整体仿真效果的影响可以忽略不计。

        base_footprint 的作用:该初始 link 一般被称为 base_footprint,它用作机器人模型的参考起点或基座,确保机器人在仿真中保持合理的初始位置,并避免大范围的部件渗入地面的现象。

遇到问题以及解决:

问题1: 编码问题导致的URDF显示异常

错误提示:

UnicodeEncodeError: 'ascii' codec can't encode characters in position xxx-xxx……

Rviz问题:提示坐标变换异常,导致机器人部件显示结构异常。

原因: 这是由于 URDF 文件中的中文注释引发的编码问题。默认情况下,某些系统或程序无法处理非 ASCII 字符,因此会出现编码错误,导致仿真环境中的坐标变换出现问题,最终影响机器人的显示结构。

解决方法:

  • 去除 URDF 文件中的中文注释,确保文件内容全部为 ASCII 字符。
  • 确保文件保存为 UTF-8 编码格式,这有助于避免其他潜在的编码问题。

问题2:缺少 joint_state_publisher_gui 包

错误提示:

[ERROR] [1584370263.037038]: Could not find the GUI, install the 'joint_state_publisher_gui' package

原因: 缺少joint_state_publisher_gui包,这是一个用于在 Rviz 中可视化和调试机器人关节状态的工具。

解决方法: 运行以下命令安装缺失的包

sudo apt install ros-noetic-joint-state-publisher-gui

安装完成后,再次运行仿真程序,即可解决此问题。

4 URDF练习-创建四轮圆柱状机器人模型的 URDF 文件

        根据需求描述,机器人模型将包括一个圆柱状底盘、两个驱动轮和两个万向轮。底盘的离地间距为 1.5 cm。以下是满足需求的 URDF 文件的简化代码示例:

  • 底盘(base_link): 使用半径为 10 cm,高度为 8 cm 的圆柱体。
  • 驱动轮: 两个驱动轮位于机器人底盘的前端,半径为 3.25 cm,轮胎宽度为 1.5 cm。
  • 万向轮: 两个球状万向轮位于机器人底盘的后方,半径为 0.75 cm。
  • 底盘离地间距: 万向轮的直径为 1.5 cm,因此机器人底盘离地间距为 1.5 cm。

5 URDF工具

 check_urdf命令可以检查复杂的 urdf 文件是否存在语法问题

urdf_to_graphiz命令可以查看 urdf 模型结构,显示不同 link 的层级关系

相关文章:

ROS理论与实践学习笔记——5 ROS机器人系统仿真之URDF(Unified Robot Description Format)语法详解

URDF 文件是一个标准的 XML 文件格式&#xff0c;用于在 ROS 中描述机器人模型的结构。URDF 通过预定义的一系列标签&#xff0c;简洁地表达机器人的组成和运动关系。虽然机器人模型可能非常复杂&#xff0c;但在 URDF 中可以主要简化为两个核心部分&#xff1a; 连杆&#xff…...

常见SQL注入攻击示例与原理及其防御措施

SQL 注入&#xff08;SQL Injection&#xff09;是一种代码注入技术&#xff0c;用于攻击数据驱动的应用程序&#xff0c;主要通过在输入字段或 URL 查询参数中插入恶意 SQL 语句来实现。攻击者利用应用程序对用户输入数据的未充分验证或过滤&#xff0c;将恶意 SQL 语句注入到…...

Node.js 中的 WebSocket 底层实现

WebSockets 是一种网络通信协议&#xff0c;可实现双向客户端-服务器通信。 WebSockets 通常用于需要即时更新的应用程序&#xff0c;使用 HTTP 之上的持久双工通道来支持实时交互&#xff0c;而无需持续进行连接协商。服务器推送是 WebSockets 的众多常见用例之一。 本文首先…...

MySQl数据库的基本操作

1.1创建数据库 使用CREATE DATABASE语句可以轻松创建MySQL数据库&#xff0c;语法如下&#xff1a; CREATE DATABASE 数据库名; 例&#xff1a;创建fruitsales数据库 CREATE DATABASE fruitsales;1.2 查看数据库 使用SHOW语句查看当前服务器下所有已经存在的数据库 SHOW DAT…...

Egg.js 项目的合理 ESLint 配置文件模板

Egg.js 项目的合理 ESLint 配置文件模板 安装依赖 npm install eslint babel/eslint-parser eslint-plugin-import eslint-plugin-promise eslint-plugin-node --save-dev extends: 扩展了 eslint-config-egg 以及其他一些常用的插件配置。 parser: 使用 babel/eslint-parse…...

算法专题七: 分治归并

目录 1. 排序数组2. 交易逆序对的总数3. 计算右侧小于当前元素的个数4. 翻转对 1. 排序数组 算法思路: 本道题使用归并的思路进行排序, 先讲数组分为左右两个区间, 然后合并两个有序数组. class Solution {vector<int> tmp; public:vector<int> sortArray(vector&…...

一个基于vue功能强大的表格组件--vxe-table的二次封装

基础使用 一个基于 vue 的 PC 端表格组件&#xff0c;支持增删改查、虚拟滚动、懒加载、快捷菜单、数据校验、树形结构、打印导出、表单渲染、数据分页、虚拟列表、模态窗口、自定义模板、渲染器、贼灵活的配置项、扩展接口等… <vxe-grid v-bind"gridOptions1"…...

CSS网页布局(重塑网页布局)

一、实现两列布局 许多网站有一些特点&#xff0c;如页面顶部放置一个大的导航或广告条&#xff0c;右侧是链接或图片&#xff0c;左侧放置主要内容&#xff0c;页面底部放置版权信息等。 一般情况&#xff0c;此类网页布局的两列都有固定的宽度&#xff0c;而且从内容上很容易…...

计算机网络:数据链路层 —— 以太网(Ethernet)

文章目录 局域网局域网的主要特征 以太网以太网的发展100BASE-T 以太网物理层标准 吉比特以太网载波延伸物理层标准 10吉比特以太网汇聚层交换机物理层标准 40/100吉比特以太网传输媒体 局域网 局域网&#xff08;Local Area Network, LAN&#xff09;是一种计算机网络&#x…...

考研前所学c语言02(2024/10/16)

1.一个十进制的数转化为二进制的就是不断除二取余&#xff0c;得到的余数从下到上取 比如123&#xff1a; 结果为&#xff1a; 同理其他的十进制转八进制&#xff0c;十六进制就除八&#xff0c;除十六即可 再比如123转十六进制&#xff1a; 因为余数是11&#xff0c;十六进…...

R语言绘图——坐标轴及图例

掌握坐标轴与图例的设置与调整&#xff0c;对于提升数据可视化的清晰度和可读性至关重要。通过这些工具&#xff0c;可以有效地传达数据背后的故事&#xff0c;提高图表的表现力。 0x01 坐标轴 一、坐标轴的设置 1、修改坐标轴的标签 在ggplot2中&#xff0c;坐标轴是根据数…...

JDK中socket源码解析

目录 1、Java.net包 1. Socket通信相关类 2. URL和URI处理类 3. 网络地址和主机名解析类 4. 代理和认证相关类 5. 网络缓存和Cookie管理类 6. 其他网络相关工具类 2、什么是socket&#xff1f; 3、JDK中socket核心Api 4、核心源码 1、核心方法 2、本地方法 3、lin…...

Ansible自动化运维项目实战指南

Ansible自动化运维项目实战指南 在当今快速发展的IT环境中&#xff0c;运维工作的复杂性和规模性日益增加&#xff0c;传统的手动运维方式已难以满足高效、可靠、可重复性的需求。Ansible作为一款开源的自动化运维工具&#xff0c;凭借其简单易用、无需代理、基于SSH的架构特性…...

MySQL【知识改变命运】10

联合查询 0.前言1.联合查询在MySQL里面的原理2.练习一个完整的联合查询2.1.构造练习案例数据2.2 案例&#xff1a;⼀个完整的联合查询的过程2.2.1. 确定参与查询的表&#xff0c;学⽣表和班级表2.2.2. 确定连接条件&#xff0c;student表中的class_id与class表中id列的值相等2.…...

Java学习教程,从入门到精通, Java 基础语法(4)

1、Java 基础语法 一、Java 简介与开发环境搭建 Java 简介&#xff1a;Java 是一种面向对象的编程语言&#xff0c;具有跨平台、安全、稳定等特点。Java 主要应用于企业级应用、Android 应用开发、大数据处理等领域。开发环境搭建&#xff1a;搭建 Java 开发环境需要安装 JDK…...

反编译工具-Jclasslib的使用,与Java方法调用的探索

这里写目录标题 前言IDEA下查看字节码的两种方法使用idea自带的插件工具安装插件 为什么没有看出方法调用关系原因分析工厂举例 知识补充语言java可移植性 总结 前言 画时序图的时候&#xff0c;我想验证下方法的调用是否写的正确。方法调用不仅涉及到程序的基本逻辑流程&#…...

力扣 简单 876.快慢指针

文章目录 题目介绍题解 题目介绍 题解 class Solution {public ListNode middleNode(ListNode head) {ListNode slow head, fast head;while(fast ! null && fast.next ! null){slow slow.next;fast fast.next.next;}return slow;} }...

FineReport 计算同比增长

1、数据库查询 SELECTt1.年,t1.月,t1.总金额 AS 同期金额,t1.仓库名称,t2.总金额 AS 上期金额 FROMtest t1LEFT JOIN test t2 ON ( t1.年 t2.年 1 ) AND t1.月 t2.月 AND t1.仓库名称 t2.仓库名称2、配置字段 月份字段加后缀 月 数据列加后缀 计算同比增长率 if(LEN(B3)0 …...

从0开始深度学习(12)——多层感知机的逐步实现

依然以Fashion-MNIST图像分类数据集为例&#xff0c;手动实现多层感知机和激活函数的编写&#xff0c;大部分代码均在从0开始深度学习&#xff08;9&#xff09;——softmax回归的逐步实现中实现过 1 读取数据 import torch from torchvision import transforms import torchv…...

如何利用OpenCV和yolo实现人脸检测

在之前的blog里面&#xff0c;我们有介绍OpenCV和yolo的区别&#xff0c;本文就人脸检测为例&#xff0c;分别介绍下OpenCV和yolo的实现方式。 OpenCV实现人脸检测 一、安装 OpenCV 首先确保你已经安装了 OpenCV 库。可以通过以下方式安装&#xff1a; 使用包管理工具安装&…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

【项目实战】通过多模态+LangGraph实现PPT生成助手

PPT自动生成系统 基于LangGraph的PPT自动生成系统&#xff0c;可以将Markdown文档自动转换为PPT演示文稿。 功能特点 Markdown解析&#xff1a;自动解析Markdown文档结构PPT模板分析&#xff1a;分析PPT模板的布局和风格智能布局决策&#xff1a;匹配内容与合适的PPT布局自动…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)

本期内容并不是很难&#xff0c;相信大家会学的很愉快&#xff0c;当然对于有后端基础的朋友来说&#xff0c;本期内容更加容易了解&#xff0c;当然没有基础的也别担心&#xff0c;本期内容会详细解释有关内容 本期用到的软件&#xff1a;yakit&#xff08;因为经过之前好多期…...

安卓基础(aar)

重新设置java21的环境&#xff0c;临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的&#xff1a; MyApp/ ├── app/ …...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

Mysql8 忘记密码重置,以及问题解决

1.使用免密登录 找到配置MySQL文件&#xff0c;我的文件路径是/etc/mysql/my.cnf&#xff0c;有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...