前言:

最近跟着实验室做多传感器标定的项目,在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仿真环境中传感器升级的核心流程。如有错误,恳请指正!

 

 

Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐