TurtleBot3仿真单线激光雷达升级为Velodyne VLP-16多线
前言:
最近跟着实验室做多传感器标定的项目,在ros平台上使用turtlebot3的开源仿真包,并同时跑ORB_SLAM2和A-LOAM算法。由于A-LOAM算法是3D激光雷达算法,而turtlebot3包原来的激光雷达是单线的,仅支持2D激光雷达算法,因此我们将turtlebot3仿真包的单线激光雷达替换成Velodyne VLP-16多线激光雷达。
原理:
原始激光雷达是单线的激光雷达,消息格式为sensor_msgs/LaserScan,话题为/scan话题。Velodyne VLP-16 为16线激光雷达,消息格式为sensor_msgs/PointCloud2,为/velodyne_points话题。我们需要修改urdf文件和gazebo插件文件,使最终rviz可视化的2D点变为雷达点,就表示激光雷达替换成功。
实现:
(1)安装velodyne_description包
# 1. 备份原有源列表
sudo cp /etc/apt/sources.list.d/ros-latest.list /etc/apt/sources.list.d/ros-latest.list.bak
# 2. 切换为清华镜像源
sudo sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 3. 更新软件包索引
sudo apt-get update
# 4. 重新尝试安装
sudo apt-get install ros-noetic-velodyne-description ros-noetic-velodyne-gazebo-plugins
按照以上步骤就可以顺利安装velodyne_description包。
(2)修改URDF文件
因为我们使用的机器人模型为waffle模型,需要定位到turtlebot3_waffle.urdf.xacro文件。首先,需要在该urdf文件中导入velodyne_description包。
<!-- 添加在文件开头,其他xacro包含之后 -->
<xacro:include filename="$(find velodyne_description)/urdf/VLP-16.urdf.xacro" />
在导入velodyne_description包后,我们需要在该文件中删除原有激光雷达,其余的模型部分保持不变。在合适的位置(比如原来激光雷达的位置附近)添加Velodyne模型:
<!-- 注释或删除 scan_joint 和 base_scan -->
<!-- <joint name="scan_joint"> ... </joint> -->
<!-- <link name="base_scan"> ... </link> -->
<!-- 添加Velodyne VLP-16 -->
<xacro:VLP-16
parent="base_link"
name="velodyne"
topic="/velodyne_points"
hz="10"
samples="440"
gpu="false"
>
<origin xyz="-0.064 0 0.15" rpy="0 0 0" />
</xacro:VLP-16>
<!-- 其他部分(车轮、IMU、相机等)保持不变 -->
此时urdf文件就修改好了,于是机器人模型的原始激光雷达模型被替换成多线激光雷达模型了
(3)修改Gazebo插件
这一部分比较简单,只需要将原来的gazebo插件替换成Velodyne VLP-16 的gazebo插件,其余的插件部分保持不变。首先,定位到turtlebot3_waffle.gazebo.xacro文件,修改插件模型:
<!-- 删除原有的 LDS 激光雷达 Gazebo 插件 -->
<!-- <gazebo reference="base_scan"> ... </gazebo> -->
<!-- 添加 Velodyne VLP-16 Gazebo 插件 -->
<gazebo>
<plugin name="velodyne_controller" filename="libgazebo_ros_velodyne_laser.so">
<topicName>/velodyne_points</topicName>
<frameName>velodyne</frameName>
<min_range>0.4</min_range>
<max_range>100.0</max_range>
<gaussianNoise>0.005</gaussianNoise>
<updateRate>10</updateRate>
</plugin>
</gazebo>
效果:
当我们按照以上的步骤进行修改之后,需要使用编译指令进行编译。再次启动turtlbot3仿真,使用rostopic指令查看现有话题,可以看到,原有的/scan话题变成了/velodyne话题。
检查话题数据:
# 查看话题列表,确认存在 /velodyne_points
rostopic list | grep velodyne
# 查看点云消息结构(应显示 sensor_msgs/PointCloud2)
rostopic type /velodyne_points
效果如下图所示:

接下来就可以启动rviz进行可视化验证,就可以发现2D点已变成了3D点云。但需要注意的是需要将Fixed Frame 中设置为velodyne,并且在rviz中添加PointCloud2并选择/velodyne话题。
启动rviz:
rosrun rviz rviz
效果如下图所示:

结语:
通过本次TurtleBot3仿真环境中激光雷达的升级实践,我们成功将单线雷达替换为Velodyne VLP-16多线雷达,实现了从2D到3D感知的跨越。这一过程不仅涉及URDF模型的修改、Gazebo插件的适配,还包括话题重映射和RVIZ可视化调试,完整展现了ROS仿真环境中传感器升级的核心流程。如有错误,恳请指正!
更多推荐



所有评论(0)