目录
URDF语法
练习案例
URDF工具
1.URDF是 Unified Robot Description Format 的首字母缩写,直译为统一(标准化)机器人描述格式,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度.....,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。
2.URDF 文件是一个标准的 XML 文件,在 ROS 中预定义了一系列的标签用于描述机器人模型。
标签包括:
【1】 robot:
【2】link:
1.属性
2.子标签
visual ---> 描述外观(对应的数据是可视的)
geometry 设置连杆的形状
标签1: box(盒状)
标签2: cylinder(圆柱)
标签3: sphere(球体)
标签4: mesh(为连杆添加皮肤)
origin 设置偏移量与倾斜弧度
属性1: xyz=x偏移 y偏移 z偏移
属性2: rpy=x翻滚 y俯仰 z偏航 (单位是弧度)
metrial 设置材料属性(颜色)
属性: name
标签: color
collision ---> 连杆的碰撞属性
Inertial ---> 连杆的惯性矩阵
【3】joint:
1.属性
name ---> 为关节命名
type ---> 关节运动形式
continuous: 旋转关节,可以绕单轴无限旋转
revolute: 旋转关节,类似于 continues,但是有旋转角度限制
prismatic: 滑动关节,沿某一轴线移动的关节,有位置极限
planer: 平面关节,允许在平面正交方向上平移或旋转
floating: 浮动关节,允许进行平移、旋转运动
fixed: 固定关节,不允许运动的特殊关节
2.子标签
parent(必需的)
parent link的名字是一个强制的属性:
child(必需的)
child link的名字是一个强制的属性:
origin
axis
需求:创建一个四轮圆柱状机器人模型,机器人参数如下,底盘为圆柱状,半径 0.1m,高 0.08m,四轮由两个驱动轮和两个万向支撑轮组成,两个驱动轮半径为 0.035m,轮胎宽度0.015cm,两个万向轮为球状,半径 0.0075m,底盘离地间距为 0.015m(与万向轮直径一致)
目标:
流程:
1.创建一个功能包,导入 urdf 依赖
在当前功能包下,再新建几个目录:
urdf
: 存储 urdf 文件的目录
config
: 存储保存的已配置的rviz文件
launch
: 存储 launch 启动文件
2. 新建urdf以及launch文件
2.1新建urdf文件
设置base_footprint的意义:
添加一个尺寸极小的link(上图中的base_footprint),再关联(通过joint)base_footprint与base_link (底盘),更方便移动整个物体,或者 同时修改base_link和其他物体link的origin (初始位置)
前者方法是构建一个极小的base_footprint出来,然后与其他所有物体划分,再建立一个他们各自坐标系的相对关系,以这个footprint为参照坐标系,那么其他所有物体就会随之改变位置(更高效便捷地移动多个物体)
后者是通过改变每个物体的重心的坐标系实现相同的视觉效果(较麻烦)
2.2新建launch文件(下面的关节状态节点,我们选择发布动态的)
每次重复启动launch
文件时,Rviz 之前的组件配置信息不会自动保存 ,我们可以将rviz文件另存为
再启动时,就可以包含之前的组件配置了,使用更方便快捷。
launch
文件中 Rviz 的启动配置添加参数:args
,值设置为"-d 配置文件路径
"
3.底盘搭建
4.添加驱动轮
5.添加万向轮
最后,ctrl+s保存一下,打开vscode中的终端,source 一下再 roslaunch 包名 launch文件 就可以打开rviz(然后记得查看Fixed Frame是否为base_footprint 即以它为参照坐标系 )
我们先点击Add 选择添加TF坐标系,然后通过调节移动运动关节,例如上图的left2baselink,可以发现它的TF坐标系在转动(有抖动的现象,一般是launch文件中同时发布了静态和动态关节状态节点,上上面注释有说明)
在 ROS 中,提供了一些工具来方便 URDF 文件的编写,比如:
check_urdf
命令可以检查复杂的 urdf 文件是否存在语法问题
urdf_to_graphiz
命令可以查看 urdf 模型结构,显示不同 link 的层级关系
要使用工具之前,首先需要安装,安装命令: sudo apt install liburdfdom-tools
演示:
vscode中进入urdf文件所属目录,打开终端,
调用:check_urdf urdf文件
如果不抛出异常,说明文件合法,并且可以看见各个link之间的关系
调用: urdf_to_graphiz urdf文件
,当前目录下会生成 pdf 文件 ,再通过 evince pdf文件 即可