urdf讲解


top: urdf文件中不能有中文注释

<link>元素,属性:name(required) 描述link自己的名称

URDF文件创建,首先在工作空间 的src下,使用catkin_make packagename urdf创建一个urdf包。

URDF文件中不能有中文注释,删除掉中文注释

<link>中的子标签:

1.1 <inertial> (option)

: 描述link的惯性属性。

<inertial>子标签有


  • <origin> (optional:如果没有指定定义为defaults :这是惯性参考系相对于连杆参考坐标系的姿态。惯 性参考坐标系的原点必须在重心。惯性参考坐标系的轴无需与惯性主轴对齐。
属性描述
xyz(optional)默认在零向量,描述x,y,z的偏移量
rpy(optional)如为指定默认标识,标识固定轴的横滚角,俯仰角和偏航角以弧度标识
  • <mass> 描述link的质量; 属性是value.
  • <inertia> 3x3的惯性矩阵,由于转动惯量矩阵是对称的,这里只指定了该矩阵的6个以上对角线元素,使用属性ixx、ixy、ixx、iyy、iyz、izz。

1.2 <visual>(option) 描述link的外形

链接的视觉属性。此元素指定用于可视化目的的对象(框、圆柱体等)的形状。注意:同一链接可以存在多个<visual>标记实例。它们定义的几何图形的并集形成了链接的可视化表示。
属性的name(optional):指定link几何图形的一部分名称。这对于能够引用链接几何体的特定位很有用。

<visual>的子标签有


  • <origin> (optional) 如未指定,则标识为默认;视觉元素的参考框架性对于link的参考框架
属性描述
xyz(optional默认0向量)描述xyz的偏移量
ryp(optioanal)如为指定默认标识,标识固定轴的横滚角,俯仰角和偏航角以弧度标识
  • <geometry> (required) 描述视觉对象的形状,有以下的子标签
子标签作用
<box>属性是size 包含盒子的三个边长。盒子的原点在中间
<cylinder>有两个属性,radius和length 指定圆柱体的半径,圆柱体的圆心位于其中心
<mesh>
  • <collosion> (optional) 描述link的碰撞属性

<joint>及子标签

它描述了关节的运动学以及动力学,还指定了关节的安全极限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SctxwaoT-1590647600581)(/home/zhongsy/Desktop/photo/Screenshot from 2020-04-20 16-18-21.png)]

属性描述
name (required)声明joint的名字
type (required)声明joint的类型。有以下几种:(1)revolute 旋转-沿轴旋转并具有由上限和下限指定的有限范围的铰链关节。(2)continous绕轴旋转且没有上下限的连续铰链关节。(3) prismatic -沿轴滑动的滑动关节,具有由上限和下限指定的有限范围。(4)fixed 这不是真正的关节,因为它不能移动。所有自由度都被锁定。这种类型的关节不需要轴、校准、动力学、极限或安全控制器。(5) floating -这个关节允许所有6个自由度的运动. (6) planar 这个关节允许在垂直于轴的平面上运动。

子标签有

2.1 <origin> (optional)

如果没有指定那么设置为default

属性描述
xyz(optional默认0向量)描述xyz的偏移量,均以米为单位
ryp(optioanal)如为指定默认标识,表示绕固定轴旋转:首先绕x轴滚动,然后绕y轴俯仰,最后z轴偏航。所有角度均以弧度为单位

2.2 <parent> (required)

有一个必填的属性:父link的名称

属性描述
link父link的名称

2.3 <child> (required)

属性描述
link子link的名称

2.4 <axis> (optional 默认(1,0,0))

关节框架中指定的关节轴。这是旋转关节的旋转轴、棱柱关节的平移轴和平面关节的曲面法向。轴在关节参考系中指定。固定关节和浮动关节不使用“axis”标签。

属性描述
xyz (required)components of a vector. The vector should be normalized.

2.5 <calibration> (optional)

joint的参考位置,用于校准关节的绝对位置

属性描述
rising (optional)当关节正向移动时,该参考位置将触发上升沿。
falling (optional)当关节正向移动时,该参考位置将触发下降沿。

2.6<dynamics> (optional)

指定joint的物理特性的标签,指定建模属性用于仿真

2.7<friction> (optional defaults to 0)

2.8<limit> (required only for revolute(旋转)and prismatic(棱柱)joint)

问题

也可能是launch文件写错了

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SNEhVkSw-1590647600584)(/home/zhongsy/Desktop/photo/Screenshot from 2020-04-19 17-38-08.png)]

launch文件

<launch>
<arg name="model" />
<!--设置GUI参数,显示关节控制插件-->
<arg name="gui" default="False" />
<param name="robot_description" textfile="$(find mrobot_description)/urdf/mrobot_base.urdf" />
<param name="use_gui" value="$(arg gui)"/>
<!--运行joint_state_publisher节点,发布机器人关节状态-->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" ></node>
<!--运行robot_state_publisher节点,发布tf-->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
<!--运行rviz可视化界面-->
<node name="rviz" pkg="rviz" type="rviz" />
</launch>

<launch>

  <arg name="model" />
  <arg name="gui" default="true" />
  <arg name="rvizconfig" default="$(find urdf_tutorial)/rviz/urdf.rviz" />

  <param name="robot_description" command="$(find xacro)/xacro.py $(arg model)" />  //把xacro 文件转换成urdf文件
  <param name="use_gui" value="$(arg gui)"/>

  <node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
  <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" />
  <node name="rviz" pkg="rviz" type="rviz" args="-d $(arg rvizconfig)" required="true" />

</launch>

工具

check_urdf my_robot.urdf
命令行检查urdf文件

建模软件

solidwork

xacro package(减少urdf的代码量)

xxx.urdf.xacro

对于三件事xacro很有帮助

  • constant
  • simple math
  • macros(宏)
    顾名思义,xacro是一种宏语言。xacro程序运行所有宏并输出结果。典型用法如下:
xacro --inorder model.xacro > model.urdf 

您还可以在启动文件中自动生成urdf。这很方便,因为它保持最新,而且不会占用硬盘空间。但是,生成确实需要时间,因此请注意,启动启动文件可能需要更长的时间。

param name="robot_description" command="xacro --inorder '$(find pr2_description)/robots/pr2.urdf.xacro'" />

在URDF文件的顶部,必须指定一个名称空间,以便文件正确解析。例如,以下是有效xacro文件的前两行:

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

这个很简单就像是声明变量声明模块然后赋值使用会生成对应urdf代码

详细的可以看http://wiki.ros.org/urdf/Tutorials/Using Xacro to Clean Up a URDF File


版权声明:本文为ahelloyou原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。