云计算百科
云计算领域专业知识百科平台

Livox ROS Driver 2 README.md中文翻译及解析

Livox ROS Driver 2

Livox ROS Driver 2 是用于连接 Livox 生产的激光雷达产品的第二代驱动程序包,适用于 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 安装说明

1.2 安装 ROS & ROS2

ROS Melodic 安装请参考: ROS Melodic 安装说明

ROS Noetic 安装请参考: ROS Noetic 安装说明

ROS2 Foxy 安装请参考: ROS Foxy 安装说明

ROS2 Humble 安装请参考: ROS Humble 安装说明

推荐安装 Desktop-Full 版本。

2. 构建 & 运行 Livox ROS Driver 2

2.1 克隆 Livox ROS Driver 2 源代码:

cd <ros_ws>/src
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 中的安装指南。

2.3 构建 Livox ROS Driver 2:

对于 ROS1

cd <ros_ws>
catkin_make # 或者您可以使用 `catkin build`

对于 ROS2

cd <ros_ws>
colcon build –symlink-install

2.4 运行 Livox ROS Driver 2:

对于 ROS:

cd <ros_ws>
source ./devel/setup.sh
roslaunch livox_ros_driver2 [启动文件]

其中,

  • livox_ros_driver2 : 是 Livox ROS Driver 2 的 ROS 包名;
  • [启动文件] : 是您想要使用的 ROS 启动文件;launch_ROS1 文件夹中包含几个供您参考的启动示例;

一个用于 HAP 激光雷达的 rviz 启动示例如下:

roslaunch livox_ros_driver2 rviz_HAP.launch

对于 ROS2:

cd <ros_ws>
source ./install/setup.sh
ros2 launch livox_ros_driver2 [启动文件]

其中,

  • [启动文件] : 是您想要使用的 ROS2 启动文件;launch_ROS2 文件夹中包含几个供您参考的启动示例。

一个用于 HAP 激光雷达的 rviz 启动示例如下:

ros2 launch livox_ros_driver2 rviz_HAP_launch.py

3. 启动文件及 livox_ros_driver2 内部参数配置说明

3.1 启动文件配置说明

ROS 的启动文件位于 ws_livox/src/livox_ros_driver2/launch_ROS1 目录,ROS2 的启动文件位于 ws_livox/src/livox_ros_driver2/launch_ROS2 目录。不同的启动文件具有不同的配置参数值,用于不同的场景:

启动文件名描述
rviz_HAP.launch 连接 HAP 激光雷达设备发布 pointcloud2 格式数据自动加载 rviz
msg_HAP.launch 连接 HAP 激光雷达设备发布 Livox 自定义点云数据
rviz_MID360.launch 连接 MID360 激光雷达设备发布 pointcloud2 格式数据自动加载 rviz
msg_MID360.launch 连接 MID360 激光雷达设备发布 Livox 自定义点云数据
rviz_mixed.launch 连接 HAP 和 MID360 激光雷达设备发布 pointcloud2 格式数据自动加载 rviz
msg_mixed.launch 连接 HAP 和 MID360 激光雷达设备发布 Livox 自定义点云数据

3.2 Livox ros driver 2 内部主要参数配置说明

Livox_ros_driver2 的所有内部参数都在启动文件中配置。以下是三个常用参数的详细说明:

参数名详细描述默认值
publish_freq 设置点云发布频率浮点数据类型,推荐值 5.0, 10.0, 20.0, 50.0 等。最大发布频率为 100.0 Hz。 10.0
multi_topic 激光雷达设备是否拥有独立的主题来发布点云数据0 – 所有激光雷达设备使用同一个主题发布点云数据1 – 每个激光雷达设备使用自己的主题发布点云数据 0
xfer_format 设置点云格式0 – Livox pointcloud2 (PointXYZRTLT) 点云格式1 – Livox 自定义点云格式2 – PCL 库中的标准 pointcloud2 (pcl :: PointXYZI) 点云格式(仅适用于 ROS) 0

注意:

本表中未提及的其他参数,除非完全理解,否则不建议修改。

    Livox_ros_driver2 点云数据详细描述:

  • Livox pointcloud2 (PointXYZRTLT) 点云格式,如下所示:
  • float32 x # X 轴,单位: m
    float32 y # Y 轴,单位: m
    float32 z # Z 轴,单位: m
    float32 intensity # 反射率值,范围 0.0~255.0
    uint8 tag # livox 标签
    uint8 line # 激光器在雷达中的编号
    float64 timestamp # 点的时间戳

    注意:

    帧中的点数可能不同,但每个点都提供时间戳。

  • Livox 自定义数据包格式,如下所示:
  • std_msgs/Header header # ROS 标准消息头
    uint64 timebase # 第一个点的时间基准
    uint32 point_num # 点云总数
    uint8 lidar_id # 激光雷达设备 ID 号
    uint8[3] rsvd # 保留字段
    CustomPoint[] points # 点云数据

        上述自定义数据包中的自定义点云 (CustomPoint) 格式:

    uint32 offset_time # 相对于基准时间的偏移时间 (单位: ns)
    float32 x # X 轴,单位: m
    float32 y # Y 轴,单位: m
    float32 z # Z 轴,单位: m
    uint8 reflectivity # 反射率,范围 0~255
    uint8 tag # livox 标签
    uint8 line # 激光器在雷达中的编号

  • PCL 库中的标准 pointcloud2 (pcl :: PointXYZI) 格式(仅 ROS 可以发布):
  •     请参考 PCL 库的 point_types.hpp 文件中的 pcl :: PointXYZI 数据结构。

    4. 激光雷达配置

    激光雷达的配置(如 IP、端口、数据类型等)可以通过 JSON 格式的配置文件进行设置。单个 HAP、Mid360 和混合激光雷达的配置文件位于 config 文件夹中。启动文件中的 user_config_path 参数指示该 JSON 文件的路径。

  • 以下是 HAP 激光雷达的配置示例(位于 config/HAP_config.json):
  • {
    "lidar_summary_info" : {
    "lidar_type": 8 # 协议类型索引,请勿修改此值
    },
    "HAP": {
    "device_type" : "HAP",
    "lidar_ipaddr": "",
    "lidar_net_info" : {
    "cmd_data_port": 56000, # 命令端口
    "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", # 主机 IP (可修改)
    "cmd_data_port": 56000,
    "push_msg_ip": "",
    "push_msg_port": 0,
    "point_data_ip": "192.168.1.5", # 主机 IP
    "point_data_port": 57000,
    "imu_data_ip" : "192.168.1.5", # 主机 IP
    "imu_data_port": 58000,
    "log_data_ip" : "",
    "log_data_port": 59000
    }
    },
    "lidar_configs" : [
    {
    "ip" : "192.168.1.100", # 您要配置的激光雷达 IP
    "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 文件中的参数属性描述如下表:

    激光雷达配置参数

    参数名类型描述默认值
    ip String 您要配置的激光雷达 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 激光雷达) Int 设置盲区范围从 50 厘米到 200 厘米 50
    extrinsic_parameter Object 设置外参“roll”、“pitch”、“yaw” 的数据类型为 float“x”、“y”、“z” 的数据类型为 int

    有关 HAP 配置的更多信息,请参考: HAP 配置文件描述

  • 当连接多个激光雷达时,将不同激光雷达对应的对象添加到 lidar_configs 数组中。混合激光雷达配置文件内容示例如下:
  • {
    "lidar_summary_info" : {
    "lidar_type": 8 # 协议类型索引,请勿修改此值
    },
    "HAP": {
    "lidar_net_info" : { # HAP 端口,请勿修改这些值
    "cmd_data_port": 56000, # HAP 命令端口
    "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", # 主机 IP
    "cmd_data_port": 56000,
    "push_msg_ip": "",
    "push_msg_port": 0,
    "point_data_ip": "192.168.1.5", # 主机 IP
    "point_data_port": 57000,
    "imu_data_ip" : "192.168.1.5", # 主机 IP
    "imu_data_port": 58000,
    "log_data_ip" : "",
    "log_data_port": 59000
    }
    },
    "MID360": {
    "lidar_net_info" : { # Mid360 端口,请勿修改这些值
    "cmd_data_port": 56100, # Mid360 命令端口
    "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", # 主机 IP
    "cmd_data_port": 56101,
    "push_msg_ip": "192.168.1.5", # 主机 IP
    "push_msg_port": 56201,
    "point_data_ip": "192.168.1.5", # 主机 IP
    "point_data_port": 56301,
    "imu_data_ip" : "192.168.1.5", # 主机 IP
    "imu_data_port": 56401,
    "log_data_ip" : "",
    "log_data_port": 56501
    }
    },
    "lidar_configs" : [
    {
    "ip" : "192.168.1.100", # 您要配置的 HAP IP
    "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", # 您要配置的 Mid360 IP
    "pcl_data_type" : 1,
    "pattern_mode" : 0,
    "extrinsic_parameter" : {
    "roll": 0.0,
    "pitch": 0.0,
    "yaw": 0.0,
    "x": 0,
    "y": 0,
    "z": 0
    }
    }
    ]
    }

  • 当主机上的多个网卡连接多个激光雷达时,您需要将不同激光雷达对应的对象添加到 lidar_configs 数组中。分别运行不同的启动文件,以下是混合激光雷达配置文件内容示例:
  • MID360_config1:

    {
    "lidar_summary_info" : {
    "lidar_type": 8 # 协议类型索引,请勿修改此值
    },
    "MID360": {
    "lidar_net_info": {
    "cmd_data_port": 56100, # 命令端口
    "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"], # 激光雷达 IP
    "host_ip": "192.168.1.5", # 主机 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
    "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 # 协议类型索引,请勿修改此值
    },
    "MID360": {
    "lidar_net_info": {
    "cmd_data_port": 56100, # 命令端口
    "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"], # 激光雷达 IP
    "host_ip": "192.168.2.5", # 主机 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
    "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 (ROS1):

    <launch>
    <!–用户为 ros 配置的参数开始–>
    <arg name="lvx_file_path" default="livox_test.lvx"/>
    <arg name="bd_list" default="100000000000000"/>
    <arg name="xfer_format" default="0"/>
    <arg name="multi_topic" default="1"/>
    <arg name="data_src" default="0"/>
    <arg name="publish_freq" default="10.0"/>
    <arg name="output_type" default="0"/>
    <arg name="rviz_enable" default="true"/>
    <arg name="rosbag_enable" default="false"/>
    <arg name="cmdline_arg" default="$(arg bd_list)"/>
    <arg name="msg_frame_id" default="livox_frame"/>
    <arg name="lidar_bag" default="true"/>
    <arg name="imu_bag" default="true"/>
    <!–用户为 ros 配置的参数结束–>

    <param name="xfer_format" value="$(arg xfer_format)"/>
    <param name="multi_topic" value="$(arg multi_topic)"/>
    <param name="data_src" value="$(arg data_src)"/>
    <param name="publish_freq" type="double" value="$(arg publish_freq)"/>
    <param name="output_data_type" value="$(arg output_type)"/>
    <param name="cmdline_str" type="string" value="$(arg bd_list)"/>
    <param name="cmdline_file_path" type="string" value="$(arg lvx_file_path)"/>
    <param name="user_config_path" type="string" value="$(find livox_ros_driver2)/config/MID360_config1.json"/> <!– Mid360 配置文件1 –>
    <param name="frame_id" type="string" value="$(arg msg_frame_id)"/>
    <param name="enable_lidar_bag" type="bool" value="$(arg lidar_bag)"/>
    <param name="enable_imu_bag" type="bool" value="$(arg imu_bag)"/>

    <node name="livox_lidar_publisher1" pkg="livox_ros_driver2"
    type="livox_ros_driver2_node" required="true"
    output="screen" args="$(arg cmdline_arg)"/>

    <group if="$(arg rviz_enable)">
    <node name="livox_rviz" pkg="rviz" type="rviz" respawn="true"
    args="-d $(find livox_ros_driver2)/config/display_point_cloud_ROS1.rviz"/>

    </group>

    <group if="$(arg rosbag_enable)">
    <node pkg="rosbag" type="record" name="record" output="screen"
    args="-a"/>

    </group>

    </launch>

    Launch2 (ROS1):

    <launch>
    <!–用户为 ros 配置的参数开始–>
    <arg name="lvx_file_path" default="livox_test.lvx"/>
    <arg name="bd_list" default="100000000000000"/>
    <arg name="xfer_format" default="0"/>
    <arg name="multi_topic" default="1"/>
    <arg name="data_src" default="0"/>
    <arg name="publish_freq" default="10.0"/>
    <arg name="output_type" default="0"/>
    <arg name="rviz_enable" default="true"/>
    <arg name="rosbag_enable" default="false"/>
    <arg name="cmdline_arg" default="$(arg bd_list)"/>
    <arg name="msg_frame_id" default="livox_frame"/>
    <arg name="lidar_bag" default="true"/>
    <arg name="imu_bag" default="true"/>
    <!–用户为 ros 配置的参数结束–>

    <param name="xfer_format" value="$(arg xfer_format)"/>
    <param name="multi_topic" value="$(arg multi_topic)"/>
    <param name="data_src" value="$(arg data_src)"/>
    <param name="publish_freq" type="double" value="$(arg publish_freq)"/>
    <param name="output_data_type" value="$(arg output_type)"/>
    <param name="cmdline_str" type="string" value="$(arg bd_list)"/>
    <param name="cmdline_file_path" type="string" value="$(arg lvx_file_path)"/>
    <param name="user_config_path" type="string" value="$(find livox_ros_driver2)/config/MID360_config2.json"/> <!– Mid360 配置文件2 –>
    <param name="frame_id" type="string" value="$(arg msg_frame_id)"/>
    <param name="enable_lidar_bag" type="bool" value="$(arg lidar_bag)"/>
    <param name="enable_imu_bag" type="bool" value="$(arg imu_bag)"/>

    <node name="livox_lidar_publisher2" pkg="livox_ros_driver2"
    type="livox_ros_driver2_node" required="true"
    output="screen" args="$(arg cmdline_arg)"/>

    <group if="$(arg rviz_enable)">
    <node name="livox_rviz" pkg="rviz" type="rviz" respawn="true"
    args="-d $(find livox_ros_driver2)/config/display_point_cloud_ROS1.rviz"/>

    </group>

    <group if="$(arg rosbag_enable)">
    <node pkg="rosbag" type="record" name="record" output="screen"
    args="-a"/>

    </group>

    </launch>

    5. 支持的激光雷达列表

    • HAP
    • Mid360
    • (更多类型即将推出…)

    6. 常见问题解答 (FAQ)

    6.1 使用 rviz_HAP.launch 启动,但在网格上没有显示点云?

    请检查 RViz “Display” 面板中的 “Global Options – Fixed Frame” 字段。将该字段值设置为 livox_frame 并确保在面板中勾选了 PointCloud2 选项。

    6.2 使用命令 ros2 launch livox_ros_driver2 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


    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Livox ROS Driver 2 README.md中文翻译及解析
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!