简介

在前面小车底盘基础之上,添加摄像头和雷达传感器。

基本流程

编写摄像头和雷达的 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>

摄像头效果展示

Snipaste_2023-01-29_10-23-24.png

雷达代码实现

<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>

雷达效果展示

Snipaste_2023-01-29_10-53-31.png

组合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>
最后修改:2023 年 11 月 10 日
如果觉得我的文章对你有用,请随意赞赏