O(∩_∩)O哈哈哈~ 特想放张伟!我是什么颜色???
文章目录
参考功能包链接
https://github.com/XFFer/ROS_Resource
1. 优化物理仿真模型
使用xacro文件优化URDF模型
连载(四) 中我们使用URDF建模遇到了很多问题,比如多个轮子需要重复书写代码;不能进行参数计算,各个link的位置需要逐个输入参数。
URDF模型的进化版本——xacro模型文件
- 精简模型代码
- 创建宏定义
- 文件包含
- 提供可编程接口
- 常量
- 变量
- 数学计算
- 条件语句
- …
① 常量的定义与使用
常量定义
<xacro:property name="M_PI" value="3.14159" />
举例:
<!-- PROPERTY LIST -->
<xacro:property name="M_PI" value="3.1415926" />
<xacro:property name="base_radius" value="0.20" />
<xacro:property name="base_length" value="0.16" />
<xacro:property name="wheel_radius" value="0.06" />
<xacro:property name="wheel_length" value="0.025" />
<xacro:property name="wheel_joint_y" value="0.19" />
<xacro:property name="wheel_joint_z" value="0.05" />
<xacro:property name="caster_radius" value="0.015" />
<xacro:property name="caster_joint_x" value="0.18" />
常量使用
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
举例:
<joint name="base_footprint_joint" type="fixed">
<origin xyz="0 0 ${base_length/2 + caster_radius*2}" rpy="0 0 0" />
<parent link="base_footprint" />
<child link="base_link" />
</joint>
<link name="base_link">
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<cylinder length="${base_length}" radius="${base_radius}" />
</geometry>
<material name="yellow" />
</visual>
</link>
② 数学计算
所有数学运算都会转换成浮点数进行,以保证运算精度。
<origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0" />
举例:
<joint name="base_footprint_joint" type="fixed">
<origin xyz="0 0 ${base_length/2 + caster_radius*2}" rpy="0 0 0" />
<parent link="base_footprint" />
<child link="base_link" />
</joint>
③ 宏
宏定义
类似于函数,可以实现创建一个轮子的模型,通过再次调用修改参数,创建相同形状,多个轮子模型。
<xacro:macro name="name" params="A B C">
......
</xacro:macro>
举例:
<!--Macro for robot wheel-->
<xacro:macro name="wheel" param="prefix reflect">
<joint name="${prefix}_wheel_joint" type="continuous">
<origin xyz="0 ${reflect*wheel_joint_y} ${-wheel_joint_z}" rpy="0 0 0" />
<parent link="base_link" />
<child link="${prefix}_wheel_link" />
<axis xyz="0 1 0" />
</joint>
<link name="${prefix}_wheel_link">
<visual>
<origin