BACK_TO_BASE
URDF的建模思路(1)
Engineering Notebook // Build Log
/
17:36:20
/
NOTEBOOK_ENTRY

URDF的建模思路(1)

这是关于URDF的第一部分 主要介绍什么是URDF,机器人设计流程以及前期需要准备什么,机器人类型及其思路,坐标系统与运动学设计和基本结构 什么是URDF URDF(Unified Robot Description Format,统一机器人描述格式)是ROS中用于描述机器人模型的XML格式文件。它定义了机器人的: 物理结构(连杆和关节) 视觉外观 碰撞属性 惯性参数 机器人设计流程 设计一个机器人URDF模型需要遵循系统化的流程: 第…

Notebook Time
1 min
Image Frames
1
View Tracks
50
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之前,先回答以下问题:

  1. 功能需求

    • 机器人要完成什么任务?(搬运、巡检、操作、导航等)
    • 需要什么样的运动能力?(移动、抓取、旋转等)
    • 工作环境是什么?(室内、室外、狭窄空间等)
  2. 性能指标

    • 负载能力:需要承载多重的物体?
    • 运动范围:需要多大的工作空间?
    • 速度要求:移动或操作的速度?
    • 精度要求:定位精度、重复精度?
  3. 物理约束

    • 尺寸限制:机器人的最大尺寸?
    • 重量限制:总重量限制?
    • 能源限制:电池容量、功耗?
    • 成本限制:预算范围?

第二步:概念设计

根据需求进行初步设计:

  1. 选择机器人类型

    • 移动机器人:轮式、履带式、腿式
    • 机械臂:串联、并联、SCARA
    • 复合机器人:移动+机械臂
  2. 确定自由度(DOF)

    • 移动平台:通常2-3个自由度(平面运动)
    • 机械臂:通常4-7个自由度
    • 原则:自由度越多越灵活,但控制越复杂
  3. 绘制草图

    • 手绘或使用CAD软件
    • 标注关键尺寸
    • 标注关节位置和类型
    • 标注质心位置

第三步:运动学分析

在编写URDF前进行运动学分析:

  1. 建立坐标系

    • 确定基座坐标系(base_link)
    • 为每个关节建立坐标系
    • 遵循DH参数或其他约定
  2. 分析运动链

    • 确定父子关系(树状结构)
    • 计算各关节的相对位置
    • 确定关节轴方向
  3. 工作空间分析

    • 计算可达工作空间
    • 检查是否满足任务需求
    • 识别奇异点

第四步:参数计算

准备URDF所需的物理参数:

  1. 几何参数

    • 连杆长度、宽度、高度
    • 关节位置(xyz坐标)
    • 关节姿态(rpy角度)
  2. 质量参数

    • 每个连杆的质量
    • 质心位置
    • 惯性矩阵
  3. 运动参数

    • 关节运动范围(limit)
    • 最大速度
    • 最大力/力矩

第五步:编写URDF

按照以下顺序编写:

  1. 定义base_link(根连杆)
  2. 逐级添加子连杆和关节
  3. 添加视觉和碰撞几何
  4. 填充物理参数
  5. 添加传感器和执行器

第六步:验证与测试

  1. 语法检查:check_urdf
  2. 可视化检查:RViz
  3. 运动学测试:joint_state_publisher
  4. 仿真测试:Gazebo
  5. 碰撞检测测试

第七步:迭代优化

根据测试结果进行优化:

  1. 调整几何参数
  2. 优化质量分布
  3. 调整关节限位
  4. 简化碰撞几何
  5. 添加阻尼和摩擦

设计前的准备工作

工具准备

  1. 必备工具

    • 文本编辑器(VSCode、Sublime等)
    • ROS环境(用于测试)
    • RViz(可视化)
    • Gazebo(仿真)
  2. 辅助工具

    • CAD软件(SolidWorks、Fusion 360等)
    • 草图工具(纸笔、绘图软件)
    • 计算器(惯性矩阵计算)
  3. 参考资料

    • URDF官方文档
    • 类似机器人的URDF示例
    • 机器人学教材

知识准备

  1. 坐标变换

    • 齐次变换矩阵
    • 欧拉角与旋转矩阵
    • 四元数(可选)
  2. 运动学基础

    • 正运动学
    • 逆运动学(可选)
    • 雅可比矩阵(可选)
  3. 动力学基础

    • 刚体动力学
    • 惯性矩阵
    • 质心计算

设计原则

  1. 模块化设计

    • 将复杂机器人分解为模块
    • 每个模块独立设计和测试
    • 使用Xacro实现代码复用
  2. 简化原则

    • 从简单模型开始
    • 逐步增加细节
    • 避免过早优化
  3. 可维护性

    • 使用清晰的命名
    • 添加注释说明
    • 保持代码结构清晰

机器人类型与设计思路

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轴:机器人向上方向(蓝色)
  • 旋转遵循右手定则

关节坐标系设置

每个关节都有自己的坐标系,设置原则:

  1. Revolute关节(旋转关节)

    - 关节轴通过origin位置
    - axis参数定义旋转轴方向
    - 子连杆绕该轴旋转
    
  2. Prismatic关节(滑动关节)

    - 关节轴通过origin位置
    - axis参数定义滑动方向
    - 子连杆沿该轴平移
    
  3. Fixed关节(固定关节)

    - 仅定义相对位置和姿态
    - 无运动自由度
    

坐标变换计算

从父连杆到子连杆的变换:

位置变换

姿态变换

实用坐标系设计技巧

  1. 对称性利用

    • 左右对称的部件使用镜像坐标
    • 使用reflect参数(在Xacro中)
  2. 模块化坐标系

    • 每个模块有独立的局部坐标系
    • 通过关节连接到全局坐标系
  3. 坐标系可视化

    • 在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>