LIO-SAM:Livox-Mid-360点云适配

文章介绍了如何将原版只支持机械旋转雷达的LIO-SAM适应固态激光雷达如Livox-Mid-360,方法一是通过使用LivoxROS驱动的自定义点云数据CustomMsg,避免修改框架但限制适用性;另一种方法是修改特征提取,但具体实现未详述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

原版的LIO-SAM代码支持的雷达类型都是机械旋转式激光雷达,其主要特点是点云数据以线束顺序进行排列,LIO-SAM中对于角特征和面特征的提取也是利用了这一特点,数据没有线束的然而固态激光雷达的点云概念,不是按照线束顺序进行排列的,因此直接将Livox-Mid-360的点云数据放入LIO-SAM中是无法运行的。

通过查看其余适配Livox-Mid-360雷达的LIO-SAM版本代码后总结了以下两种方法

方式一:采用livox_ros_driver的自定义点云数据CustomMsg

此方式来自:GitHub - nkymzsy/LIO-SAM-MID360

采用Livox的ROS驱动包中的自定义点云数据CustomMsg,即LIVOX ROS驱动请运行livox_lidar_msg.launch。

LIVOX ROS驱动包livox_ros_driver可以启动Livox雷达,并采集Lidar数据转化成自定义点云数据CustomMsg并发布出去。自定义点云数据CustomMsg的信息如下:

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

采用这种自定义的点云格式,在livox的ROS驱动包中,将Mid-360的点云数据等效于以线束顺序进行排列,这样就不需要修改LIO-SAM的框架了。

但是原版的LIO-SAM框架接受点云时定义的数据类型都是ROS提供的点云消息类型sensor_msgs::PointCloud2类型,因此采用这种方式就需要把LIO-SAM中所有的接受点云数据类型改成livox_ros_driver::CustomMsg类型。

优缺点:

优点:不需要修改LIO-SAM框架,只需要修改接受点云数据的类型,不会损耗LIO-SAM的运行效率。

缺点:修改接受点云数据的类型后只能适配Livox的激光雷达,其余厂商的雷达数据将不能使用。

方式二:修改LIO-SAM特征提取的方法


待更新

 

要将DCL-SLAM中的LIO-SAM代码适配Livox Mid-360激光雷达,需要进行以下几个步骤: ### 1. **硬件配置** -360雷达正确安装并连接到机器人系统上。 - **驱动程序**:安装Livox雷达的驱动程序,并确保雷达能够正常工作,能够通过API获取点云数据。 ### 2. **软件环境** - **依赖项**:确保所有必要的依赖项已经安装,包括ROS(推荐使用ROS Melodic或Noetic)、PCL(Point Cloud Library)、Eigen等。 - **编译工具**:安装CMake和编译工具链,确保可以编译C++代码。 ### 3. **修改LIO-SAM代码** - **点云消息类型**:Livox Mid-360雷达可能使用不同的点云消息类型。通常情况下,Livox雷达使用`sensor_msgs::PointCloud2`消息类型。你需要在LIO-SAM代码中找到处理点云的部分,并确保它能够处理这种消息类型。 ```cpp // 在LIO-SAM代码中找到处理点云的部分 void handleLaserCloud(const sensor_msgs::PointCloud2ConstPtr &laserCloudMsg) { // 将sensor_msgs::PointCloud2转换为pcl::PointCloud<pcl::PointXYZI> pcl::fromROSMsg(*laserCloudMsg, *laserCloud); // 继续处理点云... } ``` - **参数调整**:Livox Mid-360雷达的参数可能与VLP-16或其他雷达不同。你需要调整LIO-SAM中的参数以适应Mid-360雷达的特性,例如扫描频率、点云密度等。 ```yaml # lio_sam_config.yaml laser_frame_id: "livox_frame" laser_odom_frame_id: "lidar_odom" world_frame_id: "world" laser_min_range: 0.4 laser_max_range: 100.0 laser_min_height: -2.0 laser_max_height: 2.0 ``` - **坐标系对齐**:确保Livox Mid-360雷达的坐标系与其他传感器(如IMU)的坐标系对齐。这通常需要在TF(Transform Listener)中进行设置。 ```cpp // 在TF设置中添加Livox雷达的坐标系 static tf::TransformBroadcaster br; tf::Transform transform; transform.setIdentity(); transform.setRotation(tf::createQuaternionFromRPY(0, 0, 0)); transform.setOrigin(tf::Vector3(0, 0, 0)); br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", "livox_frame")); ``` ### 4. **测试和调试** - **启动节点**:编写一个ROS launch文件来启动LIO-SAM节点和其他必要的节点(如Livox雷达驱动节点、IMU节点等)。 ```xml <launch> <!-- 启动Livox雷达驱动 --> <node pkg="livox_ros_driver" type="livox_ros_node" name="livox_driver" output="screen"> <param name="data_src" value="1"/> <param name="publish_freq" value="10.0"/> <param name="frame_id" value="livox_frame"/> </node> <!-- 启动LIO-SAM --> <node pkg="lio_sam" type="lio_sam" name="lio_sam" output="screen"> <remap from="/cloud_in" to="/livox/lidar"/> <rosparam file="$(find lio_sam)/config/lio_sam_config.yaml" command="load"/> </node> </launch> ``` - **验证结果**:运行上述launch文件,检查点云是否正确显示,以及LIO-SAM是否能够正常工作。可以通过RViz查看点云和轨迹。 ### 5. **性能优化** - **参数调优**:根据实际测试结果,进一步调整LIO-SAM的参数,以提高定位和建图的精度。 - **算法优化**:如果有必要,可以对LIO-SAM算法进行优化,以更好地适应Livox Mid-360雷达的特点。 通过以上步骤,你应该能够成功地将LIO-SAM代码适配Livox Mid-360激光雷达。如果有任何具体的问题或错误,请提供详细的错误信息以便进一步诊断和解决。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jiqiang_z

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值