资讯动态

RS-LiDAR-16激光雷达ROS点云可视化从零搭建与避坑指南

发布时间:2026/9/19 16:36:08 来源:尧图企业网站定制
1. 为什么选择RS-LiDAR-16做ROS点云入门如果你刚接触激光雷达手里正好有一台速腾聚创的RS-LiDAR-16想把它接入ROS环境跑通点云可视化那这篇内容就是为你准备的。RS-LiDAR-16是一款16线机械旋转式三维激光雷达测距范围最远150米水平视场角360度垂直视场角-15度到15度每秒产生约30万个点。这个数据量对于ROS入门来说刚刚好——既不会像32线、64线那样把笔记本CPU吃满又能提供足够密度的三维点云让你理解SLAM、建图、目标检测这些上层应用的基本逻辑。很多人拿到雷达后的第一反应是去翻官方手册但速腾的官方文档偏向驱动参数说明对ROS环境搭建的完整链路讲得不够细。网上搜到的教程又往往跳步严重比如默认你已经装好了ROS、默认你知道工作空间的目录结构、默认你理解launch文件的组织方式。结果就是照着做也跑不起来rviz里要么一片漆黑要么报一堆TF变换错误。我自己第一次搭这套环境时光是让点云在rviz里正常显示就折腾了整整一个下午踩的坑包括但不限于Ubuntu版本和ROS版本不匹配、驱动编译时缺少依赖、launch文件里的参数没改对、rviz的Fixed Frame设置错误。所以这篇内容我会从零开始把每个环节的“为什么”和“怎么做”都讲清楚。不管你是用Ubuntu 20.04配ROS Noetic还是Ubuntu 22.04配ROS 2 Humble核心思路是相通的。我主要以ROS 1 Noetic为例来展开因为RS-LiDAR-16的官方ROS驱动在ROS 1下最成熟社区资料也最丰富。等你把这套流程跑通之后再迁移到ROS 2就是换个编译方式的事。提示如果你还没装ROS推荐用“鱼香ROS一键安装”脚本它能自动处理源配置和依赖问题比手动一步步来省心很多。但装完之后建议还是了解一下ROS的基本概念比如节点、话题、消息类型否则后面出了问题不好排查。2. 环境准备Ubuntu版本、ROS发行版与依赖项的匹配逻辑2.1 Ubuntu和ROS版本的对应关系这是最容易踩的第一个坑。ROS的每个发行版都绑定特定的Ubuntu版本装错了后面全是麻烦。截至我写这篇内容时常见的对应关系是这样的Ubuntu版本ROS 1发行版ROS 2发行版支持状态18.04MelodicDashing已停止维护20.04NoeticFoxyNoetic仍可用Foxy已停止22.04不支持Humble当前主流RS-LiDAR-16的官方ROS驱动在GitHub上主要维护的是ROS 1版本ROS 2版本也有但更新频率低一些。如果你用的是Ubuntu 22.04只能选ROS 2 Humble那驱动的编译方式会和ROS 1有区别后面我会单独说明。如果你还在用Ubuntu 20.04强烈建议直接上ROS Noetic这是ROS 1的最后一个版本也是最稳定的版本。为什么版本匹配这么重要因为ROS底层依赖大量的系统库比如Boost、PCL、OpenCV不同Ubuntu版本自带的库版本不同ROS发行版在发布时就针对特定Ubuntu版本做了兼容性测试。你强行在22.04上装Noetic可能编译能过但运行时会遇到各种诡异的段错误。2.2 安装ROS Noetic的实操路径如果你还没装ROS这里给出两条路。第一条是用官方源手动安装步骤稍微多但可控性强# 添加ROS源 sudo sh -c echo deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main /etc/apt/sources.list.d/ros-latest.list sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt update # 安装完整版ROS sudo apt install ros-noetic-desktop-full # 初始化rosdep sudo rosdep init rosdep update # 配置环境变量 echo source /opt/ros/noetic/setup.bash ~/.bashrc source ~/.bashrc第二条路是用“鱼香ROS一键安装”这个脚本在国内网络环境下确实省事它会自动帮你换源、装依赖、初始化rosdep。但要注意一键安装脚本有时候会帮你装一些你不需要的东西而且如果中途出错排查起来不如手动安装直观。我的建议是第一次装可以用一键脚本快速跑通但之后最好自己手动装一遍把每个步骤都搞清楚。2.3 编译RS-LiDAR-16驱动前必须装的依赖在克隆驱动代码之前先把这些依赖装好否则编译时必然报错sudo apt install -y libpcap-dev libboost-all-dev libeigen3-dev libyaml-cpp-devlibpcap-dev是必须的因为雷达通过网口传数据驱动底层用pcap库抓包。libboost-all-dev和libeigen3-dev是PCL点云库的依赖libyaml-cpp-dev用于解析驱动的YAML配置文件。这几个库缺一个编译就会中断。另外确保你的系统里已经装了PCL。ROS Noetic的desktop-full版本自带PCL 1.10一般不需要单独装。但如果你装的是ros-base精简版就需要手动补上sudo apt install -y libpcl-dev ros-noetic-pcl-ros ros-noetic-pcl-conversions注意有些教程会让你装ros-noetic-velodyne相关的包那是给Velodyne雷达用的RS-LiDAR-16不需要装了反而可能引起话题名冲突。3. 驱动获取与编译从源码到可执行节点的完整链路3.1 创建工作空间并获取驱动源码ROS的编译体系要求所有功能包放在一个工作空间的src目录下。先建好目录结构mkdir -p ~/rslidar_ws/src cd ~/rslidar_ws/src然后从速腾聚创的官方仓库克隆驱动。目前常用的有两个仓库rslidar_sdk和ros_rslidar。rslidar_sdk是新版驱动支持ROS和ROS 2功能更全ros_rslidar是老版只支持ROS 1但胜在简单稳定。我建议用rslidar_sdk因为它的参数配置更灵活而且后续如果要升级到ROS 2不用换驱动。git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git cd rslidar_sdk git submodule init git submodule update这里有个关键点rslidar_sdk依赖几个子模块包括rs_driver底层驱动库和yaml-cpp配置解析。如果你不执行git submodule init和git submodule update编译时会报找不到头文件的错误。这是很多人第一次编译时最容易忽略的步骤。3.2 编译过程中的常见报错与解决思路回到工作空间根目录开始编译cd ~/rslidar_ws catkin_make如果一切顺利几十秒到几分钟就能编译完成。但实际过程中大概率会遇到问题我把常见的几个列出来报错一找不到pcap.hfatal error: pcap.h: No such file or directory原因是没有装libpcap-dev或者装了但头文件路径没被正确引用。解决方法是确认libpcap-dev已安装然后检查CMakeLists.txt里是否有find_package(PCAP REQUIRED)相关的语句。报错二PCL相关符号未定义undefined reference to pcl::PointCloudpcl::PointXYZI::~PointCloud()这通常是因为PCL版本不匹配或者链接顺序有问题。ROS Noetic自带的PCL 1.10一般不会有这个问题如果你手动装过其他版本的PCL需要确保CMakeLists.txt里find_package(PCL REQUIRED)找到的是ROS自带的那个。报错三yaml-cpp版本冲突error: ‘YAML::Node’ has no member named ‘as’这是yaml-cpp 0.5和0.6之间的API差异导致的。ROS Noetic自带的是yaml-cpp 0.6如果你的系统里同时存在0.5版本编译时可能链接到错误的版本。解决方法是检查/usr/include/yaml-cpp和/usr/local/include/yaml-cpp确保只保留一个版本。编译成功后别忘了source一下工作空间的setup文件source ~/rslidar_ws/devel/setup.bash建议把这行也加到~/.bashrc里省得每次开终端都要手动source。3.3 驱动配置文件的关键参数解读rslidar_sdk的配置文件在src/rslidar_sdk/config/config.yaml这个文件决定了驱动怎么连雷达、怎么发数据。几个必须改的参数common: msg_source: 1 # 1表示从在线雷达读取0表示从PCAP包读取 send_packet_ros: false # 是否把原始数据包发到ROS话题 send_point_cloud_ros: true # 是否把解析后的点云发到ROS话题 lidar: - driver: lidar_type: RS16 # 雷达型号RS-LiDAR-16就填RS16 msop_port: 6699 # 雷达数据端口默认6699 difop_port: 7788 # 雷达信息端口默认7788 host_address: 192.168.1.102 # 本机IP要和雷达在同一网段 lidar_address: 192.168.1.200 # 雷达IP默认是这个 ros: ros_frame_id: rslidar # 点云的frame_idrviz里要用到 ros_send_point_cloud_topic: /rslidar_points # 点云话题名msg_source这个参数很关键。如果你手头没有雷达但想先跑通流程可以把它设为0然后指定一个PCAP文件路径驱动会从录制的数据包里解析点云。这对于调试和开发非常方便。host_address要改成你电脑网口的IPlidar_address是雷达的出厂IP。两者必须在同一网段比如都是192.168.1.x。如果你不确定雷达IP是多少可以用速腾提供的上位机软件查看或者用Wireshark抓包看雷达发的数据包源地址。4. 网络配置与雷达连通性验证4.1 有线网口的IP设置RS-LiDAR-16通过百兆以太网传输数据你需要用一根网线把雷达和电脑的网口直连。然后给电脑网口配一个和雷达同网段的静态IP# 查看网口名称通常是enp3s0或eth0 ip link show # 临时设置IP重启后失效 sudo ip addr add 192.168.1.102/24 dev enp3s0 sudo ip link set enp3s0 up如果你想让IP设置永久生效可以通过NetworkManager的图形界面或者修改/etc/netplan/下的配置文件。Ubuntu 20.04默认用netplan配置文件长这样network: version: 2 ethernets: enp3s0: addresses: - 192.168.1.102/24 dhcp4: no改完之后执行sudo netplan apply生效。4.2 用ping和Wireshark确认雷达在线配好IP后先ping一下雷达ping 192.168.1.200如果能通说明物理链路和IP配置没问题。如果ping不通检查网线是否插好、网口指示灯是否亮、防火墙是否挡住了ICMP包。ping通之后进一步确认雷达在发数据。可以用Wireshark抓包过滤条件设为udp.port 6699应该能看到持续不断的数据包。如果看不到可能是雷达没上电、或者雷达的IP和你设的不在同一网段、或者雷达的端口被改了。提示有些电脑的网口默认开启了节能模式会导致丢包。可以用ethtool关掉sudo ethtool -K enp3s0 gro off gso off tso off。这个操作对点云稳定性有肉眼可见的提升。4.3 启动驱动并检查话题网络通了之后启动驱动roslaunch rslidar_sdk start.launch如果一切正常终端会打印出雷达的型号、固件版本、数据包接收状态等信息。然后另开一个终端查看当前有哪些话题rostopic list你应该能看到/rslidar_points这个话题。再用rostopic hz看一下发布频率rostopic hz /rslidar_pointsRS-LiDAR-16的正常发布频率是10Hz也就是每秒10帧点云。如果频率明显偏低或者时断时续说明网络丢包或者CPU处理不过来。还可以用rostopic echo看一下点云消息的头部信息rostopic echo /rslidar_points/header -n 1确认frame_id是rslidar和配置文件里的一致。这个frame_id后面在rviz里会用到。5. Rviz点云可视化从黑屏到正常显示的排查过程5.1 Rviz的基本配置步骤启动rvizrosrun rviz rviz第一次打开rviz界面是空的。需要做几件事第一设置Fixed Frame。在左侧Displays面板顶部把Fixed Frame从默认的map改成rslidar。这一步不做点云不会显示因为rviz找不到参考坐标系。第二添加PointCloud2显示项。点击左下角的Add按钮在By topic标签页里找到/rslidar_points选中后点OK。或者在By display type里选PointCloud2然后手动把Topic设为/rslidar_points。第三调整点云颜色。默认是按强度着色你可以改成按高度Z轴着色这样更能看出三维结构。在PointCloud2的属性里Color Transformer选AxisColorAxis选Z。做完这三步你应该能看到彩色的三维点云了。如果还是黑屏往下看排查步骤。5.2 点云不显示的五个常见原因原因一Fixed Frame设置错误。这是最常见的。rviz的Fixed Frame必须和点云消息的frame_id一致或者存在从Fixed Frame到frame_id的TF变换。如果你设的是map但没有任何节点发布map到rslidar的TFrviz就不知道该把点云画在哪个位置。最简单的做法就是把Fixed Frame直接设成rslidar。原因二话题名不匹配。检查rviz里PointCloud2的Topic是否和rostopic list里看到的一致。有时候驱动发的是/rslidar_points但rviz里默认填的是/velodyne_points那当然显示不出来。原因三点云数据为空。用rostopic echo /rslidar_points -n 1看一下消息里的width字段。如果是0说明驱动没解析到有效点。回到驱动终端看有没有报错检查网络是否丢包。原因四rviz的Global Options里Frame丢失。如果rviz底部状态栏显示“Fixed Frame [rslidar] does not exist”说明没有任何节点发布这个frame。可以在驱动launch文件里确认ros_frame_id参数是否正确设置。原因五显卡驱动问题。rviz依赖OpenGL做渲染如果你的显卡驱动没装好rviz可能能打开但显示异常。这种情况在虚拟机里特别常见。解决方法是装好显卡驱动或者在虚拟机里开启3D加速。5.3 用TF树验证坐标系链路如果你的系统里有多个传感器比如雷达加相机加IMU就需要用TF树来管理坐标系之间的变换关系。查看当前TF树的命令rosrun tf view_frames这会生成一个frames.pdf文件打开后能看到所有坐标系和它们之间的连接关系。如果rslidar这个frame孤立在那里没有任何父节点那在rviz里设Fixed Frame为map时就找不到它。对于单纯的雷达可视化不需要额外的TF发布节点直接把Fixed Frame设成rslidar就行。但如果你要做SLAM建图就需要一个节点来发布map到rslidar的变换通常是里程计节点或者SLAM算法节点来发布。6. 从可视化到建图点云数据的下一步用法6.1 录制和回放点云数据跑通可视化之后你可能会想录一段数据下来慢慢分析。ROS提供了rosbag工具rosbag record /rslidar_points -O lidar_data.bag录完之后可以随时回放rosbag play lidar_data.bag回放的时候rviz照样能显示点云就像雷达还在线一样。这个功能对于调试SLAM算法特别有用因为你不用每次都把雷达带在身边。注意点云数据量很大录一分钟大概几百MB。录之前确认磁盘空间够用并且尽量只录需要的话题不要rosbag record -a把所有话题都录下来。6.2 接入SLAM算法跑建图RS-LiDAR-16跑SLAM的常见方案有几种。轻量级的有lego_loam和aloam这两个对16线雷达支持不错计算量也不算大。功能更全的有lio_sam它融合了激光雷达和IMU建图效果更平滑但配置稍微复杂一些。以lego_loam为例基本流程是先把驱动跑起来确认/rslidar_points话题正常发布然后启动lego_loam的launch文件它会订阅点云话题输出里程计和建图结果最后在rviz里添加/laser_cloud_surround话题的PointCloud2显示就能看到逐步构建的三维地图。这里有一个关键点lego_loam默认订阅的话题名可能是/velodyne_points你需要改成/rslidar_points或者在launch文件里做话题重映射。另外lego_loam对点云的frame_id有要求通常需要是velodyne你可以把驱动的ros_frame_id改成velodyne或者在launch里加一个静态TF变换。6.3 点云预处理降采样和地面分割原始点云数据量很大直接送给SLAM算法会拖慢速度。常见的预处理步骤有两个降采样用体素栅格滤波器VoxelGrid把点云分辨率降低。比如把体素大小设为0.2米原来30万个点可能降到3万个计算量减少一个数量级但地图的宏观结构基本不变。地面分割把地面点和障碍物点分开。地面点对于建图来说信息量低去掉之后能减少干扰。常用的方法是RANSAC平面拟合或者射线地面滤波器。这两个步骤在PCL里都有现成的实现可以写一个ROS节点订阅原始点云处理后发布新的话题然后让SLAM算法订阅处理后的话题。7. 实操中积累的几个经验教训7.1 网口带宽和CPU占用要提前评估RS-LiDAR-16的数据率大约是每秒30万个点每个点包含XYZ坐标和强度信息算下来每秒的数据量在10MB到20MB之间。百兆网口理论带宽是12.5MB/s实际可用带宽大概10MB/s左右所以刚好够用但余量不大。如果你的电脑网口是千兆的那完全没问题。但如果是百兆网口建议确认一下有没有其他程序在占用带宽。CPU方面驱动解析点云是单线程的在i5级别的CPU上大概占用10%到20%的单核性能。如果你同时跑SLAM算法CPU占用会明显上升。建议至少用四核以上的CPU内存8GB起步。7.2 驱动启动顺序有讲究正确的启动顺序是先配好网络、确认雷达在线再启动驱动最后开rviz。如果反过来先开rviz再启动驱动rviz可能因为找不到话题而显示空白需要手动刷新或者重新添加显示项。另外如果你同时跑了多个ROS节点注意话题名不要冲突。比如你之前跑过Velodyne的驱动它可能还在后台发布/velodyne_points虽然不影响RS-LiDAR-16但rviz里可能会混淆。7.3 固件版本和驱动版本的兼容性速腾的雷达固件会不定期更新新固件可能改变了数据包的格式或者端口号。如果你发现驱动能连上雷达但解析不出点云很可能是固件版本和驱动版本不匹配。解决方法是去速腾官网下载对应版本的驱动或者用速腾提供的固件升级工具把雷达固件降到驱动支持的版本。查看雷达固件版本的方法在驱动启动时的终端输出里通常会打印固件版本号或者用Wireshark抓DIFOP包端口7788里面的数据包含有版本信息。7.4 ROS 2 Humble下的差异点如果你用的是ROS 2 Humble驱动的编译方式从catkin_make变成了colcon buildlaunch文件的格式也从XML变成了Python。rslidar_sdk的ROS 2分支已经适配好了这些变化基本流程是mkdir -p ~/rslidar_ws/src cd ~/rslidar_ws/src git clone https://github.com/RoboSense-LiDAR/rslidar_sdk.git -b ros2 cd ~/rslidar_ws colcon build source install/setup.bash ros2 launch rslidar_sdk start.pyrviz在ROS 2里叫rviz2基本操作和ROS 1的rviz一样但界面布局略有不同。话题查看命令从rostopic变成了ros2 topic比如ros2 topic hz /rslidar_points。我在实际使用中发现ROS 2下的驱动稳定性已经和ROS 1差不多了而且ROS 2的实时性和分布式通信能力更强如果你是新项目可以直接上ROS 2 Humble。但如果你需要用到一些只有ROS 1才有的老算法包那就还是用Noetic。7.5 点云可视化时的性能优化rviz显示点云时如果点数太多界面会卡顿。几个优化技巧把PointCloud2的Decay Time设短一点比如1秒这样旧的点云会被自动清除把Size设小一点比如0.01米减少渲染负担如果只是看大致结构可以用rostopic的降采样功能或者写个节点做体素滤波后再发给rviz。另外rviz的渲染帧率可以在Global Options里调默认是30fps调到15fps能明显降低CPU占用肉眼看起来也不会太卡。8. 常见问题速查与后续扩展方向8.1 问题速查表现象可能原因排查方法rviz黑屏无点云Fixed Frame错误改成rslidar话题列表无/rslidar_points驱动未启动或编译失败检查终端报错点云频率低于10Hz网络丢包或CPU过载用Wireshark看丢包率点云形状异常雷达安装角度或标定问题检查雷达是否水平驱动启动后立即退出配置文件参数错误检查YAML格式和端口号ping不通雷达IP不在同一网段检查网口IP和雷达IP8.2 从单雷达扩展到多雷达融合如果你后续要加第二个雷达做盲区补盲思路是给每个雷达配不同的IP和端口在驱动的配置文件里加一个lidar条目然后分别发布到不同的话题。再用一个融合节点订阅两个话题把点云合并后发布到一个新话题。注意两个雷达的frame_id要不同并且要用TF标定它们之间的相对位置。8.3 点云数据的上层应用方向跑通可视化和建图之后RS-LiDAR-16还能做很多事。比如目标检测可以用PointPillars或者CenterPoint这类算法在点云上框出车辆和行人比如语义分割用RangeNet把点云分成地面、道路、建筑物等类别比如定位用NDT或者ICP算法把当前点云和预先建好的地图做匹配得到车辆位姿。这些应用都需要你先有一个稳定的点云输入而这篇内容讲的正是这个基础。我个人在实际操作中的体会是激光雷达的ROS环境搭建本身不难难的是遇到问题时知道去哪里找原因。网络、驱动、rviz这三个环节任何一个出问题都会导致点云显示不出来。按照“先确认网络通、再确认驱动跑、最后确认rviz配置对”的顺序排查基本能解决90%的问题。剩下10%的疑难杂症多半是版本兼容性问题去GitHub的issue区搜一下通常能找到答案。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价