0
点赞
收藏
分享

微信扫一扫

从零制作基于ROS的RC车模无人驾驶(十)——车模仿真模型搭建

王传学 2022-05-01 阅读 37

从零制作基于ROS的RC车模无人驾驶(十)——车模仿真模型搭建

参考资料:link.
link
最终模型演示:
在这里插入图片描述

方法选择

其实建立模型的方式有许多种,譬如说:
①通过SW绘制三维图形,再转成URDF文件类型
②直接通过.urdf文件类型,进行模型搭建。
本项目我们采用第二种方法。并非因为作者三维建模基础不行,实在是因为作者身为机械专业学生,三维画的实在是太多,所以想换种方法。

准备工作

创建工作空间并初始化

mkdir -p demo06_ws/src
cd demo06_ws
catkin_make

上述命令,首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。

进入 src 创建 ros 包并添加依赖

cd src
catkin_create_pkg racebot_description roscpp rospy std_msgs urdf xacro

注意:urdf xacro这两个依赖必须要添加,即catkin_create_pkg racebot_description roscpp rospy std_msgs urdf xacro最后两个urdf xacro不可省略!
上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。urdf xacro是进行建立模型必须的依赖。
注意: 在ROS中,虽然实现同一功能时,C++和Python可以互换,但是具体选择哪种语言,需要视需求而定,因为两种语言相较而言:C++运行效率高但是编码效率低,而Python则反之,基于二者互补的特点,ROS设计者分别设计了roscpp与rospy库,前者旨在成为ROS的高性能库,而后者则一般用于对性能无要求的场景,旨在提高开发效率。

在新建立的racebot_description 功能包下建立如下文件夹

在这里插入图片描述
其中,config用来存储rviz文件,launch用来建立并集成启动文件,meshes用来渲染,urdf用来建立模型文件。最后.txt与.xml是建立功能包自动生成的,不用去管,但也别改,暂时我们用不到。

建立URDF模型

配置IDE

博主用的是vs code,可以参考文章首链接一link,下载并配置好即可。配置好的页面如下:
在这里插入图片描述

建立base_link(底盘1)

我们需要创建⼀个URDF⽂件与能让模型在rviz中显⽰的launch⽂件,⽅便我们创造模型。以创建小⻋base_link模型为例:
在urdf⽂件夹中创建urdf与xacro文件夹。在urdf(第二个urdf)文件夹中建立racebot.urdf⽂件,⾸先创建base_link(底盘1),由于根link不能包含碰撞属性,否则gazebo仿真中会报错,所以我们将base_footprint(底盘在地面的投影)作为根link,并且将base_footprint设置为小⻋贴到地⾯的位置,由于该小⻋是1:1仿真的,所以base_link在base_footprint正上⽅70mm处,如下代码所⽰

<?xml version="1.0" encoding="utf-8"?>
<robot name="racebot">
    <link name="base_footprint">
    </link>
    <link name="base_link"><!-- 机器人底盘 -->
        <visual>
            <geometry>
                <!-- 长方体的长宽高 -->
                <box size="0.35 0.17 0.02"/>        
            </geometry>
            <!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14=180度 1.57=90度) -->
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint" type="fixed">
        <parent link="base_footprint" />
        <child link="base_link"/>
        <origin xyz="0 0 0.07" rpy="0 0 0" />
    </joint>
</robot>

***注意:***因为本人用的是ROS noetic所以可以随意使用中文注释,如果读者有使用melodic或者kinetic或者其他,尽量把所有的中文注释去掉,避免报错。
接着在launch⽂件夹中创建⼀个可以将小⻋模型在rviz中显⽰的launch⽂件racebot_rviz.launch,并且能够加载上述urdf⽂件:

<?xml version="1.0" encoding="UTF-8"?>
<launch>
    <!-- 将 urdf 文件内容设置进参数服务器 -->
    <param name="robot_description" textfile="$(find racebot_description)/urdf/urdf/racebot.urdf" />
    <!-- 启动 rivz -->
    <node pkg="rviz" type="rviz" name="rviz_test" /> 
    <!--<node pkg="rviz" type="rviz" name="rviz" args="" /> --> 
    <!-- 添加关节状态发布节点 -->
    <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>

此时我们运⾏该launch⽂件:

roslaunch racebot_description racebot_rviz.launch

在打开的rviz中,坐标系选择base_footprint,add机器人模型。
在这里插入图片描述

建立base_link2(底盘2)

同样的操作,代码如下

<!-- 机器人底盘2 -->
    <link name="base_link2">
        <visual>
            <geometry>
                <!-- 长方体的长宽高 -->
                <box size="0.35 0.17 0.02"/>        
            </geometry>
            <!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14=180度 1.57=90度) -->
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint2" type="fixed">
        <parent link="base_link" />
        <child link="base_link2"/>
        <origin xyz="0 0 0.070" rpy="0 0 0" />
    </joint>

注意上端代码需要添加进之前racebot.urdf文件中,且只能由一个robot标签,具体合成代码如下,即包含base_link与base_link2的racebot.urdf文件如下:

<?xml version="1.0" encoding="utf-8"?>
<robot name="racebot">
    <link name="base_footprint">
    </link>
    <link name="base_link"><!-- 机器人底盘 -->
        <visual>
            <geometry>
                <!-- 长方体的长宽高 -->
                <box size="0.35 0.17 0.02"/>        
            </geometry>
            <!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14=180度 1.57=90度) -->
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint" type="fixed">
        <parent link="base_footprint" />
        <child link="base_link"/>
        <origin xyz="0 0 0.07" rpy="0 0 0" />
    </joint>


    <!-- 机器人底盘2 -->
    <link name="base_link2">
        <visual>
            <geometry>
                <!-- 长方体的长宽高 -->
                <box size="0.35 0.17 0.02"/>        
            </geometry>
            <!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14=180度 1.57=90度) -->
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint2" type="fixed">
        <parent link="base_link" />
        <child link="base_link2"/>
        <origin xyz="0 0 0.070" rpy="0 0 0" />
    </joint>
</robot>

此时我们运⾏该之前的launch⽂件:

roslaunch racebot_description racebot_rviz.launch

rviz依旧选择base_footprint为坐标系,画面如下:
在这里插入图片描述

建立base_link3(支架)

urdf代码:

    <!-- 支架 -->
    <link name="base_link3">
        <visual>
            <geometry>
                <cylinder radius="0.01" length="0.12" />        
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint3" type="fixed">
        <parent link="base_link2" />
        <child link="base_link3"/>
        <origin xyz="-0.125 0 0.055" rpy="0 0 0" />
    </joint>

同样的操作,rviz画面如下:
在这里插入图片描述

添加左前轮以及左前轮摆转

在阿克曼仿真第⼀节的时候了解到要使前轮转向,以左前轮为例,需要给左前轮加⼀个绕Z轴转动的⾃由度,因此需要添加⼀个能够摆转的link,将其命名为steering_hinge,前轮通过与其连接能够实现绕Z轴转动,joint_type设置为revolute,转动幅度设置为-0.6rad–0.6rad,effort与velocity分别设置为50,1000以⽅便后续控制。

    <!-- 添加左前轮摆转 -->
    <link name="left_steering_hinge">
        <visual>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="red">
                <color rgba="1 0 0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision> -->
        <!--<inertial>
            <origin xyz="0 0 0" />
            <mass value="0.5" />
            <inertia ixx="1.35E-05" ixy="0" ixz="0" iyy="1.35E-05" iyz="0" izz="2.5E-05" />
        </inertial> -->
    </link>
    <joint name="left_steering_hinge_joint" type="revolute">
        <parent link="base_link" />
        <child link="left_steering_hinge" />
        <origin xyz="0.175 0.10 0" />
        <axis xyz="0 0 1" />
        <limit lower="-0.601" upper="0.601" effort="5.0" velocity="1000.0"/>
    </joint>
    <!-- 添加左前轮 -->
    <link name="left_front_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>    
    <joint name="left_front_wheel_joint" type="continuous">
        <parent link="left_steering_hinge" />
        <child link="left_front_wheel" />
        <origin xyz="0 0.035 0" /><!--0-->
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>

右前轮同理

    <!-- 添加右前轮以及右前轮摆转 -->
    <link name="right_steering_hinge">
        <visual>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="red">
                <color rgba="1 0 0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision> -->
        <!--<inertial>
            <origin xyz="0 0 0" />
            <mass value="0.5" />
            <inertia ixx="1.35E-05" ixy="0" ixz="0" iyy="1.35E-05" iyz="0" izz="2.5E-05" />
        </inertial> -->
    </link>
    <joint name="right_steering_hinge_joint" type="revolute">
        <parent link="base_link" />
        <child link="right_steering_hinge" />
        <origin xyz="0.175 -0.10 0" />
        <axis xyz="0 0 1" />
        <limit lower="-0.601" upper="0.601" effort="5.0" velocity="1000.0"/>
    </joint>
    <link name="right_front_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>    
    <joint name="right_front_wheel_joint" type="continuous">
        <parent link="right_steering_hinge" />
        <child link="right_front_wheel" />
        <origin xyz="0 -0.035 0" /><!--0-->
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>

值得注意的是需要修改joint标签内的origin标签,可以⼤致理解为左前轮在第⼀象限,右前轮为第四象限,X轴正⽅向为小⻋的前进⽅向。在配置URDF的时候,若仅仅是想要在RVIZ中观察编写的模型情况,可以在link标签中,先不需要编写collision标签,编写collision时需要计算该link的惯性矩阵参数,会较为繁琐,可以在确定模型装配情况后最后编写collision标签。计算惯性矩阵的⽅法如下:
链接: link.
rviz画面如图所示:
在这里插入图片描述

配置后轮

前轮配置完成后,配置后轮,后轮相对简单并不需要摆转,至于为什么,相信大多数人很清楚阿克曼的转动方式,所以并不需要摆转。

    <!--左后轮-->
    <link name="left_rear_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="left_rear_wheel_joint" type="continuous">
        <parent link="base_link" />
        <child link="left_rear_wheel" />
        <origin xyz="-0.175 0.135 0" />
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>
        <!--右后轮-->
    <link name="right_rear_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="right_rear_wheel_joint" type="continuous">
        <parent link="base_link" />
        <child link="right_rear_wheel" />
        <origin xyz="-0.175 -0.135 0" />
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>

rviz画面如下:
在这里插入图片描述

配置传感器

配置深度相机与双线激光雷达与IMU

    <!--深度相机-->
    <link name="real_sense">
        <visual>
            <geometry>
                <box size="0.02 0.09 0.03"/>
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="blue">
                <color rgba="0 0 1.0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.01 0.1 0.02"/>
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="0.05" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="realsense_joint" type="fixed">
        <parent link="base_link" />
        <child link="real_sense" />
        <origin xyz="0.170 0 0.095" />
        <axis xyz="0 0 1" />
    </joint>

    <!--双线激光雷达-->
    <link name="lidar">
        <visual>
            <geometry>
                <cylinder radius="0.0325" length="0.042" />
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="blue">
                <color rgba="0 0 1.0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.03" length="0.06" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="0.1" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="lidar_joint" type="fixed">
        <parent link="base_link" />
        <child link="lidar" />
        <origin xyz="-0.125 0 0.205" />
        <axis xyz="0 0 1" />
    </joint>

    <!--imu model-->
    <link name="imu">
        <visual>
            <geometry>
                <box size="0.04 0.04 0.02"/>
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.01 0.01 0.005"/>
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="0.05" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="imu_joint" type="fixed">
        <parent link="base_link" />
        <child link="imu" />
        <origin xyz="0 0 0.092" />
        <axis xyz="0 0 1" />
    </joint>

所有程序集成

<?xml version="1.0" encoding="utf-8"?>
<robot name="racebot">
    <link name="base_footprint">
    </link>
    <link name="base_link"><!-- 机器人底盘 -->
        <visual>
            <geometry>
                <!-- 长方体的长宽高 -->
                <box size="0.35 0.17 0.02"/>        
            </geometry>
            <!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14=180度 1.57=90度) -->
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint" type="fixed">
        <parent link="base_footprint" />
        <child link="base_link"/>
        <origin xyz="0 0 0.07" rpy="0 0 0" />
    </joint>


    <!-- 机器人底盘2 -->
    <link name="base_link2">
        <visual>
            <geometry>
                <!-- 长方体的长宽高 -->
                <box size="0.35 0.17 0.02"/>        
            </geometry>
            <!-- xyz坐标 rpy翻滚俯仰与偏航角度(3.14=180度 1.57=90度) -->
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint2" type="fixed">
        <parent link="base_link" />
        <child link="base_link2"/>
        <origin xyz="0 0 0.070" rpy="0 0 0" />
    </joint>



    <!-- 支架 -->
    <link name="base_link3">
        <visual>
            <geometry>
                <cylinder radius="0.01" length="0.12" />        
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <!-- 颜色: r=red g=green b=blue a=alpha -->
            <material name="yellow">
                <color rgba="0.8 0.3 0.1 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.28 0.1 0.03" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision> -->
    </link>
    <joint name="base_link_joint3" type="fixed">
        <parent link="base_link2" />
        <child link="base_link3"/>
        <origin xyz="-0.125 0 0.055" rpy="0 0 0" />
    </joint>



    <!-- 添加左前轮摆转 -->
    <link name="left_steering_hinge">
        <visual>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="red">
                <color rgba="1 0 0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision> -->
        <!--<inertial>
            <origin xyz="0 0 0" />
            <mass value="0.5" />
            <inertia ixx="1.35E-05" ixy="0" ixz="0" iyy="1.35E-05" iyz="0" izz="2.5E-05" />
        </inertial> -->
    </link>
    <joint name="left_steering_hinge_joint" type="revolute">
        <parent link="base_link" />
        <child link="left_steering_hinge" />
        <origin xyz="0.175 0.10 0" />
        <axis xyz="0 0 1" />
        <limit lower="-0.601" upper="0.601" effort="5.0" velocity="1000.0"/>
    </joint>
    <!-- 添加左前轮 -->
    <link name="left_front_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>    
    <joint name="left_front_wheel_joint" type="continuous">
        <parent link="left_steering_hinge" />
        <child link="left_front_wheel" />
        <origin xyz="0 0.035 0" /><!--0-->
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>


    <!-- 添加右前轮以及右前轮摆转 -->
    <link name="right_steering_hinge">
        <visual>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="red">
                <color rgba="1 0 0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.01" length="0.005" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision> -->
        <!--<inertial>
            <origin xyz="0 0 0" />
            <mass value="0.5" />
            <inertia ixx="1.35E-05" ixy="0" ixz="0" iyy="1.35E-05" iyz="0" izz="2.5E-05" />
        </inertial> -->
    </link>
    <joint name="right_steering_hinge_joint" type="revolute">
        <parent link="base_link" />
        <child link="right_steering_hinge" />
        <origin xyz="0.175 -0.10 0" />
        <axis xyz="0 0 1" />
        <limit lower="-0.601" upper="0.601" effort="5.0" velocity="1000.0"/>
    </joint>
    <link name="right_front_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>    
    <joint name="right_front_wheel_joint" type="continuous">
        <parent link="right_steering_hinge" />
        <child link="right_front_wheel" />
        <origin xyz="0 -0.035 0" /><!--0-->
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>

    <!--左后轮-->
    <link name="left_rear_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="left_rear_wheel_joint" type="continuous">
        <parent link="base_link" />
        <child link="left_rear_wheel" />
        <origin xyz="-0.175 0.135 0" />
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>


    <!--右后轮-->
    <link name="right_rear_wheel">
        <visual>
            <geometry>
                <cylinder radius="0.065" length="0.062" />
            </geometry>
            <origin xyz="0 0 0" rpy="1.57 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.032" length="0.02" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="1.57 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="2.0" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="right_rear_wheel_joint" type="continuous">
        <parent link="base_link" />
        <child link="right_rear_wheel" />
        <origin xyz="-0.175 -0.135 0" />
        <axis xyz="0 1 0" />
        <limit effort="10" velocity="1000" />
    </joint>

    <!--深度相机-->
    <link name="real_sense">
        <visual>
            <geometry>
                <box size="0.02 0.09 0.03"/>
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="blue">
                <color rgba="0 0 1.0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.01 0.1 0.02"/>
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="0.05" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="realsense_joint" type="fixed">
        <parent link="base_link" />
        <child link="real_sense" />
        <origin xyz="0.170 0 0.095" />
        <axis xyz="0 0 1" />
    </joint>

    <!--双线激光雷达-->
    <link name="lidar">
        <visual>
            <geometry>
                <cylinder radius="0.0325" length="0.042" />
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="blue">
                <color rgba="0 0 1.0 0.5" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <cylinder radius="0.03" length="0.06" />
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="0.1" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="lidar_joint" type="fixed">
        <parent link="base_link" />
        <child link="lidar" />
        <origin xyz="-0.125 0 0.205" />
        <axis xyz="0 0 1" />
    </joint>

    <!--imu model-->
    <link name="imu">
        <visual>
            <geometry>
                <box size="0.04 0.04 0.02"/>
            </geometry>
            <origin xyz="0 0 0" rpy="0 0 0" />
            <material name="black">
                <color rgba="0.0 0.0 0.0 1.0" />
            </material>
        </visual>
        <!--<collision>
            <geometry>
                <box size="0.01 0.01 0.005"/>
            </geometry>
            <origin xyz="0.0 0.0 0.0" rpy="0.0 0.0 0.0" />
        </collision>
        <inertial>
            <origin xyz="0 0 0" />
            <mass value="0.05" />
            <inertia ixx="6.64E-04" ixy="0" ixz="0" iyy="6.64E-04" iyz="0" izz="1.02E-03" />
        </inertial> -->
    </link>

    <joint name="imu_joint" type="fixed">
        <parent link="base_link" />
        <child link="imu" />
        <origin xyz="0 0 0.092" />
        <axis xyz="0 0 1" />
    </joint>
</robot>

测试

roslaunch racebot_description racebot_rviz.launch

画面如下:
在这里插入图片描述

功能包网盘链接

链接:https://pan.baidu.com/s/1kv5791Lcovu2SNxyeQluSA
提取码:2022
下载后直接拖到工作空间下的src目录下即可,注意拖进去后运行如下命令行

cd 工作空间名字
catkin_make

作者的话

最近实在抽不了太多的时间,毕业设计还是很需要大量时间来打磨,忙完了这一阵子,把完整的制作过程发不出来,到时候B站也会同步更新~~~~~~~~
We will part for see you again~~

举报

相关推荐

0 条评论