理解不深,先能用,再会用
一、理论
(1)URDF
URDF文件用代码写一个机器人描述,其中包括各个零件及关系,比如有啥零件,都怎么动的。
URDF文件编写遵循XML格式
<label>开启标签,</label>结束标签,单行在句尾加 /
urdf描述中包括{link连杆组件}和{joint关节}标签,俩东西组成了robot本体,并且两者还有很多细分的描述,参考下图。
(2)Xacro(XML Macros)
简单的机器人对于URDF几行代码就可以描述出来,有几根杆,怎么动的,什么属性,很轻松。
如果复杂的机器人模型就很吃力了,并且存在很多重复的代码,对编写很不友好
这就是Xacro出现的原因
Xacro同样遵循XML格式,通过使用属性标签<property>与创建宏macro,实现模块化,可重用性,并且支持简单的数学运算,提高编写效率
三要素(掌握这仨,其他对照现成代码照葫芦画瓢)
1-robot起始标签及指定命名空间
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<!--和URDF一样,需要robot标签-->
<!--定义机器人名字 后面指定了命名空间,空间名为xacro-->
2-属性标签使用
<xacro:property name="param" value="1314" />
<!--property属性的声明-->
<!--在命名空间xacro下 使用property标签 参数名是param 属性值是1314-->
<sphere radius="${param}" />
<!--proterty属性的调用-->
<!--球型形状sphere 半径参数radius-->
<!--调用前面声明参数param,用${}包起来即调用 属性值1314传入-->
3-宏定义
<xacro:macro name="macro_name" params="macro_param" >
<!--宏定义 名字macro_name 接受参数macro_param (类似函数输入)-->
<xacro:macro_name macro_param="520" />
<!--宏调用 调用刚才定义的宏macro 输入参数520-->
二、实践
(1)URDF实现
1
创建工作空间与功能包并编译
cd ~/桌面
mkdir -p jixiebi_ws/src
cd jixiebi_ws/src
catkin_create_pkg jixiebi urdf xacro
cd jixiebi
mkdir urdf
mkdir launch
cd ~/桌面/jixiebi_ws
catkin_make
source ~/桌面/jixiebi_ws/devel/setup.bash
2
编写urdf文件
cd ~/桌面/jixiebi_ws/src/jixiebi/urdf
gedit first.urdf
复制下面代码,保存退出
<robot name="mycar">
<link name="base_link">
<visual>
<geometry>
<box size="0.5 0.2 0.1" />
</geometry>
</visual>
</link>
</robot>
3
编写launch文件,并通过rviz显示
cd ~/桌面/jixiebi_ws/src/jixiebi/launch
gedit first.launch
复制下面代码保存退出
<launch>
<!-- 设置参数 -->
<param name="robot_description" textfile="$(find jixiebi)/urdf/first.urdf" />
<!-- 启动 rviz -->
<node pkg="rviz" type="rviz" name="rviz" />
</launch>
4
重新编译工作空间
cd ~/桌面/jixiebi_ws
catkin_make
source devel/setup.bash
5
运行
cd ~/桌面/jixiebi_ws
source devel/setup.bash
roslaunch jixiebi first.launch
6
在rviz中添加RobotModel可视化,改Fixed Frame为base_link,即可看到urdf所描述的模型
(2)Xacro实现
1
编写Xacro文件
cd ~/桌面/jixiebi_ws/src/jixiebi/urdf
gedit one.xacro
复制代码
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<!--属性声明-->
<xacro:property name="length" value="0.5" />
<xacro:property name="width" value="0.2" />
<xacro:property name="hight" value="0.1" />
<!--宏定义-->
<xacro:macro name="macro_name" params="macro_param">
<link name="${macro_param}">
<visual>
<geometry>
<!--属性调用-->
<box size="${length} ${width} ${hight}" />
</geometry>
</visual>
</link>
</xacro:macro>
<!--宏调用-->
<xacro:macro_name macro_param="base_link" />
</robot>
2
编写launch文件
cd ~/桌面/jixiebi_ws/src/jixiebi/launch
gedit one.launch
复制代码
<launch>
<param name="robot_description" textfile="$(find jixiebi)/urdf/one.urdf" />
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find jixiebi)/config/rviz/first.rviz" />
</launch>
3
重新编译工作空间
cd ~/桌面/jixiebi_ws
catkin_make
source devel/setup.bash
4
转化.xacro文件为.urdf文件,这时会发现urdf文件夹下多了one.urdf,同时one.xacro依然存在
我们需要运行urdf,正如开始所说,Xacro只是便于我们编写代码
cd ~/桌面/jixiebi_ws/src/jixiebi/urdf
rosrun xacro xacro one.xacro > one.urdf
打开one.urdf,发现如下
5
运行
cd ~/桌面/jixiebi_ws
source devel/setup.bash
roslaunch jixiebi one.launch
结果如下