从零制作基于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~~