笔记本ubuntu20
0 硬件链接
激光雷达和电脑接在一起
电脑静态IP 192.168.1.50 子网掩码 255.255.255.0


使用的激光雷达ID
查看位置

实际的serial numbel
3GGDJ770010109
1. 准备工作
官网虽说ros支持ubuntu18和16,但是ubuntu20也可以直接用。
1-1 Livox SDK 依赖于 cmake 。你可以通过 apt 工具安装这些依赖包 :
sudo apt install cmake
先要确保ROS和Livox-SDK安装成功!安装过程可参考:
1-2 ROS安装:https://blog.csdn.net/weixin_43994864/article/details/119703293
1-3 Livox-SDK安装:https://blog.csdn.net/weixin_43994864/article/details/119703681
# 安装Livox_SDK git clone https://github.com/Livox-SDK/Livox-SDK.git cd Livox-SDK sudo ./third_party/apr/apr_build.sh cd build && cmake .. make sudo make install

2. 下载ws_livox文件
# 安装livox_ros_driver git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src cd ws_livox catkin_make
下载速度如果很慢,可手动下载解压,下载地址:https://github.com/Livox-SDK/livox_ros_driver

3 运行测试
文档说明

| launch 文件名 | 功能 | | ------------------------- | ------------------------------------------------------------ | | livox_lidar_rviz.launch | 连接览沃雷达设备<br>向外发布 pointcloud2 格式的点云数据<br>自动加载rviz | | livox_hub_rviz.launch | 连接览沃中心板设备<br>向外发布 pointcloud2 格式的点云数据<br>自动加载rviz | | livox_lidar.launch | 连接览沃雷达设备<br>向外发布 pointcloud2 格式的点云数据 | | livox_hub.launch | 连接览沃中心板设备<br>向外发布 pointcloud2 格式的点云数据 | | livox_lidar_msg.launch | 连接览沃雷达设备<br>向外发布览沃自定义点云数据 | | livox_hub_msg.launch | 连接览沃中心板设备<br/>向外发布览沃自定义点云数据 | | lvx_to_rosbag.launch | 转换 lvx 文件为 rosbag 文件<br>直接将 lvx 文件转换为 rosbag 文件 | | lvx_to_rosbag_rviz.launch | 转换 lvx 文件为 rosbag 文件<br>从 lvx 文件中读取点云数据,并转换为 pointcloud2 格式向外发布 |
运行采集ROS节点

频率可能修改
| 参数名 | 详细说明 | 默认值 | | ------------ | ------------------------------------------------------------ | ------ | | publish_freq | 设置点云发布频率 <br>浮点数据类型,推荐值 5.0,10.0,20.0,50.0 等。 | 10.0 | | multi_topic | LiDAR 设备是否拥有独立的 topic 发布点云数据<br>0 -- 所有 LiDAR 设备共同使用同一个 topic 发送点云数据<br>1 -- 每个 LiDAR 设备各自拥有独立的 topic 发布点云数据 | 0 | | xfer_format | 设置点云格式<br>0 -- 览沃 pointcloud2(PointXYZRTL) 点云格式<br>1 -- 览沃自定义点云数据格式<br>2 -- PCL库中标准 pointcloud2(pcl::PointXYZI) 点云格式 | 0 |
配置文件
livox_lidar_rviz.launch
脚本参数说明
livox_lidar_config.json
1 默认不用改
2 enable_connect 参数
LiDAR 配置参数说明 | 属性 | 类型 | 描述 | 默认值 | | :------------------------- | ------ | ------------------------------------------------------------ | --------------- | | broadcast_code | 字符串 | LiDAR 广播码,15位字符,由14位字符长度序列号加一个字符长度附加码组成 | 0TFDG3B006H2Z11 | | enable_connect | 布尔值 | 是否连接此 LiDAR<br>true -- 连接此 LiDAR<br>false -- 禁止连接此 LiDAR | false | | return_mode | 整型 | 回波模式<br>0 -- 第一个回波模式<br>1 -- 最强回波模式<br>2 -- 双回波模式 | 0 | | coordinate | 整型 | 原始点云数据的坐标轴类型<br>0 -- 直角坐标系<br>1 -- 球坐标系 | 0 | | imu_rate | 整型 | IMU 传感器数据的推送频率<br>0 -- 关闭 IMU 传感器数据推送<br>1 -- 以 200Hz 频率推送 IMU 传感器数据<br>其他值 -- 未定义,会导致不可预测的行为发生<br>目前只有 Horizon/Tele 支持此选项,MID 序列不支持 | 0 | | extrinsic_parameter_source | 整型 | 是否使能外参自动补偿<br>0 -- 不补偿 LiDAR 外参<br>1 -- 自动补偿 LiDAR 外参<br> | 0 |
{
"lidar_config": [
{
"broadcast_code": "3GGDJ7700101091",
"enable_connect": false,
"return_mode": 0,
"coordinate": 0,
"imu_rate": 1,
"extrinsic_parameter_source": 0,
"enable_high_sensitivity": false
},
{
"broadcast_code": "0TFDG3U99101431",
"enable_connect": false,
"return_mode": 0,
"coordinate": 0,
"imu_rate": 0,
"extrinsic_parameter_source": 0,
"enable_high_sensitivity": false
}
],
"timesync_config": {
"enable_timesync": false,
"device_name": "/dev/ttyUSB0",
"comm_device_type": 0,
"baudrate_index": 2,
"parity_index": 0
}
}
脚本自己写的 ,在后面



列出所有运行的节点
rosnode list

列出所有正在发布或接收的话题
rostopic list

查看某个话题的消息类型/格式
rostopic type /livox/lidar

查看话题中的消息类型/格式内容
rosmsg show sensor_msgs/PointCloud2

显示话题发布的消息
rostopic echo /livox/lidar

查看某个消息的发布者(Publishers)、订阅者(Subscribers)、消息类型/格式(Type)
rostopic info /livox/lidar
https://livox-wiki-cn.readthedocs.io/zh_CN/latest/tutorials/single_lidar_capture.html#ros

开启录制bag文件之前,未来了后续和相机图像对齐,要考一个时间戳问题
时间戳由雷达时间戳变为电脑ros时间戳
参看5-1中的修改。
运行脚本
修改自己的source路径
#!/bin/sh #延迟1秒执行 sleep 1 echo "激光雷达" #echo "测试开始,消息记录到日志里" > /home/pi/start/test_desk1.log echo "1 开启ros节点 roscore 等待完全开启再往后执行 " gnome-terminal -t "1_roscore" -x bash -c "\ roscore; \ exit;exec bash;" sleep 5 echo "2-1 开启采集雷达节点-rviz查看 " gnome-terminal -t "2_get_ladir" -x bash -c "\ source /home/dongdong/v2_Project/v7_ladir/ROS_SDK/ws_livox/devel/setup.bash; \ roslaunch livox_ros_driver livox_lidar_rviz.launch; \ exit;exec bash;" sleep 3 # echo "2-2 开启采集雷达节点-录制模式 " # gnome-terminal -t "3_recoreder_ladir" -x bash -c "\ # source /home/dongdong/v2_Project/v7_ladir/ROS_SDK/ws_livox/devel/setup.bash; \ # roslaunch livox_ros_driver livox_lidar_msg.launch; \ # exit;exec bash;" # sleep 1 echo "3 开启采集雷达节点-录制模式 " gnome-terminal -t "3_recoreder_ladir" -x bash -c "\ rosbag record /livox/lidar; \ exit;exec bash;" sleep 1 #echo "执行前确保给与脚本本身执行权限 sudo chmod -R 777 xxx.sh" #echo "查看串口: ls /dev/ttyUSB* " #echo "临时给与一次串口权限: sudo chmod 777 /dev/ttyUSB0 " # 开启新的命令窗口执行 # gnome-terminal -t "窗口名字" -x bash -c "要执行的命令1;命令2;exit;exec bash;" #Shell 脚本自动输入密码 : echo "密码" | sudo 命令

ros录制消息
rosbag record -O dataset_name.bag /livox/lidar /usb_cam/image_raw
(1)rosbag record -a
表示将当前发布的所有topic数据都录制保存到一个rosbag文件中,
录制的数据包名字默认为日期加时间。
(2)rosbag record topic1 topic2 topic3 ...
表示只记录某些感兴趣的topic数据。
(3)rosbag record -O filename.bag topic1 topic2
表示指定生成数据包的名字。
其中 -O (大写的O)后跟录制数据包的名字。如果用 -o(小写的o),则只是给数据包的名字加前缀。
ros查看消息
rosbag info 2022-12-13-22-58-07.bag
ros回放消息
rosbag play 2022-12-13-22-58-07.bag
rosbag play播放数据包
命令
(1)rosbag play recorded1.bag recorded2.bag
如果播放两个及以上bag包,那么他们会第一帧对齐,后面根据第一帧时间戳的时间差播放。
(2)rosbag play -s 5 recorded1.bag
表示从bag的第几s开始播放
(3)rosbag play
recorded1.bag
表示循环播放此bag包
(4)rosbag play -r 10 recorded1.bag
表示快进10倍播放此bag包,以录制频率的10倍回放。
(5)rosbag play --pause record.bag
表示以暂停的方式启动,防止跑掉数据
(6)rosbag play -u 10 record.bag
表示播放前10s的数据
回放数据
分布执行
后面有完成的脚本一次性执行
运行ros

查看话题名字

循环播放

=======================
开启可视化软件

等话题回访开始后,需要添加话题可视化
手动添加话题

发现一个报错

解决重点,两个办法
1 软件直接看到

其中 For frame 后面跟着的就是

2 用命令行查询
话题名字

查询话题的frame_id
rostopic echo /livox/lidar | grep frame_id

左侧的Global Options,下面的For frame,双击右侧进行修改
修改前

修改后

正常看到回访数据

记录rosbag脚本

#!/bin/sh #延迟1秒执行 sleep 1 echo "激光雷达" #echo "测试开始,消息记录到日志里" > /home/pi/start/test_desk1.log echo "1 开启ros节点 roscore 等待完全开启再往后执行 " gnome-terminal -t "1_roscore" -x bash -c "\ roscore; \ exit;exec bash;" sleep 5 echo "2-1 开启-rviz软件 " gnome-terminal -t "2-1 open rviz软件" -x bash -c "\ source /home/dongdong/v2_Project/v7_ladir/ROS_SDK/ws_livox/devel/setup.bash; \ rosrun rviz rviz; \ exit;exec bash;" sleep 1 echo "2-2 查看要可视化回放的雷达数据 --修改要回放的.bag名字" gnome-terminal -t "2-2 show bag topic info name" -x bash -c "\ source /home/dongdong/v2_Project/v7_ladir/ROS_SDK/ws_livox/devel/setup.bash; \ rosbag info 2022-12-13-23-53-13.bag;\ exec bash;" sleep 1 # 正常输出 # path: 2022-12-13-22-58-07.bag # version: 2.0 # duration: 23.1s # start: Dec 13 2022 22:58:07.61 (1670943487.61) # end: Dec 13 2022 22:58:30.70 (1670943510.70) # size: 39.8 MB # messages: 232 # compression: none [47/47 chunks] # types: sensor_msgs/PointCloud2 [1158d486dd51d683ce2f1be655c3c181] # topics: /livox/lidar 232 msgs : sensor_msgs/PointCloud2 echo "2-3 手动在rviz界面中添加话题名字" #/livox/lidar echo "3 开始回放 --修改要回放的.bag名字" gnome-terminal -t "3_play rosbag" -x bash -c "\ source /home/dongdong/v2_Project/v7_ladir/ROS_SDK/ws_livox/devel/setup.bash; \ rosbag play -l 2022-12-13-23-53-13.bag; \ exit;exec bash;" sleep 1 #echo "执行前确保给与脚本本身执行权限 sudo chmod -R 777 xxx.sh" #echo "查看串口: ls /dev/ttyUSB* " #echo "临时给与一次串口权限: sudo chmod 777 /dev/ttyUSB0 " # 开启新的命令窗口执行 # gnome-terminal -t "窗口名字" -x bash -c "要执行的命令1;命令2;exit;exec bash;" #Shell 脚本自动输入密码 : echo "密码" | sudo 命令
4数据格式转化
https://livox-wiki-cn.readthedocs.io/zh_CN/latest/tutorials/format_conversion.html
lvx文件转rosbag文件并播放
roslaunch livox_ros_driver lvx_to_rosbag.launch lvx_file_path:=""
在上述命令中双引号内填写本地lvx数据文件路径即可成功运行,转换成功后将在上述路径下生成同名的rosbag格式文件,如下图所示:
得到转化成功后的test.bag文件后,可使用rviz可视化工具播放,步骤如下:
运行rviz:
rosrun rviz rviz
功打开rviz后,需添加PointCloud2并选择相应的topic,可使用rosbag info <filename.bag>命令查看相应bag文件对应的topic,如下所示:

在rviz中添加相应topic:

然后运行rosbag,即可播放:
rosbag play <test.bag>
rosbag文件转pcd文件
PointCloud2格式的rosbag文件
在.bag文件存储路径下打开终端并运行命令:
rosrun pcl_ros bag_to_pcd <input_file.bag> <topic> <output_directory>
命令不全,后面有脚本
其中<input_file.bag>为需转换的bag文件名称,<topic>为该bag文件的topic信息,<output_directory>为转化完成后的pcd文件存放地址。

在对应文件夹下,可找到由rosbag文件转化而来的每一帧pcd文件,其文件名为当前帧的时间戳:

转换完成后,可使用pcl_viewer查看pcd文件。命令如下:
安装工具
sudo apt install pcl-tools
查看
pcl_viewer <filename.pcd>

执行脚本

#!/bin/sh #延迟1秒执行 sleep 1 echo "激光雷达" #echo "测试开始,消息记录到日志里" > /home/pi/start/test_desk1.log echo "1 开启ros节点 roscore 等待完全开启再往后执行 " gnome-terminal -t "1_roscore" -x bash -c "\ roscore; \ exit;exec bash;" sleep 5 echo "2-1 开启转化 " #rosrun pcl_ros bag_to_pcd <input_file.bag> <topic> <output_directory> #修改.bag名字 #修改.bag中要转化的topic名字 #修改输出文件夹 output_directory gnome-terminal -t "2-1 open rviz软件" -x bash -c "\ source /home/dongdong/v2_Project/v7_ladir/ROS_SDK/ws_livox/devel/setup.bash; \ rosrun pcl_ros bag_to_pcd 2022-12-13-23-53-13.bag /livox/lidar /home/dongdong/v2_Project/v7_ladir/ROS_SDK/ws_livox/pcl; \ exec bash;" sleep 1
5 代码修改问题
5-0 时间戳同步
https://livox-wiki-cn.readthedocs.io/zh_CN/latest/tutorials/timestamp_sychronization.html

目前实测 笔记本不能进行ptp同步,没有这时钟源发出。
后期可考虑和GPS 时间对接或者 自己用单片机给个外部硬触发信号。
5-1时间戳由雷达时间戳变为电脑ros时间戳
待定
修改官方Livox驱动代码,时间戳是雷达自己的,使得时间戳i为ROS的时间戳(不严谨待定),方便与照片对其。
将ws_livox/src/livox_ros_driver/livox_ros_driver中的lddc.cpp的ros::Time(timestamp / 1000000000.0)改为ros::Time::now()。
livox_ros_driver.cpp
ros::Time::init();
while (ros::ok()) {
lddc->DistributeLidarData();
cout<<1111111111<<ros::Time::now();
}
rosbag record -O dataset524.bag /livox/lidar /usb_cam/image_raw
5-2雷达和相机联合标定
官网
https://github.com/Livox-SDK/livox_camera_lidar_calibration/blob/master/doc_resources/README_cn.md
网友
https://blog.csdn.net/qq_33958714/article/details/125624082


浙公网安备 33010602011771号