Livox-SDK/livox_ros_driver2

GitHub: Livox-SDK/livox_ros_driver2

用于在ROS/ROS2环境中驱动Livox LiDAR(HAP, Mid-360),实现点云与IMU数据采集、格式转换与发布的官方驱动包。

Stars: 700 | Forks: 564

# Livox ROS Driver 2 Livox ROS Driver 2 是用于连接 Livox 生产的 LiDAR 产品的第二代驱动包,适用于 ROS(推荐 noetic)和 ROS2(推荐 foxy 或 humble)。 **注意 :** 作为调试工具,不建议将 Livox ROS Driver 用于量产,而应仅限于测试场景。您应该基于原始源代码进行优化,以满足您的各种需求。 ## 1. 准备工作 ### 1.1 操作系统要求 * Ubuntu 18.04 用于 ROS Melodic; * Ubuntu 20.04 用于 ROS Noetic 和 ROS2 Foxy; * Ubuntu 22.04 用于 ROS2 Humble; **提示:** Colcon 是 ROS2 中使用的构建工具。 如何安装 colcon:[Colcon 安装说明](https://docs.ros.org/en/foxy/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.html) ### 1.2 安装 ROS & ROS2 有关 ROS Melodic 的安装,请参考: [ROS Melodic 安装说明](https://wiki.ros.org/melodic/Installation) 有关 ROS Noetic 的安装,请参考: [ROS Noetic 安装说明](https://wiki.ros.org/noetic/Installation) 有关 ROS2 Foxy 的安装,请参考: [ROS Foxy 安装说明](https://docs.ros.org/en/foxy/Installation/Ubuntu-Install-Debians.html) 有关 ROS2 Humble 的安装,请参考: [ROS Humble 安装说明](https://docs.ros.org/en/humble/Installation/Ubuntu-Install-Debians.html) 推荐使用 Desktop-Full 安装。 ## 2. 构建与运行 Livox ROS Driver 2 ### 2.1 克隆 Livox ROS Driver 2 源代码: ``` git clone https://github.com/Livox-SDK/livox_ros_driver2.git ws_livox/src/livox_ros_driver2 ``` **注意 :** 请务必将源代码克隆到 '[work_space]/src/' 文件夹中(如上所示),否则由于编译工具的限制,将会发生编译错误。 ### 2.2 构建并安装 Livox-SDK2 **注意 :** 请遵循 [Livox-SDK2/README.md](https://github.com/Livox-SDK/Livox-SDK2/blob/master/README.md) 中的安装指南操作。 ### 2.3 构建 Livox ROS Driver 2: #### 对于 ROS(以 Noetic 为例): ``` source /opt/ros/noetic/setup.sh ./build.sh ROS1 ``` #### 对于 ROS2 Foxy: ``` source /opt/ros/foxy/setup.sh ./build.sh ROS2 ``` #### 对于 ROS2 Humble: ``` source /opt/ros/humble/setup.sh ./build.sh humble ``` ### 2.4 运行 Livox ROS Driver 2: #### 对于 ROS: ``` source ../../devel/setup.sh roslaunch livox_ros_driver2 [launch file] ``` 其中, * **livox_ros_driver2** :是 Livox ROS Driver 2 的 ROS 包名称; * **[launch 文件]** :是您想要使用的 ROS launch 文件;'launch_ROS1' 文件夹中包含几个供您参考的 launch 示例; 针对 HAP LiDAR 的一个 rviz launch 示例如下: ``` roslaunch livox_ros_driver2 rviz_HAP.launch ``` #### 对于 ROS2: ``` source ../../install/setup.sh ros2 launch livox_ros_driver2 [launch file] ``` 其中, * **[launch 文件]** :是您想要使用的 ROS2 launch 文件;'launch_ROS2' 文件夹中包含几个供您参考的 launch 示例。 针对 HAP LiDAR 的一个 rviz launch 示例如下: ``` ros2 launch livox_ros_driver2 rviz_HAP_launch.py ``` ## 3. Launch 文件与 livox_ros_driver2 内部参数配置说明 ### 3.1 Launch 文件配置说明 ROS 的 launch 文件位于 "ws_livox/src/livox_ros_driver2/launch_ROS1" 目录下,ROS2 的 launch 文件位于 "ws_livox/src/livox_ros_driver2/launch_ROS2" 目录下。不同的 launch 文件具有不同的配置参数值,并用于不同的场景: | launch 文件名称 | 描述 | | ------------------------- | ------------------------------------------------------------ | | rviz_HAP.launch | 连接到 HAP LiDAR 设备
发布 pointcloud2 格式数据
自动加载 rviz | | msg_HAP.launch | 连接到 HAP LiDAR 设备
发布 Livox 自定义点云数据| | rviz_MID360.launch | 连接到 MID360 LiDAR 设备
发布 pointcloud2 格式数据
自动加载 rviz| | msg_MID360.launch | 连接到 MID360 LiDAR 设备
发布 Livox 自定义点云数据 | | rviz_mixed.launch | 连接到 HAP 和 MID360 LiDAR 设备
发布 pointcloud2 格式数据
自动加载 rviz| | msg_mixed.launch | 连接到 HAP 和 MID360 LiDAR 设备
发布 Livox 自定义点云数据 | ### 3.2 Livox ros driver 2 主要内部参数配置说明 Livox_ros_driver2 的所有内部参数均位于 launch 文件中。以下是对三个常用参数的详细说明: | 参数 | 详细描述 | 默认值 | | ------------ | ------------------------------------------------------------ | ------- | | publish_freq | 设置点云发布的频率
浮点数据类型,推荐值为 5.0、10.0、20.0、50.0 等。最大发布频率为 100.0 Hz。| 10.0 | | multi_topic | LiDAR 设备是否拥有独立的 topic 来发布点云数据
0 -- 所有 LiDAR 设备使用相同的 topic 发布点云数据
1 -- 每个 LiDAR 设备都有各自的 topic 来发布点云数据 | 0 | | xfer_format | 设置点云格式
0 -- Livox pointcloud2(PointXYZRTLT) 点云格式
1 -- Livox 自定义点云格式
2 -- PCL 库中的标准 pointcloud2 (pcl :: PointXYZI) 点云格式(仅限 ROS) | 0 | **注意 :** 此表中未提及的其他参数,除非完全理解,否则不建议更改。     ***Livox_ros_driver2 点云数据详细说明 :*** 1. Livox pointcloud2 (PointXYZRTLT) 点云格式,如下所示: ``` float32 x # X axis, unit:m float32 y # Y axis, unit:m float32 z # Z axis, unit:m float32 intensity # the value is reflectivity, 0.0~255.0 uint8 tag # livox tag uint8 line # laser number in lidar float64 timestamp # Timestamp of point ``` **注意:** 帧中的点数可能会有所不同,但每个点都会提供一个时间戳。 2. Livox 自定义数据包格式,如下所示: ``` std_msgs/Header header # ROS standard message header uint64 timebase # The time of first point uint32 point_num # Total number of pointclouds uint8 lidar_id # Lidar device id number uint8[3] rsvd # Reserved use CustomPoint[] points # Pointcloud data ```     上述自定义数据包中的自定义点云(CustomPoint)格式: ``` uint32 offset_time # offset time relative to the base time float32 x # X axis, unit:m float32 y # Y axis, unit:m float32 z # Z axis, unit:m uint8 reflectivity # reflectivity, 0~255 uint8 tag # livox tag uint8 line # laser number in lidar ``` 3. PCL 库中的标准 pointcloud2 (pcl :: PointXYZI) 格式(仅限 ROS 可以发布):     请参考 PCL 库 point_types.hpp 文件中的 pcl :: PointXYZI 数据结构。 ## 4. LiDAR 配置 LiDAR 配置(如 IP、端口、数据类型等)可以通过 json 风格的配置文件进行设置。单个 HAP、Mid360 和混合 LiDAR 的配置文件位于 "config" 文件夹中。launch 文件中名为 *'user_config_path'* 的参数指定了此类 json 文件的路径。 1. 以下是 HAP LiDAR 的配置示例(位于 config/HAP_config.json): ``` { "lidar_summary_info" : { "lidar_type": 8 # protocol type index, please don't revise this value }, "HAP": { "device_type" : "HAP", "lidar_ipaddr": "", "lidar_net_info" : { "cmd_data_port": 56000, # command port "push_msg_port": 0, "point_data_port": 57000, "imu_data_port": 58000, "log_data_port": 59000 }, "host_net_info" : { "cmd_data_ip" : "192.168.1.5", # host ip (it can be revised) "cmd_data_port": 56000, "push_msg_ip": "", "push_msg_port": 0, "point_data_ip": "192.168.1.5", # host ip "point_data_port": 57000, "imu_data_ip" : "192.168.1.5", # host ip "imu_data_port": 58000, "log_data_ip" : "", "log_data_port": 59000 } }, "lidar_configs" : [ { "ip" : "192.168.1.100", # ip of the LiDAR you want to config "pcl_data_type" : 1, "pattern_mode" : 0, "blind_spot_set" : 50, "extrinsic_parameter" : { "roll": 0.0, "pitch": 0.0, "yaw": 0.0, "x": 0, "y": 0, "z": 0 } } ] } ``` 上述 json 文件中的参数属性如下表所述: **LiDAR 配置参数** | 参数 | 类型 | 描述 | 默认值 | | :------------------------- | ------- | ------------------------------------------------------------ | --------------- | | ip | String | 您想要配置的 LiDAR 的 IP | 192.168.1.100 | | pcl_data_type | Int | 选择要发送的点云数据分辨率
1 -- 笛卡尔坐标数据 (32 位)
2 -- 笛卡尔坐标数据 (16 位)
3 -- 球坐标数据| 1 | | pattern_mode | Int | 空间扫描模式
0 -- 非重复扫描模式
1 -- 重复扫描模式
2 -- 重复扫描模式(低扫描率) | 0 | | blind_spot_set (仅适用于 HAP LiDAR) | Int | 设置盲区
范围从 50 cm 到 200 cm | 50 | | extrinsic_parameter | | 设置外参
"roll"、"picth"、"yaw" 的数据类型为 float
"x"、"y"、"z" 的数据类型为 int
| 有关 HAP 配置的更多信息,请参考: [HAP 配置文件说明](https://github.com/Livox-SDK/Livox-SDK2/wiki/hap-config-file-description) 2. 当连接多个 LiDAR 时,请将与不同 LiDAR 对应的对象添加到 "lidar_configs" 数组中。混合 LiDAR 配置文件内容的示例如下: ``` { "lidar_summary_info" : { "lidar_type": 8 # protocol type index, please don't revise this value }, "HAP": { "lidar_net_info" : { # HAP ports, please don't revise these values "cmd_data_port": 56000, # HAP command port "push_msg_port": 0, "point_data_port": 57000, "imu_data_port": 58000, "log_data_port": 59000 }, "host_net_info" : { "cmd_data_ip" : "192.168.1.5", # host ip "cmd_data_port": 56000, "push_msg_ip": "", "push_msg_port": 0, "point_data_ip": "192.168.1.5", # host ip "point_data_port": 57000, "imu_data_ip" : "192.168.1.5", # host ip "imu_data_port": 58000, "log_data_ip" : "", "log_data_port": 59000 } }, "MID360": { "lidar_net_info" : { # Mid360 ports, please don't revise these values "cmd_data_port": 56100, # Mid360 command port "push_msg_port": 56200, "point_data_port": 56300, "imu_data_port": 56400, "log_data_port": 56500 }, "host_net_info" : { "cmd_data_ip" : "192.168.1.5", # host ip "cmd_data_port": 56101, "push_msg_ip": "192.168.1.5", # host ip "push_msg_port": 56201, "point_data_ip": "192.168.1.5", # host ip "point_data_port": 56301, "imu_data_ip" : "192.168.1.5", # host ip "imu_data_port": 56401, "log_data_ip" : "", "log_data_port": 56501 } }, "lidar_configs" : [ { "ip" : "192.168.1.100", # ip of the HAP you want to config "pcl_data_type" : 1, "pattern_mode" : 0, "blind_spot_set" : 50, "extrinsic_parameter" : { "roll": 0.0, "pitch": 0.0, "yaw": 0.0, "x": 0, "y": 0, "z": 0 } }, { "ip" : "192.168.1.12", # ip of the Mid360 you want to config "pcl_data_type" : 1, "pattern_mode" : 0, "extrinsic_parameter" : { "roll": 0.0, "pitch": 0.0, "yaw": 0.0, "x": 0, "y": 0, "z": 0 } } ] } ``` 3. 当主机上的多个网卡连接到多个 LiDAR 时,您需要将与不同 LiDAR 对应的对象添加到 lidar_configs 数组中。分别运行不同的 launch 文件,以下是混合 LiDAR 配置文件内容的示例: **MID360_config1:** ``` { "lidar_summary_info" : { "lidar_type": 8 # protocol type index,please don't revise this value }, "MID360": { "lidar_net_info": { "cmd_data_port": 56100, # command port "push_msg_port": 56200, "point_data_port": 56300, "imu_data_port": 56400, "log_data_port": 56500 }, "host_net_info": [ { "lidar_ip": ["192.168.1.100"], # Lidar ip "host_ip": "192.168.1.5", # host ip "cmd_data_port": 56101, "push_msg_port": 56201, "point_data_port": 56301, "imu_data_port": 56401, "log_data_port": 56501 } ] }, "lidar_configs": [ { "ip": "192.168.1.100", # ip of the LiDAR you want to config "pcl_data_type": 1, "pattern_mode": 0, "extrinsic_parameter": { "roll": 0.0, "pitch": 0.0, "yaw": 0.0, "x": 0, "y": 0, "z": 0 } } ] } ``` **MID360_config2:** ``` { "lidar_summary_info" : { "lidar_type": 8 # protocol type index,please don't revise this value }, "MID360": { "lidar_net_info": { "cmd_data_port": 56100, # command port "push_msg_port": 56200, "point_data_port": 56300, "imu_data_port": 56400, "log_data_port": 56500 }, "host_net_info": [ { "lidar_ip": ["192.168.2.100"], # Lidar ip "host_ip": "192.168.2.5", # host ip "cmd_data_port": 56101, "push_msg_port": 56201, "point_data_port": 56301, "imu_data_port": 56401, "log_data_port": 56501 } ] }, "lidar_configs": [ { "ip": "192.168.2.100", # ip of the LiDAR you want to config "pcl_data_type": 1, "pattern_mode": 0, "extrinsic_parameter": { "roll": 0.0, "pitch": 0.0, "yaw": 0.0, "x": 0, "y": 0, "z": 0 } } ] } ``` **Launch1:** ``` # Mid360 MID360_config1 name ``` **Launch2:** ``` # Mid360 MID360_config2 name ``` ## 5. 支持的 LiDAR 列表 * HAP * Mid360 * (更多型号即将推出...) ## 6. 常见问题解答 (FAQ) ### 6.1 使用 "livox_lidar_rviz_HAP.launch" 启动,但在网格上没有点云显示? 请检查 RViz "Display" 面板中的 "Global Options - Fixed Frame" 字段。将该字段值设置为 "livox_frame" 并勾选面板中的 "PointCloud2" 选项。 ### 6.2 使用命令 "ros2 launch livox_lidar_rviz_HAP_launch.py" 启动,但提示无法打开共享对象文件 "liblivox_sdk_shared.so" ? 请将 '/usr/local/lib' 添加到环境变量 LD_LIBRARY_PATH 中。 * 如果您想在当前终端中添加: export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib * 如果您想为当前用户添加: vim ~/.bashrc export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/usr/local/lib source ~/.bashrc
标签:C++, Colcon, HAP, Homebrew安装, Livox, Mid-360, ROS, ROS2, ROS Foxy, ROS Humble, ROS Noetic, SLAM, 传感器集成, 开源驱动, 数据擦除, 机器人, 激光雷达, 点云数据, 物联网设备, 硬件接口, 自动驾驶, 自动驾驶感知, 雷达驱动