# 览沃 ROS 驱动程序( [livox_ros_driver English README](https://github.com/Livox-SDK/livox_ros_driver/) )
览沃ROS驱动程序是一个全新的 ROS 包,专门用于连接览沃生产的 LiDAR 产品。该驱动程序可以在安装了
ROS 环境( indigo,kinetic,melodic )的 ubuntu14.04/16.04/18.04 操作系统下运行。经测试可以运行览沃 ROS 驱动程序的硬件平台包括:intel x86 主流 cpu 平台,部分 ARM64 硬件平台(如,nvida TX2/Xavier 等)。
## 1. 安装依赖
运行览沃 ROS 驱动程序之前,必须安装 ROS 和 Livox-SDK。
### 1.1 ROS 环境安装
ROS 环境安装请参考 ROS 安装指南:
[ROS 安装指南](https://www.ros.org/install/)
***说明:***
(1)务必安装 ROS 完整版 (ros-distro-desktop-full);
(2)国内安装 ROS 时,由于网络环境问题,有可能安装失败或者安装错误,请耐心查找错误原因,并解决问题;
(3)ROS 安装一共有 7 到 8 个步骤,请仔细阅读安装指南;
### 1.2 Livox-SDK 安装
1. 从 Github 下载或者克隆 Livox-SDK 到本地;
2. 参考对应的 README.md 文档安装和运行 Livox-SDK;
## 2. 获取并构建览沃 ROS 驱动源代码包
1. 从览沃 GitHub 获取览沃 ROS 驱动程序
`git clone https://github.com/Livox-SDK/livox_ros_driver.git ws_livox/src`
***说明:***
务必使用上面的命令克隆代码到本地,否则会因为文件路径的问题而编译出错
2. 参照如下命令,构建览沃 ROS 驱动程序
```bash
cd ws_livox
catkin_make
```
3. 使用如下命令更新当前 ROS 包环境
`source ./devel/setup.sh`
## 3. 运行览沃 ROS 驱动程序
### 3.1 使用 ROS launch 文件加载览沃 ROS 驱动
命令格式如下:
`roslaunch livox_ros_driver [launch file] [param]`
1. 如果 [param] 参数项为空,则览沃 ROS 驱动程序会根据配置文件中的具体配置来连接对应的设备,具体连接规则如下:
当配置文件中指定的设备连接状态配置为使能连接时 (true) ,览沃 ROS 驱动程序只会连接该配置文件中指定的设备;
***说明***
(1)该配置文件位于 "ws_livox/src/livox_ros_driver/config" 目录下;
(2)当配置文件中指定的设备连接状态全部配置为禁止连接 (false) 时,览沃 ROS 驱动程序会自动连接扫描到的所有设备;
2. 如果 [param] 参数为 LiDAR 的广播码,以 LiDAR( 广播码为 0TFDG3B006H2Z11 ) 和 LiDAR ( 广播码为 1HDDG8M00100191 ) 为例,使用的具体命令如下 :
```bash
roslaunch livox_ros_driver livox_lidar_rviz.launch bd_list:="0TFDG3B006H2Z11&1HDDG8M00100191"
```
***广播码说明***
每台览沃 LiDAR 设备拥有一个唯一的广播码。广播码由14位字符长度的序列号和一个额外的字符组成( 1、2或者 3),一共 15 位字符长度,上述序列号位于 LiDAR 机身外壳的二维码下面(见下图)。广播码被用来指定要连接的 LiDAR 设备,详细组成格式如下:

***说明:***
上图中 X ,在 MID-100_Left/MID-40/Horizon/Tele 产品中对应为 1 ,在 MID-100_Middle 中对应为 2,在MID-100_Right 中对应为 3 。
## 4. Launch 文件与览沃 ROS 驱动程序内部参数配置说明
### 4.1 Launch 配置文件描述
览沃驱动程序中所有的 launch 文件都位于 "ws_livox/src/livox_ros_driver/launch" 路径下,不同的 launch 文件拥有不同的配置参数值, 应用在不同的场景中:
| launch 文件名 | 功能 |
| ------------------------- | ------------------------------------------------------------ |
| livox_lidar_rviz.launch | 连接览沃雷达设备
向外发布 pointcloud2 格式的点云数据
自动加载rviz |
| livox_hub_rviz.launch | 连接览沃中心板设备
向外发布 pointcloud2 格式的点云数据
自动加载rviz |
| livox_lidar.launch | 连接览沃雷达设备
向外发布 pointcloud2 格式的点云数据 |
| livox_hub.launch | 连接览沃中心板设备
向外发布 pointcloud2 格式的点云数据 |
| livox_lidar_msg.launch | 连接览沃雷达设备
向外发布览沃自定义点云数据 |
| livox_hub_msg.launch | 连接览沃中心板设备
向外发布览沃自定义点云数据 |
| lvx_to_rosbag.launch | 转换 lvx 文件为 rosbag 文件
直接将 lvx 文件转换为 rosbag 文件 |
| lvx_to_rosbag_rviz.launch | 转换 lvx 文件为 rosbag 文件
从 lvx 文件中读取点云数据,并转换为 pointcloud2 格式向外发布 |
### 4.2 览沃 ROS 驱动程序内部主要参数配置说明
览沃 ROS 驱动程序中的所有内部参数都位于 launch 文件中,下面将对经常用到的三个参数进行详细说明:
| 参数名 | 详细说明 | 默认值 |
| ------------ | ------------------------------------------------------------ | ------ |
| publish_freq | 设置点云发布频率
浮点数据类型,推荐值 5.0,10.0,20.0,50.0 等。 | 10.0 |
| multi_topic | LiDAR 设备是否拥有独立的 topic 发布点云数据
0 -- 所有 LiDAR 设备共同使用同一个 topic 发送点云数据
1 -- 每个 LiDAR 设备各自拥有独立的 topic 发布点云数据 | 0 |
| xfer_format | 设置点云格式
0 -- 览沃 pointcloud2(PointXYZRTL) 点云格式
1 -- 览沃自定义点云数据格式
2 -- PCL库中标准 pointcloud2(pcl::PointXYZI) 点云格式 | 0 |
### 4.3 览沃 ROS 驱动程序点云数据详细说明
1. 览沃 pointcloud2(PointXYZRTL) 点云格式,详细如下:
```c
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~255
uint8 tag # livox tag
uint8 line # laser number in lidar
```
2. 览沃自定义数据包格式,详细如下 :
```c
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)格式 :
```c
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) 点云格式 :
请参考 PCL 库 point_types.hpp 文件中 the pcl::PointXYZI 数据结构。
## 5. 配置 LiDAR 参数
在 "ws_livox/src/livox_ros_driver/config" 路径下, 有两个 json 配置文件,分别为 livox_hub_config.json 和 livox_lidar_config.json 。
1. 直接连接 LiDAR 时,使用 livox_lidar_config.json 来配置 LiDAR 参数,文件内容示例如下:
```json
{
"lidar_config": [
{
"broadcast_code": "0TFDG3B006H2Z11",
"enable_connect": true,
"enable_fan": true,
"return_mode": 0,
"coordinate": 0,
"imu_rate": 1,
"extrinsic_parameter_source": 0
}
]
}
```
上面 json 文件中各参数属性说明如下表: