目录
URDF
1.什么是URDF
2.link与joint标签
3.robot标签
4.建模实例
xacro
1.什么是xacro
2.如何使用xacro
3.常量定义与使用
4.数学计算
5.宏定义
6.文件包含
7.xacro转urdf
URDF(Unified Robot Description Format),统一机器人描述格式,ROS中非常重要的机器人模型描述格式,将真实世界的机器人映射到计算机上。一般使用XML格式来进行表述,ROS对URDF文件的支持非常友好,提供C++解析器,在构建(catkin_make) 项目时完成描述解析。
link官方文档:http://wiki.ros.org/urdf/XML/link
用于描述机器人某个刚体部分的外观和物理属性,可以描述其尺寸(size),颜色(color),形状(shape),关系矩阵(inertial matrix),碰撞参数(collision properties)等
参考格式为:
joint官方文档:http://wiki.ros.org/urdf/XML/joint
参考格式:
上面描述了left_wheel_likn对于base_link的joint转换,类型是continuous,旋转关节,旋转关节多用于滚轮或机器臂等非静态刚体,origin描述了相对于base_link的位姿关系,在y轴(即左方)0.19米,z轴(高度)上下降0.05米 ,axis描述了依照什么轴旋转,这里为y轴,标为1。(根据这一段描述很容易看出这是在描述一个轮子的urdf)。
更多的joint参数有:
参考图形
位于整个urdf的最外层,在其中有一系列与
....
......
....
......
1)创建工作空间以及功能包
$ source /opt/ros/kinetic/setup.bash
$ mkdir -p ~/catkin_ws/src
$ cd ~/catkin_ws/src
$ catkin_init_workspace
$ cd ~/catkin_ws
$ catkin_make
$ cd src
$ catkin_create_pkg mbot_description urdf xarco
2)创建luach启动文件
$ cd mbot_description
$ mkdir launch config urdf
$ cd launch && touch display_mbot_base_urdf.launch
使用use_gui需安装 apt install ros-kinetic-joint-state-publisher-gui,robot_state_publisher发布车体状态
joint_state_publisher发布关节状态
3)创建urdf文件
创建就base_link车体,创建左轮右轮left_wheel_link,right_wheel_link,创建关节信息,特别注意左右轮的物理位置。我们的车体是一个半径为0.2米,高0.16米的圆柱,车轮为半径0.06,高0.025的圆柱,但是他的翻滚角,即r周1.5707即90°,关节joint定义其在和处连接,0 0.19 -0.05,即x轴0方向,y轴(左方)0.19米(车体为0.2,有一部分陷入车体),z轴下方0.05米,这是一个相对合理的位置。
4)启动
$ roslaunch mbot_description display_mbot_base_urdf.launch
可以看到车体与左右轮的样子在rviz上呈现出来,由于我们的节点joint的type类型为 continuous,所以我们可以拖动joint_state_publisher让轮子旋转
5)改造,增加激光雷达,摄像头等设备
通常来说,一个完整的无人驾驶机器人是需要激光雷达,摄像头等视觉设备的,而且注意到上面的小车只有两个轮子,这是不满足转弯条件的,我们需要给他添加一个前置万向轮,接下来我们添上。
添加很简单,在urdf下添加如下结点即可
roslaunch运行
xacro是在urdf的基础上,新增了宏定义与文件包含的功能,提供常量定义,变量定义,数学计算以及程式判断(条件语句)
使用xacro的第一步是在catkin_create_pkg时导入,如 catkin_create_pkg mbot_description urdf xarco。若功能包已创建,则在CMakelist.txt文件找到find_package,并添加
find_package(catkin REQUIRED COMPONENTS
...
xacro
)
在package.xml中添加:
xacro
xacro
常量的定义格式为:
如下定义pi,车半径与长度,左右轮半径与长度
常量的使用也很简单,格式为:${name}
如
xacro同样提供数学运算,所有的xacro要包含在${}中
如(定义前向轮的坐标系信息,在z轴上等于车体高度的一半加上前向轮的半径也就是让前向轮附着在车体前方,因为在z轴下方所以取负):
xacro仅支持加减乘除取余等基础运算
xacro中的宏定义指的是定义一个基础模板,写法同urdf,可任意添加变量从而在调用宏时做动态赋值,不太好理解的话看下面实例。
在下面这段定义中,除开常量定义外,我添加了两个变量${prefix}与${reflect},为什么这么写,请往下看
我们通过调用宏,为prefix和reflect赋值,左轮为left,右轮为right,注意到reflect分别取到了-1和1,这在宏定义中有描述 还有一点要注意的是,我们在调用宏时标签名使用的是宏定义的name,上述为wheel所以使用wheel标签 xacro同样提供文件包含功能,想想看,把一整套urdf写在一个文件中好,还是按照功能单独写,最后组装成一个urdf好。答案当然是后者,这样更加有利于查看与维护。 xacro中的文件包含也非常简单,格式为 xacro文件是不能被直接使用的,需要转urdf,格式为: rosrun xacro xacro.py 文件名.xacro > 文件名.urdf xacro同样也支持在launch文件中动态转换,如:6.文件包含
7.xacro转urdf