
URDF的建模思路(1)
这是关于URDF的第一部分 主要介绍什么是URDF,机器人设计流程以及前期需要准备什么,机器人类型及其思路,坐标系统与运动学设计和基本结构 什么是URDF URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中用于描述机器人模型的XML格式文件。它定义了机器人的: 物理结构(连杆和关节) 视觉外观 碰撞属性 惯性参数 机器人设计流程 设计一个机器人URDF模型需要遵循系统化的流程: 第…
FIELD_GUIDE
FIELD GUIDE
Use the guide rail to jump between sections.
这是关于URDF的第一部分
主要介绍什么是URDF,机器人设计流程以及前期需要准备什么,机器人类型及其思路,坐标系统与运动学设计和基本结构
什么是URDF
URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中用于描述机器人模型的XML格式文件。它定义了机器人的:
- 物理结构(连杆和关节)
- 视觉外观
- 碰撞属性
- 惯性参数
机器人设计流程
设计一个机器人URDF模型需要遵循系统化的流程:
第一步:明确需求
在开始编写URDF之前,先回答以下问题:
-
功能需求
- 机器人要完成什么任务?(搬运、巡检、操作、导航等)
- 需要什么样的运动能力?(移动、抓取、旋转等)
- 工作环境是什么?(室内、室外、狭窄空间等)
-
性能指标
- 负载能力:需要承载多重的物体?
- 运动范围:需要多大的工作空间?
- 速度要求:移动或操作的速度?
- 精度要求:定位精度、重复精度?
-
物理约束
- 尺寸限制:机器人的最大尺寸?
- 重量限制:总重量限制?
- 能源限制:电池容量、功耗?
- 成本限制:预算范围?
第二步:概念设计
根据需求进行初步设计:
-
选择机器人类型
- 移动机器人:轮式、履带式、腿式
- 机械臂:串联、并联、SCARA
- 复合机器人:移动+机械臂
-
确定自由度(DOF)
- 移动平台:通常2-3个自由度(平面运动)
- 机械臂:通常4-7个自由度
- 原则:自由度越多越灵活,但控制越复杂
-
绘制草图
- 手绘或使用CAD软件
- 标注关键尺寸
- 标注关节位置和类型
- 标注质心位置
第三步:运动学分析
在编写URDF前进行运动学分析:
-
建立坐标系
- 确定基座坐标系(base_link)
- 为每个关节建立坐标系
- 遵循DH参数或其他约定
-
分析运动链
- 确定父子关系(树状结构)
- 计算各关节的相对位置
- 确定关节轴方向
-
工作空间分析
- 计算可达工作空间
- 检查是否满足任务需求
- 识别奇异点
第四步:参数计算
准备URDF所需的物理参数:
-
几何参数
- 连杆长度、宽度、高度
- 关节位置(xyz坐标)
- 关节姿态(rpy角度)
-
质量参数
- 每个连杆的质量
- 质心位置
- 惯性矩阵
-
运动参数
- 关节运动范围(limit)
- 最大速度
- 最大力/力矩
第五步:编写URDF
按照以下顺序编写:
- 定义base_link(根连杆)
- 逐级添加子连杆和关节
- 添加视觉和碰撞几何
- 填充物理参数
- 添加传感器和执行器
第六步:验证与测试
- 语法检查:
check_urdf - 可视化检查:RViz
- 运动学测试:joint_state_publisher
- 仿真测试:Gazebo
- 碰撞检测测试
第七步:迭代优化
根据测试结果进行优化:
- 调整几何参数
- 优化质量分布
- 调整关节限位
- 简化碰撞几何
- 添加阻尼和摩擦
设计前的准备工作
工具准备
-
必备工具
- 文本编辑器(VSCode、Sublime等)
- ROS环境(用于测试)
- RViz(可视化)
- Gazebo(仿真)
-
辅助工具
- CAD软件(SolidWorks、Fusion 360等)
- 草图工具(纸笔、绘图软件)
- 计算器(惯性矩阵计算)
-
参考资料
- URDF官方文档
- 类似机器人的URDF示例
- 机器人学教材
知识准备
-
坐标变换
- 齐次变换矩阵
- 欧拉角与旋转矩阵
- 四元数(可选)
-
运动学基础
- 正运动学
- 逆运动学(可选)
- 雅可比矩阵(可选)
-
动力学基础
- 刚体动力学
- 惯性矩阵
- 质心计算
设计原则
-
模块化设计
- 将复杂机器人分解为模块
- 每个模块独立设计和测试
- 使用Xacro实现代码复用
-
简化原则
- 从简单模型开始
- 逐步增加细节
- 避免过早优化
-
可维护性
- 使用清晰的命名
- 添加注释说明
- 保持代码结构清晰
机器人类型与设计思路
1. 差速驱动移动机器人(Differential Drive)
应用场景:室内导航、服务机器人、巡检机器人
设计要点:
- 两个驱动轮 + 一个或多个支撑轮
- 驱动轮通常使用continuous关节
- 支撑轮可以是固定的或万向的
关键参数:
- 轮距(wheel base):影响转弯半径
- 轮径:影响速度和越障能力
- 质心高度:影响稳定性
设计步骤:
1. 设计基座(base_link)- 确定尺寸(长×宽×高)- 计算质量和惯性2. 设计驱动轮- 确定轮径和轮宽- 计算轮距(通常为基座宽度的80-90%)3. 设计支撑轮- 前置或后置4. 添加传感器- 激光雷达(顶部中心)- 相机(前方)
设计示意图:
[激光雷达]
|
+-------+-------+
| base_link | ← 主体
+-------+-------+
| | |
[左轮] [支撑] [右轮]
2. 四轮/全向移动机器人(Omnidirectional)
应用场景:仓储物流、狭窄空间作业
设计要点:
- 四个麦克纳姆轮或全向轮
- 可以实现任意方向移动
- 需要精确的轮子位置和角度
关键参数:
- 轮子布局:矩形或菱形
- 轮子角度:通常45度
- 质量分布:尽量对称
设计步骤:
1. 确定轮子布局- 矩形布局:四个角- 菱形布局:四条边中点2. 计算轮子位置- 使用对称布局- 考虑转动惯量3. 设置轮子角度- 麦克纳姆轮:±45度- 全向轮:根据布局确定
3. 串联机械臂(Serial Manipulator)
应用场景:工业装配、物料搬运、精密操作
设计要点:
- 多个revolute关节串联
- 通常4-7个自由度
- 需要考虑工作空间和奇异点
关键参数:
- 连杆长度:决定工作空间
- 关节限位:避免自碰撞
- 负载能力:末端执行器重量
设计步骤:
1. 确定自由度
- 平面操作:2-3 DOF
- 空间操作:6 DOF(位置3+姿态3)
- 冗余操作:7+ DOF
2. 设计连杆长度
- 根据工作空间需求
- 考虑结构强度
- 平衡灵活性和刚度
3. 确定关节类型和轴向
- 基座关节:通常绕Z轴(yaw)
- 肩关节:通常绕Y轴(pitch)
- 肘关节:通常绕Y轴(pitch)
- 腕关节:roll-pitch-yaw
4. 计算关节限位
- 避免自碰撞
- 考虑实际工作需求
- 留有安全余量
典型6自由度机械臂结构:
base_link (固定)
↓ joint1 (revolute, Z轴)
link1 (肩部旋转)
↓ joint2 (revolute, Y轴)
link2 (肩部俯仰)
↓ joint3 (revolute, Y轴)
link3 (肘部)
↓ joint4 (revolute, X轴)
link4 (腕部roll)
↓ joint5 (revolute, Y轴)
link5 (腕部pitch)
↓ joint6 (revolute, X轴)
link6 (腕部yaw/末端执行器)
4. 移动机械臂(Mobile Manipulator)
应用场景:服务机器人、协作机器人
设计要点:
- 移动平台 + 机械臂组合
- 需要考虑整体稳定性
- 质心位置很重要
设计步骤:
1. 设计移动平台
- 参考差速驱动设计
- 确保足够的承载能力
2. 设计机械臂安装位置
- 通常在平台中心或前部
- 考虑质心偏移
3. 整体稳定性分析
- 计算整体质心
- 确保不会倾覆
- 考虑最大伸展状态
5. 腿式机器人(Legged Robot)
应用场景:复杂地形、仿生研究
设计要点:
- 多条腿(2/4/6腿)
- 每条腿多个关节
- 需要复杂的步态规划
设计步骤:
1. 确定腿的数量
- 双足:类人,平衡困难
- 四足:稳定性好
- 六足:最稳定
2. 设计单腿结构
- 髋关节:2-3 DOF
- 膝关节:1 DOF
- 踝关节:1-2 DOF
3. 腿的布局
- 对称布局
- 考虑步态
- 避免干涉
坐标系统与运动学设计
ROS坐标系约定
ROS使用右手坐标系,标准约定为:
Z (上)
|
|
+---- X (前)
/
/
Y (左)
重要约定:
- X轴:机器人前进方向(红色)
- Y轴:机器人左侧方向(绿色)
- Z轴:机器人向上方向(蓝色)
- 旋转遵循右手定则
关节坐标系设置
每个关节都有自己的坐标系,设置原则:
-
Revolute关节(旋转关节)
- 关节轴通过origin位置 - axis参数定义旋转轴方向 - 子连杆绕该轴旋转 -
Prismatic关节(滑动关节)
- 关节轴通过origin位置 - axis参数定义滑动方向 - 子连杆沿该轴平移 -
Fixed关节(固定关节)
- 仅定义相对位置和姿态 - 无运动自由度
坐标变换计算
从父连杆到子连杆的变换:
位置变换:
姿态变换:
实用坐标系设计技巧
-
对称性利用
- 左右对称的部件使用镜像坐标
- 使用reflect参数(在Xacro中)
-
模块化坐标系
- 每个模块有独立的局部坐标系
- 通过关节连接到全局坐标系
-
坐标系可视化
- 在RViz中显示TF树
- 检查坐标系方向是否正确
- 使用
rosrun tf view_frames生成PDF
运动学链设计
开链(Open Chain):
最常见的结构,如机械臂:
base → link1 → link2 → link3 → end_effector
树状结构(Tree Structure):
移动机械臂:
base_link
/ | \
wheel1 wheel2 arm_base
|
arm_link1
|
arm_link2
注意:URDF不支持闭环(Closed Loop),如果需要闭环结构,需要:
- 在URDF中断开一个关节
- 在控制器中添加约束
- 或使用SDF格式(Gazebo)
基本结构
URDF文件的基本框架:
<?xml version="1.0"?>
<robot name="my_robot">
<!-- 连杆定义 -->
<link name="link_name">
<!-- 视觉、碰撞、惯性属性 -->
</link>
<!-- 关节定义 -->
<joint name="joint_name" type="joint_type">
<!-- 父子连杆关系和运动参数 -->
</joint>
</robot>