简介
在前面小车底盘基础之上,添加摄像头和雷达传感器。
基本流程
编写摄像头和雷达的 xacro 文件
编写一个组合文件,组合底盘、摄像头与雷达
通过 launch 文件启动 Rviz 并显示模型
实操过程
摄像头代码实现
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<xacro:property name="camera_length" value="0.01"/>
<xacro:property name="camera_width" value="0.025"/>
<xacro:property name="camera_height" value="0.025"/>
<xacro:property name="joint_camera_x" value="0.08"/>
<xacro:property name="joint_camera_y" value="0"/>
<xacro:property name="joint_camera_z" value="${base_link_length/2+camera_length/2}"/>
<link name="camera">
<visual>
<geometry>
<box size="${camera_length} ${camera_width} ${camera_height} "/>
</geometry>
<origin xyz="0 0 0" rpy="0 0 0"/>
<material name="black"/>
</visual>
</link>
<joint name="camera2baselink" type="fixed">
<parent link="base_link"/>
<child link="camera"/>
<origin xyz="${joint_camera_x} ${joint_camera_y} ${joint_camera_z}"/>
</joint>
</robot>
摄像头效果展示
雷达代码实现
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<xacro:property name="support_length" value="0.15"/>
<xacro:property name="support_radius" value="0.01"/>
<xacro:property name="joint_support_x" value="0.0"/>
<xacro:property name="joint_support_y" value="0"/>
<xacro:property name="joint_support_z" value="${base_link_length/2+support_length/2}"/>
<xacro:property name="lidar_radius" value="0.05"/>
<xacro:property name="lidar_length" value="0.03"/>
<xacro:property name="joint_lidar_x" value="0.0"/>
<xacro:property name="joint_lidar_y" value="0"/>
<xacro:property name="joint_lidar_z" value="${lidar_length/2+support_length/2}"/>
<link name="support">
<visual>
<geometry>
<cylinder radius="${support_radius}" length="${support_length}" />
</geometry>
<origin xyz="0 0 0" rpy="0 0 0"/>
<material name="green" >
<color rgba="0.2 0.8 0 0.8"/>
</material>
</visual>
</link>
<joint name="support2baselink " type="fixed">
<parent link="base_link"/>
<child link="support"/>
<origin xyz="${joint_support_x} ${joint_support_y} ${joint_support_z}"/>
</joint>
<link name="lidar">
<visual>
<geometry>
<cylinder radius="${lidar_radius}" length="${lidar_length}" />
</geometry>
<origin xyz="0 0 0" rpy="0 0 0"/>
<material name="red" >
<color rgba="0.8 0.2 0 0.8"/>
</material>
</visual>
</link>
<joint name="lidar2baselink" type="fixed">
<parent link="support"/>
<child link="lidar"/>
<origin xyz="${joint_lidar_x} ${joint_lidar_y} ${joint_lidar_z}"/>
</joint>
</robot>
雷达效果展示
组合xacro代码实现
<robot name="mycar" xmlns:xacro="http://wiki.ros.org/xacro">
<xacro:include filename="urdf_demo01_test.urdf.xacro"/>
<xacro:include filename="urdf_demo01_camera.urdf.xacro"/>
<xacro:include filename="urdf_demo01_lidar.urdf.xacro"/>
</robot>
launch文件代码实现
ps:xacro格式launch文件不再使用textfile改为command
<launch>
<param name="robot_description" command="$(find xacro)/xacro $(find urdf_demo01)/urdf/xacro/car.urdf.xacro" />
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find urdf_demo01)/config/show_mycar_test.rviz" />
<!--
只有上述两句语句:
表现:设置头显示位置与颜色异常
提示:No transform from [camera] to [base_link] 缺少camera到base_link的坐标关系转换
原因:rviz中显示URDF时,必须发布不同部件之间 坐标系 关系
解决:ROS中提供了关于机器人模型显示的坐标发布相关节点(两个)
-->
<!-- 添加关节状态发布节点 -->
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
<!-- 添加机器人状态发布节点 -->
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
<!-- 可选:用于控制关节运动的节点 -->
<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher_gui" />
</launch>