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

⑤Pybullet之URDF文件说明及示例

Pybullet进行机器人导入时,肯定会使用到URDF文件。此处详细说明一下URDF文件具体内容及作用。

一、URDF概述

URDF全称为"统一机器人描述格式"(Unified Robot Description Format),可以理解为机器人领域的"说明书"。与计算机文件中的.txt文本格式、.jpg图像格式类似,URDF是一种专门用于描述机器人结构的XML格式文件。

URDF的设计目的在于提供一种尽可能通用的机器人描述规范。从机构学角度讲,机器人通常被建模为由连杆(Link)和关节(Joint)组成的结构。连杆是带有质量属性的刚体,而关节是连接、限制两个刚体相对运动的结构。关节也被成为运动副。通过关节将连杆依次连接起来,就构成了一个个运动链(也就是这里所定义的机器人模型)。

一个URDF文档即描述了这样的一系列关节与连杆的相对关系、惯性属性、几何特点和碰撞模型。具体来说,包括:

  • 机器人模型的运动学与动力学描述
  • 机器人的几何表示
  • 机器人的碰撞模型

二、URDF基本结构

URDF文件本质上是XML格式的文件,具有清晰的层级结构。一个典型的URDF文件以<robot>标签开始,包含多个<link><joint>标签,描述机器人的各个部件及其连接关系。

1、XML声明

它是所有合法XML文件的第一行,用于确保文件被正确解析。如下所示,告诉解析器,这个文件是一个XML文件,并且遵循XML 1.0规范。

<?xml version="1.0" ?>

2、顶层结构

URDF文件的最外层是<robot>标签,它定义了整个机器人模型。<robot>标签通常包含一个name属性,用于指定机器人的名称。此外,也可以引入扩展。如Xacro是ROS对标准URDF XML格式的扩展,它允许在URDF文件中使用宏定义、变量、条件语句和数学表达式等,从而大大提高了URDF文件的可重用性和可维护性,避免了大量重复代码。

<?xml version="1.0"?>
<robot name="melfa_rv-8crl" xmlns:xacro="http://wiki.ros.org/xacro"><!-- link和joint定义放在这里 -->
</robot>

在这个例子中,机器人的名称是melfa_rv-8crl,这通常暗示这是一个Melfa品牌的RV-8CRL型号的机器人。xmlns是XML Namespaces的缩写,xacro是自定义的命名空间前缀,"http://wiki.ros.org/xacro"是该命名空间的URI(统一资源标识符)。如果没有这个声明,文件就只是一个标准的、相对基础的URDF文件。

3、Link(连杆)定义

<link>标签描述机器人中一个刚体部分,每个Link都会成为一个坐标系。一个Link通常包含三个子标签:

  • <visual>:定义外观属性(几何形状、颜色、纹理)
  • <inertial>:定义物理属性(质量、惯性矩阵等)
  • <collision>:定义碰撞属性检测的几何形状
  <!-- Base Link --><link name="base_link"><visual><origin xyz="0 0 0" rpy="1.5708 -0 3.1416" /><geometry><mesh filename="package://melfa_rv-8crl/meshes/base.stl"/></geometry><material name="melfa_rv-8crl_grey"/></visual><collision><origin xyz="0 0 0" rpy="1.5708 -0 3.1416" /><geometry><mesh filename="package://melfa_rv-8crl/meshes/base.stl"/></geometry></collision><inertial><mass value="4.0"/><origin xyz="0 0 0" rpy="1.5708 -0 3.1416" /><inertia ixx="0.00443333156" ixy="0.0" ixz="0.0" iyy="0.00443333156" iyz="0.0" izz="0.0072"/></inertial></link>

4、Joint(关节)定义

<joint>标签描述两个Link之间的关系,包括关节运动的位置和速度限制,描述机器人运行学属性。关节定义中包含以下重要属性和子标签:

  • type:关节类型
  • parent:指定父Link
  • child:指定子Link
  • origin:定义关节相对于父Link坐标系的位置和姿态
  • axis:定义关节运动轴
  • limit:定义关节运动范围

关节类型有以下几种:

  • continuous:一个不受限制的,绕着一根轴的转动副
  • revolute:一个转动角度受到限制的,绕着一根轴的转动副
  • prismatic:一个沿着一根轴的滑动副,并且有限位
  • fixed:固定关节
  • floating:这个关节允许六个自由度的运动,浮动关节
  <!-- Link 1 --><joint name="joint_1" type="revolute"><origin rpy="0 0 0" xyz="0.0 0.0 0.0"/><axis xyz="0 0 1"/><parent link="base_link"/><child link="link_1"/><limit effort="0" lower="-2.96706" upper="2.96706" velocity="0"/></joint>

对于简单的机器人模型,可以直接手动编写URDF文件。使用任何文本编辑器,按照XML语法和URDF规范编写即可。对于复杂的机器人模型,通常使用三维建模软件创建模型,然后导出为URDF文件。常用的方法包括:

  • 使用SolidWorks的SW2URDF插件
  • 使用SketchUp导出为dae格式,然后转换为URDF

后续再详细介绍如何通过SolidWorks制作URDF文件。

相关文章:

  • MCP Tool模块详解
  • 【工具教程】多个条形码识别用条码内容对图片重命名,批量PDF条形码识别后用条码内容批量改名,使用教程及注意事项
  • 数据结构与算法——二叉树高频题目(2)
  • 为什么已经有 Nginx 了,还需要服务网关?
  • 2025年中国建银投资笔试测评春招校招社招笔试入职测评行测题型解读揭秘
  • DBAPI实现参数签名验证
  • Spyglass:跨时钟域同步(时钟门控单元)
  • minio上传文件
  • 小番茄C盘清理:专业高效的电脑磁盘清理工具
  • 基于算法竞赛的c++编程(23)原码,反码,补码
  • LLMs之MCP:《Evaluation Report on MCP Servers》翻译与解读
  • comfyui 工作流中 图生视频 如何增加视频的长度到5秒
  • CppCon 2015 学习:Large Scale C++ With Modules
  • Oracle实用参考(13)——Oracle for Linux物理DG环境搭建(2)
  • 0x-2-Oracle Linux 9上安装JDK配置环境变量
  • RISC-V 开发板 + Ubuntu 23.04 部署 open_vins 过程
  • 03.数据类型
  • 【读论文】OpenAI o3与o4系统模型技术报告解读
  • 基于机器学习的智能故障预测系统:构建与优化
  • Go语言--语法基础5--基本数据类型--输入输出(1)
  • 最新手机网站推荐/网络推广方法怎么做
  • 广西壮族自治区住房和建设厅网站/西安做网站的公司
  • dm建站系统/百度网盘官方下载
  • 多多淘宝客网站/百度关键词排名用什么软件
  • 沧州建设局网站/seo外包公司如何优化
  • wordpress 裁剪/灯塔网站seo