fast lio 运行mid360采集的数据,并保存每一帧的点云PCD和位姿

首先我们看到在map_incremental中存在一个保存每一帧PCD文件的代码,因此想利用改代码。

如何修改呢?

一. 改每一帧无畸变点云的PCD的保存代码

    /**************** save map ****************/
    /* 1. make sure you have enough memories
    /* 2. noted that pcd save will influence the real-time performences **/
    if (pcd_save_en)
    {
        int size = feats_undistort->points.size();
        PointCloudXYZI::Ptr laserCloudWorld( \
                        new PointCloudXYZI(size, 1));

        for (int i = 0; i < size; i++)
        {
            // 原来的程序,直接变换到世界坐标系下
            //RGBpointBodyToWorld(&feats_undistort->points[i], \
             //                   &laserCloudWorld->points[i]);

            // 现在改的程序,直接变换到世界坐标系下
            RGBpointBodyLidarToIMU(&feats_undistort->points[i], \
                               &laserCloudWorld->points[i]);
        }
        *pcl_wait_save += *laserCloudWorld;

        static int scan_wait_num = 0;
        scan_wait_num ++;
        if (pcl_wait_save->size() > 0 && pcd_save_interval > 0  && scan_wait_num >= pcd_save_interval)
        {
            pcd_index ++;
            string all_points_dir(string(string(ROOT_DIR) + "PCD1/scans_src_") + to_string(pcd_index) + string(".pcd"));
            pcl::PCDWriter pcd_writer;
            cout << "current scan saved to /PCD1/" << all_points_dir << endl;
            pcd_writer.writeBinary(all_points_dir, *pcl_wait_save);
            pcl_wait_save->clear();
            scan_wait_num = 0;
        }
    }

需要设置的内容为三项,前两项需要在fast-lio/config/mid360.yaml中设置:

1)pcd_save_en 是需要设置为true的;

2)pcd_save_interval需要设置为1(设置为1,表示每一帧保存一次,如果设置为2,就表示每两帧合并成一个pcd文件保存一次),为了和pose对应上,这里就设置为1.

3)由于不需要让点云到IMU世界坐标系下,只需要让点云变换到IMU当前IMU坐标系下,因此:

改为:

            // 原来的程序,直接变换到世界坐标系下
            //RGBpointBodyToWorld(&feats_undistort->points[i], \
             //                   &laserCloudWorld->points[i]);

            // 现在改的程序,直接变换到对应帧的IMU坐标系下
            RGBpointBodyLidarToIMU(&feats_undistort->points[i], \
                               &laserCloudWorld->points[i]);

RGBpointBodyLidarToIMU(&feats_undistort->points[i], &laserCloudWorld->points[i]);表示通过激光雷达和IMU之间的变换矩阵,把当前激光雷达帧数据变换到 当前IMU位姿下。

而RGBpointBodyToWorld(&feats_undistort->points[i],  &laserCloudWorld->points[i]);表示首先把当前激光点云变换到当前IMU坐标系下,再变换到IMU世界坐标系下。

因此需要把 原来的 RGBpointBodyToWorld 改为 RGBpointBodyLidarToIMU

二.改pose的保存

1.写一个函数

void saveOdometryAndFrame()
{
    FILE *fp_odometry;
    string pose_dir = root_dir + "/PCD1/pose_src.txt";
    fp_odometry = fopen(pose_dir.c_str(),"a");
    fprintf(fp_odometry, "%d  %lf  %lf  %lf  %lf  %lf  %lf  %lf \n",
            pcd_index, state_point.pos(0),  state_point.pos(1),state_point.pos(2), geoQuat.w, 
              geoQuat.x,  geoQuat.y,  geoQuat.z);
    fclose(fp_odometry);

}

按照 tx ty tz qw qx qy qz保存数据。

2.把该函数调用写在geoQuat和 state_point赋值之后就可以了,在这里我写到map_incremental()函数之后。

这样就可以得到无畸变的PCD文件和位姿了。为什么是无畸变的呢?因为feats_undistort是经过IMU补偿之后的点呀,所以保存的PCD是无畸变的鸭。

实际测试的过程中,发现:

1.把保存目录PCD改成PCD1,竟然自动生成了PCD1文件夹。

2.保存之前以为保存会影响计算速度,最后发现不影响计算速度,计算帧率还是9/10帧。

经过这两步,我们就得到了每一帧无畸变的点云和位姿。无缝衔接HBA。

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MID360 FAST-LIO2是一种基于Livox激光MID-360雷达和FAST-LIO2激光SLAM算法的建图系统。下面是使用MID360 FAST-LIO2的步骤: 1. 安装Livox激光MID-360 SDK2和ROS2驱动。按照README文件中的说明进行安装。 2. 配置ROS2驱动。livox_mid360_driver_ws工程中,修改livox_ros_driver2/config/MID360_config.json文件中的参数。将cmd_data_ip改为192.168.1.50,将下面的ip改为雷达的IP地址,最后两位为雷达S/N码的最后两位数字。这样配置后,才能发布雷达和IMU的数据。 3. 编译并运行ROS2驱动。在livox_mid360_driver_ws目录下执行以下命令: ```shell catkin_make source ./devel/setup.bash roslaunch livox_ros_driver2 msg_MID360.launch ``` 4. 下载并安装Livox Viewer2。可以从Livox官网的下载页面(https://www.livoxtech.com/downloads)下载Livox Viewer2。 5. 下载并安装LIO-Livox和Livox-Mapping。可以从Livox-SDK的GitHub页面(https://github.com/Livox-SDK/LIO-Livox和https://github.com/Livox-SDK/livox_mapping)下载相应的代码。 6. 配置LIO-Livox。根据LIO-Livox的README文件中的说明进行配置。 7. 启动Livox Viewer2,并连接MID-360雷达。 8. 启动LIO-Livox。在LIO-Livox的工程目录下执行以下命令: ```shell roslaunch lio_livox lio_livox.launch ``` 9. 启动Livox-Mapping。在Livox-Mapping的工程目录下执行以下命令: ```shell roslaunch livox_mapping livox_mapping.launch ``` 通过以上步骤,你就可以使用MID360 FAST-LIO2进行建图了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值