Velodyne VLP-16 激光雷达 ROS2 运行与问题排查全记录 (Ubuntu 24.10)

Velodyne VLP-16 激光雷达 ROS2 运行与问题排查全记录 (Ubuntu 24.10)

Ubuntu 24.10 没有看见有前辈配置教程,小辈斗胆试一试😄;

本文档详细记录了在 Ubuntu 24.10 和 ROS2 Jazzy 环境下,成功运行 Velodyne VLP-16 激光雷达并解决一系列连接与配置问题的全过程。
小白建议使用 Cursor 等 AI agent 自动帮你配置完成即可;
然后输出一个运行参数的 markdown文档,方便以后自己直接输出命令;

几个前辈配置雷达的文档:值得看一看
ROS2 下如何使用veloodyne激光雷达
SLAM实操入门(六):连接Velodyne的16线激光雷达并可视化

前期准备:下载与编译 Velodyne ROS2 驱动

1 .下载 Velodyne ROS 2 驱动程序

  • 目标: 获取 Velodyne VLP-16 激光雷达的 ROS 2 驱动程序。
  • 下载地址: GitHub - ros-drivers/velodyne
  • 步骤:
    1. 打开终端,进入你的 ROS 2 工作空间的 src 目录:

      cd ~/velodyne_ws/src
      
    2. 克隆 Velodyne 驱动仓库:

      git clone https://github.com/ros-drivers/velodyne.git
      
    3. 确认仓库已正确克隆,检查 src/velodyne 目录是否存在:

      ls
      

2 .编译驱动程序

  • 目标: 在 ROS 2 工作空间中编译 Velodyne 驱动程序,确保所有节点和依赖正确生成。
  • 步骤:
    1. 返回工作空间根目录:

      cd ~/velodyne_ws
      
    2. 安装依赖(确保所有必要依赖已安装):

      rosdep install --from-paths src --ignore-src -r -y
      

      注:需要提前配置好 rosdep,如果未配置,可参考 ROS 2 官方文档初始化 rosdep

    3. 编译工作空间:

      colcon build
      
    4. 编译完成后,加载环境变量:

      source install/setup.bash
      
    5. 验证编译结果,检查是否生成了必要的节点:

      ros2 pkg list | grep velodyne
      

      预期输出应包含 velodyne_drivervelodyne_pointcloud 等包。

注意: 如果编译过程中遇到依赖缺失或错误,请根据错误提示使用 aptpip 安装缺失的库,并重新运行 colcon build

最终正确运行步骤 ✅

硬件与网络配置

  • 物理连接: 使用网线将 VLP-16 雷达与电脑连接,并确保雷达已通电。
  • 设置电脑静态 IP:
    • 进入系统 设置 > 网络 > 有线连接 > ⚙️ > IPv4
    • 方法设置为 手动
    • 地址: 192.168.1.100
    • 子网掩码: 255.255.255.0
    • 网关: 留空
    • 点击 应用 并重启有线连接(开关一次)。
  • 断开 WiFi: 为避免网络路由冲突,请暂时关闭电脑的 WiFi 连接。
    image.png

2. 启动节点与可视化

终端 A: 启动雷达驱动

# 1. 进入工作空间
cd ~/velodyne_ws

# 2. 加载环境配置文件
source install/setup.bash

# 3. 启动 Launch 文件
ros2 launch velodyne velodyne-all-nodes-VLP16-launch.py

终端 B: 启动 RViz 2

# 1. 进入工作空间
cd ~/velodyne_ws  

# 2. 加载环境配置文件
source install/setup.bash  

# 3. 启动 RViz2
rviz2

3. 配置 RViz 2

  1. 设置全局坐标系 (Fixed Frame): 在左侧 Global Options 中,将 Fixed Frame 的值修改为 velodyne,然后按回车。
  2. 添加点云显示 (Add PointCloud 2): 点击左下角 Add 按钮,选择 By topic -> /velodyne_points -> PointCloud2 -> OK. image.png|500

详细问题排查之旅 🕵️‍♂️

第1阶段: 基础运行错误 -> Package not found

  • 问题: 运行 ros2 run velodyne_driver velodyne_driver_node 提示
    • Package not found
  • 原因: 当前终端没有加载工作空间的环境变量,系统不知道去哪里找这个节点。
  • 解决: 在运行 ROS2 命令前,必须在当前终端执行 source install/setup.bash

第2阶段: RViz2 ,无数据显示 -> Fixed Frame: No tf data. Actual error: Frame [velodyne] does not exist

  • 问题: 启动了驱动和 RViz2,但在 RViz2 中配置好后,依然看不到任何点云。
  • 线索: RViz2 左侧 Global Status 提示黄色警告: Fixed Frame: No tf data. Actual error: Frame [velodyne] does not exist
  • 分析: 这意味着 RViz2 没有收到任何来自 /velodyne_points 话题的数据。
  • 验证: 运行 ros2 topic echo /velodyne_points,发现终端没有任何输出。
  • 结论: 问题根源在于雷达驱动节点没有成功发布点云数据

第3阶段: 锁定网络连接问题

  • 分析: 驱动不工作,最大嫌疑是网络连接中断
  • 验证1 (Ping): 运行 ping 192.168.1.201 (雷达出厂默认IP),结果是 100% packet loss (100%丢包)。这证实了网络不通
  • 排查1 (IP配置): 检查并指导用户将电脑有线网口设置为静态IP 192.168.1.100
  • 排查2 (网络冲突): 即便设置了静态IP,ping 依然失败。通过 ip addr 命令发现,电脑同时连接了有线网和WiFi,可能存在路由冲突。指导用户关闭WiFi
  • 僵局: 即便关闭了WiFi,ping 依然失败。这表明问题比想象的更底层。

第4阶段: 柳暗花明,发现真实IP地址

  • 终极武器 (tcpdump): 当所有常规方法失效后,我们使用网络抓包工具 tcpdump 来监听网口,查看是否有任何来自雷达的数据。

sudo tcpdump -i enp6s0

  • 重大突破: tcpdump 的输出中赫然出现了 IP 192.168.1.200.2368 > ... 的信息。
  • 真相大白: 这台雷达的IP地址不是默认的 192.168.1.201,而是 192.168.1.200

第5阶段: 最后的障碍与根源修复

  • 验证2 (Ping新IP): 运行 ping 192.168.1.200成功了! 0% packet loss

  • 问题复现: 尝试使用 ros2 launch ... device_ip:=192.168.1.200 启动,但通过日志发现驱动节点依然在监听旧的 .201 地址。

  • 根源定位:

    1. 通过 find_by_nameview_file 追踪 velodyne-all-nodes-VLP16-launch.py 文件。
    2. 发现它加载了一个名为 VLP16-velodyne_driver_node-params.yaml 的配置文件。
    3. 在这个 .yaml 文件中,device_ip硬编码192.168.1.201
  • 最终修复:

    1. 使用 replace_file_content 工具,直接修改 VLP16-velodyne_driver_node-params.yaml 文件,将 device_ip 的值改为 192.168.1.200
    2. 由于修改了源文件,回到工作空间根目录,运行 colcon build 重新编译,使修改生效。
  • 成功: 再次启动,所有节点正常工作,RViz 2 成功显示点云!

posted @ 2025-06-15 17:59  边走边唱如诗如理想  阅读(21)  评论(0)    收藏  举报