LeGo-LOAM运行KITTI数据集

在上一篇博客:LeGO-LOAM编译和运行的最后,自己给自己挖了个坑。KITTI数据集的运行结果很明显有问题,接下来就要解决这个问题然后完美运行LeGO-LOAM。

一.KITTI数据集的转换

官方的KITTI数据集是连续的数据图片的形式,为了之后的各种测试的方便,先使用工具将KITTI数据集转换成rosbag的形式。

  1. 安装kitti2bag
    kitti2bag项目地址
    pip install kitti2bag
    
  2. 数据集的转换
    提前下载需要的kitti数据集,在项目中我使用的是2011-10-03-0027序列。
    //解压
    unzip 2011_10_03_drive_0027_sync.zip
    unzip 2011_10_03_calib.zip
    //转换
    kitti2bag -t 2011_10_03 -r 0027 raw_synced
    

转换之后会在对应的文件夹下生成kitti_2011_10_03_drive_0027_synced.bag
之后会用到的topic:

/kitti/oxts/imu
/kitti/velo/pointcloud

二、运行

这就是一个非常漫长的过程了。。。


最开始我一直认为是配置文件的问题,所以参照Velodyne官网的信息更改了新的配置文件。

// HDL-64E
extern const int N_SCAN = 64;
extern const int Horizon_SCAN = 1800;
extern const float ang_res_x = 360.0/float(Horizon_SCAN);
extern const float ang_res_y = 0.427;
extern const float ang_bottom = 24.9;
extern const int groundScanInd = 60;//lidar光束在地面下的数量

跑出来的结果还是一团糟。。。


然后去问了问周围的师兄师弟,KITTI数据集最开始的一段时间内IMU的数据是缺失的。
在配置文件里去掉IMU的topic信息
运行结果

得到这个结果就花了我一天的时间。。。。

三、评估

跑这些经典项目的原因是想要对这些项目使用KITTI数据集时候生成的轨迹进行一个评估,所以最后要保存轨迹信息。
但是!!!
我保存轨迹又出错了QAQ


报错信息:

terminate called after throwing an instance of 'pcl::IOException'
  what():  : [pcl::PCDWriter::writeASCII] Input point cloud has no data!

度娘说是因为pcl点云保存的时候路径错误造成的问题,问题出现在所在函数的最开始部分

pcl::io::savePCDFileASCII(fileDirectory + "finalCloud.pcd", *globalMapKeyFramesDS);

我是实在搞不懂到底哪里出了问题,如果有人解决了请告诉我!


因为我只需要轨迹信息,也就是时间戳,xyz,以及旋转四元数。可以只保存这部分的轨迹就可以。
在LeGO-LOAM项目中mapOptmization.cpp文件,cloudKeyPoses6D中保存了一个点对应的位置信息和旋转信息。只需要将其中旋转的欧拉角转换为旋转四元数。

轨迹保存

欧拉角到四元数的转换参照博客,将原有函数改为(参考ORBSLAM3轨迹的保存):

void visualizeGlobalMapThread(){
        ros::Rate rate(0.2);
        while (ros::ok()){
            rate.sleep();
            publishGlobalMap();
        }
        // save final point cloud
        std::cout << "start save final point cloud" << std::endl;
        std::cout << "======================================================" << std::endl;

        ofstream f;
        f.open("/home/l/data/lego_traj.txt");
        f << fixed;
        //std::cout << "traj roll" << cloudKeyPoses6D->points[0].roll << std::endl;
        for(size_t i = 0;i < cloudKeyPoses3D->size();i++)
        {
            float cy = cos((cloudKeyPoses6D->points[i].yaw)*0.5);
            float sy = sin((cloudKeyPoses6D->points[i].yaw)*0.5);
            float cr = cos((cloudKeyPoses6D->points[i].roll)*0.5);
            float sr = sin((cloudKeyPoses6D->points[i].roll)*0.5);
            float cp = cos((cloudKeyPoses6D->points[i].pitch)*0.5);
            float sp = sin((cloudKeyPoses6D->points[i].pitch)*0.5);

            float w = cy * cp * cr + sy * sp * sr;
            float x = cy * cp * sr - sy * sp * cr;
            float y = sy * cp * sr + cy * sp * cr;
            float z = sy * cp * cr - cy * sp * sr;
            //save the traj
            f << setprecision(6) << cloudKeyPoses6D->points[i].time << " " << setprecision(9) << cloudKeyPoses6D->points[i].x << " " << cloudKeyPoses6D->points[i].y << " " << cloudKeyPoses6D->points[i].z << " " << x << " " << y << " " << z << " " << w << endl;
        }

        f.close();
}

评估结果

在这里插入图片描述
在这里插入图片描述
没有回环检测好像结果有点飘??

  • 8
    点赞
  • 60
    收藏
    觉得还不错? 一键收藏
  • 32
    评论
### 回答1: LEGO-LOAM是一种基于激光雷达的室内外定位和地图构建方法。可以用来运行KITTI数据集KITTI数据集是车辆自动驾驶领域的一个常用数据集需要配置好相应的环境并进行编译运行,详细的安装和运行方法可以参考LEGO-LOAM的github页面。 ### 回答2: Lego-LOAM是一种基于激光雷达的SLAM算法,它可以通过对激光雷达扫描数据进行处理,实现对机器人运动及环境地图的估计和建立。Lego-LOAM能够较好地适应小规模场景的建图任务,尤其是在室内环境中具有一定的优势。在Lego-LOAM中,通过将扫描数据进行4D点云数据的拆分,将运动估计问题转化为优化问题,使用了多种传感器数据来进行建图和定位。 Kitti数据集是一个广泛使用的用于自动驾驶和机器人人工智能领域的开源数据集,其包含了激光雷达、相机、GPS和IMU等多种传感器数据,可以为机器人和自动驾驶系统的开发提供相应的数据。因此,Lego-LOAM也可以在Kitti数据集上进行测试和验证。 为了在Kitti数据集运行Lego-LOAM,首先需要下载Kitti数据集,并将数据进行预处理,将数据转换为Lego-LOAM能够识别的格式,可以使用KITTI2Bag工具来进行转换。接着,需要设置运行Lego-LOAM时的相关参数,包括激光雷达的参数、地图的分辨率、点云降采样的程度等。 运行Lego-LOAM时,需要使用ROS来进行相关功能包的调用和运行。可以通过运行命令行来启动Lego-LOAM节点,将现有的参数传递给程序。运行后,Lego-LOAM将会读取Kitti数据集,进行运动估计和建图,并输出相应的结果。可以通过RViz或其他可视化工具来查看建立的地图和机器人的轨迹。 总之,Lego-LOAM可以在Kitti数据集上进行测试和验证,并可以通过设置相关的参数来适应不同的应用场景。同时也可以通过其他工具,如RViz等来进行效果的可视化和分析。 ### 回答3: LEGO-LOAM是一种高效,高精度的激光雷达SLAM算法,适用于车辆或机器人进行自主导航。LEGO-LOAM使用Velodyne VLP-16激光雷达,可以在移动车辆上实时构建地图和定位车辆的确切位置。Kitti数据集是一个常用的用于测试SLAM算法的公共数据集,它包括了各种场景下的激光雷达数据、图像和真实轨迹数据。 要在LEGO-LOAM运行Kitti数据集,首先需要下载数据集数据集可以从互联网上下载,包含了许多不同场景的激光雷达数据、图像和地面真实轨迹数据。然后需要LEGO-LOAM中设置参数。LEGO-LOAM提供了不同的参数配置文件,可以根据需要修改文件中的参数。其中一个重要的参数是Velodyne激光雷达的参数,需要根据使用的激光雷达型号进行设置。另外,还需要设置地面提取的参数和激光雷达的物理参数等。 在参数设置完成后,可以使用LEGO-LOAM中提供的kitti2bag脚本将Kitti数据集转换为ROS bag格式。这个脚本会读取数据集中的激光雷达数据、图像和真实轨迹数据,并将其转换为ROS bag文件,便于在ROS环境中进行处理。然后,在ROS环境下运行LEGO-LOAM节点,在处理ROS bag文件时,LEGO-LOAM会读取激光雷达数据、图像和真实轨迹数据,并在运行过程中实时地构建地图和定位车辆的位置。 最后,可以通过ROS的rviz工具观察LEGO-LOAM的输出结果。其中,激光雷达的点云会被转换为3D地图,并显示出来。同时,LEGO-LOAM会输出车辆在地图中的位置信息。通过观察rviz的输出结果,可以对LEGO-LOAM运行效果进行评估和调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值