机器人模型由多个部件组成,可以将不同组建设置进单独文件,最终通过文件包含实现组建的拼装。
一、编写摄像头和雷达的xacro文件
二、组合文件
编写一个组合文件,组合底盘、摄像头和雷达
三、启动
搭建框架,创建三个文件
摄像头文件、雷达文件、组合文件
一、在xacro文件夹中创建文件:
demo06_car_camera.urdf.xacro
demo07_car_laser.urdf.xacro
集成文件car.urdf.xacro
launch 文件car.launch
二、car.urdf.xacro文件编写
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<!-- 此集成文件中 包含底盘、摄像头、雷达的 xacro文件 -->
<xacro:inlude filename="demo05_car_base.urdf.xacro">
<xacro:inlude filename="demo06_car_camera.urdf.xacro">
<xacro:inlude filename="demo07_car_laser.urdf.xacro">
</robot>
三、编写launch文件
<launch>
<!-- 1、在参数服务器载入 urdf文件 -->
<!-- <param name="robot_description" textfile="$(find urdf01_rviz)/urdf/xacro/demo05_car_base.urdf" /> -->
<param name="robot_description" command="$(find xacro)/xacro $(find urdf01_rviz)/urdf/xacro/car.urdf.xacro" />
<!--2、启动 riviz -->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf01_rviz)/config/show_mycar.rviz" />
<!-- 3、添加关节状态发布节点 -->
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher"/>
<!-- 4、添加机器人状态发布节点 -->
<node pkg="robot_state_ publisher" type="robot_state_publisher" name="robot_state_publisher" />
<!-- 5、关节运动控制节点 -->
<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
</launch>
四、demo06_car_camera.urdf.xacro文件编写
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<!-- 摄像头 -->
<!-- 1、参数 -->
<!-- 参数:连杆属性: 厚度、宽度、高度
关节属性:X Y Z
-->
<xacro:property name="camera_length" value="0.02"/><!-- 厚度(x) -->
<xacro:property name="camera_width" value="0.05"/><!-- 宽度(y) -->
<xacro:property name="camera_height" value="0.05"/><!-- 高度(z) -->
<xacro:property name="joint_camera_x" value="0.08"/><!-- 厚度(x) -->
<xacro:property name="joint_camera_y" value="0"/><!-- 厚度(x) -->
<xacro:property name="joint_camera_z" value="${base_length /2 + camera_height /2}"/><!-- 厚度(x) -->
<!-- 2、设计连杆和关节 -->
<link name = "camera">
<visual>
<geometry>
<box size="${camera_length} ${camera_width} ${camera_height}"/>
</geometry>
<material name= "black">
<color rgba="0 0 0 0.8"/>
</material>
</visual>
</link>
<joint name="camera2base" type="fixed">
<parent link="base_link"/>
<child link="camera"/>
<origin xyz="${joint_camera_x} ${joint_camera_y} ${joint_camera_z}" rpy="0 0 0"/>
</joint>
</robot>
source ./devel/setup.bash
roslaunch urdfo1_rviz car.launch
结果
五、demo07_car_laser.urdf.xacro文件编写
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<!-- 雷达部件 -->
<!-- 参数:
1、支架
支架半径
支架高度
关节偏移量: x y z
2、雷达
雷达半径
雷达高度
关节偏移量:x y z
-->
<xacro:property name="support_radius" value="0.01"/>
<xacro:property name="support_length" value="0.15"/>
<xacro:property name="laser_radius" value="0.03"/>
<xacro:property name="laser_length" value="0.05"/>
<xacro:property name="joint_support_x" value="0"/>
<xacro:property name="joint_support_y" value="0"/>
<xacro:property name="joint_support_z" value="${base_length /2+ support_length /2}"/>
<xacro:property name="joint_laser_x" value="0"/>
<xacro:property name="joint_laser_y" value="0"/>
<xacro:property name="joint_laser_z" value="${support_length/2+ laser_length/2}"/>
<!-- 1、支架 -->
<link name="support">
<visual>
<geometry>
<cylinder radius="${support_radius}" length="${support_length}"/>
</geometry>
<material name="yellow">
<color rgba="0.8 0.5 0.0 0.5"/>
</material>
</visual>
</link>
<joint name="support2base" type="fixed">
<parent link="base_link"/>
<child link="support"/>
<origin xyz="${joint_support_x} ${joint_support_y} ${joint_support_z}" rpy="0 0 0"/>
</joint>
<!-- 2、雷达 -->
<link name="laser">
<visual>
<geometry>
<cylinder radius="${laser_radius}" length="${laser_length}"/>
</geometry>
<material name="black">
<color rgba="0 0 0 0.5"/>
</material>
</visual>
</link>
<joint name="laser2support" type="fixed">
<parent link="support"/>
<child link="laser"/>
<origin xyz="${joint_laser_x} ${joint_laser_y} ${joint_laser_z}" rpy="0 0 0"/>
</joint>
</robot>
source ./devel/setup.bash
roslaunch urdfo1_rviz car.launch
结果