xcaro机器人模型优点
1.精简模型代码
创建宏定义
文件包含
2.提供可编程接口
常量
变量
数学计算
条件语句
常量定义:
<xacro:property name="M_PI/" value="3.14159"/>
常量使用:
<origin xyz="0 0 0" rpy="${M_PI/2} 0 0"/>
数学计算:
<origin xyz="0 ${(motor_length+wheel_length)/2} 0" rpy="0 0 0"/>
注意:所有数学运算都会转换成浮点数进行,以保证运算精度
URDF模型优化–宏定义
宏定义:
<xacro:macro name="name" params="A B C">
......
</xacro:macro>
宏调用:
<name A="A_value" B="B_value" C="C_value" />
文件包含
<xacro:include filename="$(find mbot_description)/urdf/xacro/mbot_base.xacro" />
<xacro:include filename="(find mbot_description) /urdf/xacro/sensors/camera.xacro" />
新建launch文件
vim Yarbotix_mbot_with_camera_xacro.launch
<launch>
<arg name="model" default="$(find xacro)/xacro --inorder '$(find mbot_description)/urdf/xacro/Ymbot_with_camera.xacro'" />
<arg name="gui" default="false" />
<param name="robot_description" command="$(arg model)" />
<!-- 设置GUI参数,显示关节控制插件 -->
<param name="use_gui" value="$(arg gui)"/>
<node name="arbotix" pkg="arbotix_python" type="arbotix_driver" output="screen">
<rosparam file="$(find mbot_description)/config/fake_mbot_arbotix.yaml" command="load" />
<param name="sim" value="true"/>
</node>
<!-- 运行joint_state_publisher节点,发布机器人的关节状态 -->
<node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" />
<!-- 运行robot_state_publisher节点,发布tf -->
<node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher" />
<!-- 运行rviz可视化界面 -->
<node name="rviz" pkg="rviz" type="rviz" args="-d $(find mbot_description)/config/mbot_arbotix.rviz" required="true" />
</launch>
新建Ymbot_with_camera.xacro
<?xml version="1.0"?>
<robot name="arm" xmlns:xacro="http://www.ros.org/wiki/xacro">
<xacro:include filename="$(find mbot_description)/urdf/xacro/Ymbot_base.xacro" />
<xacro:include filename="$(find mbot_description)/urdf/xacro/sensors/camera.xacro" />
<xacro:property name="camera_offset_x" value="0.17" />
<xacro:property name="camera_offset_y" value="0" />
<xacro:property name="camera_offset_z" value="0.0775" />
<xacro:include filename="$(find mbot_description)/urdf/xacro/sensors/lidar.xacro" />
<xacro:property name="lidar_offset_x" value=