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
- 步骤:
-
打开终端,进入你的 ROS 2 工作空间的
src
目录:cd ~/velodyne_ws/src
-
克隆 Velodyne 驱动仓库:
git clone https://github.com/ros-drivers/velodyne.git
-
确认仓库已正确克隆,检查
src/velodyne
目录是否存在:ls
-
2 .编译驱动程序
- 目标: 在 ROS 2 工作空间中编译 Velodyne 驱动程序,确保所有节点和依赖正确生成。
- 步骤:
-
返回工作空间根目录:
cd ~/velodyne_ws
-
安装依赖(确保所有必要依赖已安装):
rosdep install --from-paths src --ignore-src -r -y
注:需要提前配置好
rosdep
,如果未配置,可参考 ROS 2 官方文档初始化rosdep
。 -
编译工作空间:
colcon build
-
编译完成后,加载环境变量:
source install/setup.bash
-
验证编译结果,检查是否生成了必要的节点:
ros2 pkg list | grep velodyne
预期输出应包含
velodyne_driver
、velodyne_pointcloud
等包。
-
注意: 如果编译过程中遇到依赖缺失或错误,请根据错误提示使用
apt
或pip
安装缺失的库,并重新运行colcon build
。
最终正确运行步骤 ✅
硬件与网络配置
- 物理连接: 使用网线将 VLP-16 雷达与电脑连接,并确保雷达已通电。
- 设置电脑静态 IP:
- 进入系统
设置
>网络
>有线连接
>⚙️
>IPv4
。 - 方法设置为
手动
。 - 地址:
192.168.1.100
- 子网掩码:
255.255.255.0
- 网关: 留空
- 点击
应用
并重启有线连接(开关一次)。
- 进入系统
- 断开 WiFi: 为避免网络路由冲突,请暂时关闭电脑的 WiFi 连接。
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
- 设置全局坐标系 (Fixed Frame): 在左侧
Global Options
中,将Fixed Frame
的值修改为velodyne
,然后按回车。 - 添加点云显示 (Add PointCloud 2): 点击左下角
Add
按钮,选择By topic
->/velodyne_points
->PointCloud2
->OK
.
详细问题排查之旅 🕵️♂️
第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
地址。 -
根源定位:
- 通过
find_by_name
和view_file
追踪velodyne-all-nodes-VLP16-launch.py
文件。 - 发现它加载了一个名为
VLP16-velodyne_driver_node-params.yaml
的配置文件。 - 在这个
.yaml
文件中,device_ip
被硬编码为192.168.1.201
。
- 通过
-
最终修复:
- 使用
replace_file_content
工具,直接修改VLP16-velodyne_driver_node-params.yaml
文件,将device_ip
的值改为192.168.1.200
。 - 由于修改了源文件,回到工作空间根目录,运行
colcon build
重新编译,使修改生效。
- 使用
-
成功: 再次启动,所有节点正常工作,RViz 2 成功显示点云!