第一次拿到Ouster OS1激光雷达时,包装盒里通常会有这几样东西:雷达主机、电源适配器、以太网线、快速入门指南。我建议先检查配件是否齐全,特别是那个黑色的小接口盒——很多新手会忽略这个关键部件。OS1的机身非常轻巧,只有447克,比一听可乐还轻,但千万别被它的体积欺骗,这玩意儿工作时功耗能达到20W。
硬件连接有两种方式,我强烈建议使用接口盒方案。直接连接雷达的裸露接口虽然理论上可行,但一旦接错线就可能烧毁设备,而且厂家明确表示这种情况不保修。接口盒的使用很简单:用随附的线缆将雷达连接到盒子的左侧接口,右侧的千兆网口接电脑,旁边的DC接口接12V电源。这里有个细节要注意,电源最好用厂家配套的适配器,我试过用第三方电源,偶尔会出现供电不稳导致雷达重启的情况。
时间同步接口对自动驾驶场景特别重要。接口盒侧面有个4针的LEMO接口,引脚定义从上到下分别是:1脚PPS脉冲信号、2脚GND、3脚NMEA数据、4脚12V输出。如果需要多雷达同步,建议使用PTP协议,这个我们后面配置网络时会详细讲。第一次连接时,我建议先用最简单的配置:只接电源和网线,等基础功能调通后再考虑时间同步。
接好硬件后,下一步是让电脑能识别到雷达。OS1默认的IP是192.168.1.64,我们需要把电脑网卡配置到同网段。在Ubuntu下可以这样操作:
bash复制sudo ifconfig eth0 192.168.1.100 netmask 255.255.255.0
如果电脑没有有线网口,用USB转以太网适配器也行,但一定要选千兆的芯片(比如AX88179),百兆网卡传输点云数据会卡顿。我遇到过有人用几十块的廉价适配器,结果点云总是断断续续,换了千兆适配器立刻解决问题。
检测雷达是否在线可以用ping命令:
bash复制ping 192.168.1.64 -c 4
如果通的话,就可以用官方工具查看雷达状态了。先下载最新的Ouster SDK:
bash复制wget https://data.ouster.io/downloads/ouster-cli-linux-x86_64-v2.3.0.tar.gz
tar -xzf ouster-cli-linux-x86_64-v2.3.0.tar.gz
运行下面命令获取雷达信息:
bash复制./ouster-cli/ouster-cli -s 192.168.1.64 get_sensor_info
正常会返回JSON格式的雷达参数,包括序列号、固件版本等。如果这一步失败,建议检查防火墙设置,有时候Ubuntu自带的ufw会阻止UDP通信。
现在进入关键环节——ROS驱动编译。虽然官方文档说支持Kinetic和Melodic,但我实测在Noetic上也能用。首先安装依赖:
bash复制sudo apt-get install build-essential cmake libtclap-dev libeigen3-dev libjsoncpp-dev libcurl4-openssl-dev libglfw3-dev
克隆代码仓库时要注意,一定要加上--recursive参数,否则会缺少子模块:
bash复制git clone --recursive https://github.com/ouster-lidar/ouster_example.git
编译时最容易卡在tclap报错,如果遇到"fatal error: tclap/CmdLine.h: No such file or directory",除了安装libtclap-dev外,还需要确认头文件搜索路径:
bash复制sudo ln -s /usr/include/tclap /usr/local/include/tclap
另一个常见问题是protobuf版本冲突。如果之前安装过其他ROS包带的protobuf,可能会报"protobuf version mismatch"错误。解决办法是指定系统protobuf路径:
bash复制cmake -DProtobuf_PROTOC_EXECUTABLE=/usr/bin/protoc ..
编译成功后,建议先运行单元测试:
bash复制catkin_make run_tests_ouster_client
驱动编译好之后,重点就是配置launch文件了。官方提供的os1.launch有几个关键参数需要理解:
xml复制<param name="os1_hostname" value="192.168.1.64" />
<param name="os1_udp_dest" value="192.168.1.100" />
<param name="lidar_mode" value="1024x10" />
<param name="viz" value="true" />
<param name="image" value="true" />
os1_udp_dest很多人会填错,这个应该是电脑自身的IP,不是雷达的IP。lidar_mode格式是"水平分辨率x频率",比如1024x10表示每圈1024个点、10Hz刷新率。注意OS1-64的最高分辨率是2048x10,超过这个值会报错。
在Rviz中可视化时,建议添加这几个Display:
如果点云显示不正常,首先检查Rviz的Fixed Frame是否设置为os1_lidar。我遇到过点云显示为一条直线的情况,就是因为坐标系设置错误。另外,OS1的点云默认使用sensor_msgs/PointCloud2格式,强度值存储在intensity字段,反射率在reflectivity字段。
对于需要时间同步的场景,launch文件里可以添加:
xml复制<param name="timestamp_mode" value="TIME_FROM_PTP_1588" />
<param name="ptp_profile" value="1588" />
这样点云消息的header.stamp就会使用PTP同步的时间戳。实测下来,使用PTP同步后,多雷达间的时间误差可以控制在微秒级。