Halo
发布于 2023-07-11 / 113 阅读 / 0 评论 / 0 点赞

urdf规范简介

起源

URDF全称(United Robotics Description Format)统一机器人描述格式,是一个XML语法框架下用来描述机器人的语言格式.
详细文档参见: https://wiki.ros.org/urdf/XML

单位

  • 长度单位: m
  • 质量单位: kg
  • 速度单位: m/s

层次结构

示例

<robot name="my_robot">
  <link name="link_a">
    <inertial></inertial>
    <visual></visual>
    <collision></collision>
  </link>
  <link name="link_b"></link>
  <!-- other link --->
    
  <joint name="joint_a" type="fixed">
    <parent link="link_a" />
    <child link = "link_b" />
    <origin xyz="-0.055 0.075 0" rpy="0 0 0" /> 
  </joint>
  <!-- other joint --->
</robot>

link

link 是一个完整的部件, 主要含有三个属性: inertial, collision, visual等三个.

<link name="link_a">
  <visual>
    <origin xyz=" 0 0 0" rpy="0 0 0" />
    <geometry>
      <cylinder length="0.005" radius="0.13"/>
    </geometry>
    <material>
      <color rgba="1 0.4 0 1"/>
    </material>
  </visual>
    
  <inertial>
    <mass value="2" />
    <origin xyz="0 0 0 .0" />
    <inertia ixx="0.01" ixy= "0.0" ixz="0.0"
             iyy="0.01" iyz="0.0" izz="0.5" />
  </inertial>
    
  <collision>
    <origin xyz="0 0 0" rpy="0 0 0" />
    <geometry>
      <cylin der length="${base_link_length}" 
             radius="${base_link_radius}"/>
    </geometry>
  </collision>
</link>

visual

visual 为部件的可视化描述

  • origin: 位置, 放置物体的全局坐标位置
  • geometry: 几何形状, 有box, cylinder, sphere, mesh等属性, 放置时以其几何中心点对齐到origin位置
  • material: 材质属性, 属性color的每个权重值范围是[0,1]

inertial

inertial 为部件的惯性描述

  • mass: 质量大小
  • origin: 质量的中心点
  • inertia: 各个方向的惯性系数

collision

collision 为部件的碰撞描述

  • origin: 碰撞点的偏移描述
  • geometry: 几何形状

joint

joint 是表述link 之间的关系, 这种关系是一个树状结构

  • 一个child link 只能有一个parent link
  • 一个模型只能由一个root link
  • 只有root link可以有多个分支
<joint name="joint_a" type="fixed">
  <parent link="link_a" />
  <child link = "link_b" />
  <origin xyz="-0.055 0.075 0" rpy="0 0 0" /> 
</joint>
  • origin: 位置, 当放置好child link后, child link需要再次变动的描述

type

type 指明joint运动形式

  • continuous: 绕轴旋转的连续铰链关节,没有上下限
  • revolute: 沿轴旋转的铰链关节,其范围由上限和下限指定
  • prismatic: 沿轴滑动的滑动关节,具有由上限和下限指定的有限范围
  • planar: 该关节允许在垂直于轴的平面上运动
  • floating: 该关节允许所有 6 个自由度的运动
  • fixed: 这并不是真正的关节,因为它不能移动。 所有自由度均被锁定。 这种类型的关节不需要<axis>、<calibration>、<dynamics>、<limits>或<safety_controller>

rpy

  • roll:翻滚角ϕ \phiϕ(视角旋转)。向右滚为正,反之为负
  • pitch:俯仰角θ \thetaθ(往上往下)。抬头为正,反之为负
  • yaw:侧航角ψ \psiψ(往左往右)。右偏航为正,反之为负

常量

在同一个urdf文件中, 定义常量, 方便值的修改

定义

<?xml version="1.0"?>
<robot name="robot_na me" xmlns:xacro="http://www.ros.org/wiki/xacro>">
  <xacro:property name="M_PI" value="3.14159"/>
</robot>

使用

<?xml version="1.0"?>
<robot name="robot_na me" xmlns:xacro="http://www.ros.org/wiki/xacro>">
  <!--  ...  -->
  <link name="link_a">
    <visual>
      <geometry>
        <origin xyz="0 0 0" rpy="${M_PI/2} 0 0" />
      </geometry>
    </visual>
  </link>
</robo>

在同一个urdf文件中, 定义宏, 方便相同描述的重复利用

定义

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
  <xacro:macro name="my_wheel" params="name">
    <link name="${name}">
      <inertial>
        <mass value="0.001" />
        <origin xyz="0 0 0" />
        <inertia ixx="0.0001" ixy="0.0" ixz="0.0"
                 iyy="0.0001" iyz="0.0" izz="0.0001" />
      </inertial>
      <!-- ... -->
    </link>
    <!-- ... -->
  </xacro:macro>
</robot>

使用

<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro">
  <!-- ... -->
  <my_wheel name="top"/>
</robot>

评论