LOAM、Lego-liom、Lio-sam轨迹保存,与Kitti数据集真值进行评估

这篇具有很好参考价值的文章主要介绍了LOAM、Lego-liom、Lio-sam轨迹保存,与Kitti数据集真值进行评估。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

   一

        首先需要保存轨迹,轨迹保存参考下面的代码,最好自己添加一个节点(如下图),用新节点来订阅和保存轨迹至txt文件,因为直接在算法的线程中加入此步骤我试了好像保存不了,好像是在不同线程间的参数传递格式的问题(也可能是我个人的问题)。

        LOAM、Lego-liom、Lio-sam轨迹保存,与Kitti数据集真值进行评估

与Kitti数据集真值评估需要将kitti 类型轨迹转化为tum格式的轨迹,用evo转化需要下载evo源码。

(223条消息) KITTI数据集基准、转换成tum以及十个groundtruth对应图_kitti转tum_小海盗haner的博客-CSDN博客

(223条消息) 【KITTI】KITTI数据集简介(四) — 标定校准数据calib_tr_velo_to_cam_Coding的叶子的博客-CSDN博客

     a_loam在节点中订阅话题/aft_mapped_to_init,如下。lego同样操作订阅话题 /aft_mapped_to_init,lio-sam要订阅lio_sam/mapping/odometry话题(或者lio_sam/mapping/odometry_incremental,这两个都行,odometry_incremental是odometry使用IMU加权过的,差别不大),这些都可以在算法的Map节点里找到。我看很多博客上对lego/lio的欧拉角进行了转化再保存,实际上它们都有自己发布的odom信息,直接订阅就可以保存了。

void path_save(nav_msgs::Odometry odomAftMapped ){

	    //保存轨迹,path_save是文件目录,txt文件提前建好,/home/xxx/xxx.txt,
   			std::ofstream pose1(“path_save”, std::ios::app);
			pose1.setf(std::ios::scientific, std::ios::floatfield);
			pose1.precision(9);
	
			static double timeStart = odomAftMapped.header.stamp.toSec();
			auto T1 =ros::Time().fromSec(timeStart) ;
			pose1<< odomAftMapped.header.stamp -T1<< " "
              << -odomAftMapped.pose.pose.position.y << " "
              << odomAftMapped.pose.pose.position.z << " "
              << odomAftMapped.pose.pose.position.x << " "
              << odomAftMapped.pose.pose.orientation.x << " "
              << odomAftMapped.pose.pose.orientation.y << " "
              << odomAftMapped.pose.pose.orientation.z << " "
              << odomAftMapped.pose.pose.orientation.w << std::endl;
			pose1.close();
            
}

int main(int argc, char **argv){
    ros::init(argc, argv, "path_save");
    ros::NodeHandle nh;
    ros::Subscriber save_path = nh.subscribe<nav_msgs::Odometry>("/aft_mapped_to_init",     100, path_save);	    //保存轨迹,a_loam直接订阅话题/aft_mapped_to_init。

    ros::spin();
     }

        轨迹文件的时间戳得按(xxx.header.stamp -T1)这样写,保存的是当前时间与第一帧位置时间的差值,因为Kitti真值的轨迹时间戳是这样保存的,与真值时间戳不同步之后没法评估。数据的z、y、z写入顺序是人为的将坐标轴与Kitti数据集的对齐了(也可以按原来的写,或者用左乘外参矩阵进行调整,因为之后会用evo按时间戳对齐进行评估),如下图一KItti真值是x_z轴的,你跑出来可能是横着的,但是只要时间戳没问题你还是可以把它们对齐(图二)。对齐命令如下,具体评估可以看以下博客。 

(223条消息) 轨迹评估工具使用总结(一) evo从安装到入门_evo评估工具怎么对齐起点_Techblog of HaoWANG的博客-CSDN博客

evo_traj tum 07_tum.txt lego_07.txt  --ref=07_tum.txt -p -a

LOAM、Lego-liom、Lio-sam轨迹保存,与Kitti数据集真值进行评估

图一

 LOAM、Lego-liom、Lio-sam轨迹保存,与Kitti数据集真值进行评估

 图二

        Kitti数据集是有外参标定信息的就是lidar->camera(world)的参数矩阵,也可以使用输出值左乘外参矩阵,参数如下,R为旋转,T为位移。

R: 7.027555e-03 -9.999753e-01 2.599616e-05 -2.254837e-03 -4.184312e-05 -9.999975e-01 9.999728e-01 7.027479e-03 -2.255075e-03
T: -7.137748e-03 -7.482656e-02 -3.336324e-01

 然后把要输出的位置同样放进矩阵里,用外参矩阵进行调整就行了。也可以不旋转,只进行平移,因为evo可以根据时间戳对齐,不需要坐标轴一致。实际测试后发现加不加外参差别好像不大。

(lidar->camera(world))  
Eigen::Vector3d pose_t;  
Eigen::Matrix3d  pose_R;            
  pose_t <<-7.137748e-03 ,-7.482656e-02, -3.336324e-01;
  pose_R <<7.027555e-03, -9.999753e-01, 2.599616e-05,
           -2.254837e-03, -4.184312e-05 ,-9.999975e-01,
           9.999728e-01 ,7.027479e-03 ,  -2.255075e-03
  
Eigen::Vector3d pose;
        pose(0)=odomAftMapped.pose.pose.position.x;
        pose(1)=odomAftMapped.pose.pose.position.y;
        pose(2)=odomAftMapped.pose.pose.position.z;
Eigen::Vector3d pose_s;
   //可以只 +pose_t
        pose_s = pose_R * pose + pose_t;

 总结

                其实整体步骤并不多,但中间测试时遇到过很多问题,比如主线程中无法将位姿写入轨迹文件,保存的归家与真值时间戳的对齐问题,轨迹图不在一个平面上的问题等。但后来发现只要将轨迹时间戳相互对齐,就不用管轨迹坐标轴角度的不同,直接用evo根据时间戳对齐即可。文章来源地址https://www.toymoban.com/news/detail-401968.html

到了这里,关于LOAM、Lego-liom、Lio-sam轨迹保存,与Kitti数据集真值进行评估的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • A-loam运行kitti及轨迹保存

    目录 运行kitti数据集 方法一、使用rosbag播放 方法二、使用kitti_helper.launch 故障:rviz界面没有图像 查看rosbag发布的topic a-loam代码中所接收的topic rqt 启动rqt 查看rqt界面 保存轨迹 方法一、简单的  方法二、使用ros::Subscriber和回调函数 方法三、创建新节点用于保存轨迹 小结 总结

    2024年02月15日
    浏览(42)
  • LIO-SAM 论文阅读

    论文链接 LIO-SAM 0. Abstract 提出了一种通过平滑和映射进行紧耦合激光雷达惯性里程计的框架 LIO-SAM,它实现了高精度、实时的移动机器人轨迹估计和地图构建 LIO-SAM 在因子图上制定激光雷达惯性里程计,允许将多种相对和绝对测量(包括闭环)从不同来源作为因子合并到系统

    2024年01月25日
    浏览(42)
  • LIO-SAM学习与运行测试数据集

    环境配置: ubuntu18.04, ros1(ros-melodic) 注: 在ros1的kinetic, melodic, noetic(https://github.com/TixiaoShan/LIO-SAM/issues/206)上被测试过; ros1的github代码: https://github.com/TixiaoShan/LIO-SAM/tree/master ros2的github代码: https://github.com/TixiaoShan/LIO-SAM/tree/ros2 论文:LIO-SAM:Tightly-coupled Lidar Inertial Odometry vis Smoothin

    2023年04月16日
    浏览(42)
  • 3d激光SLAM:LIO-SAM框架---位姿融合输出

    LIO-SAM的全称是:Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping 从全称上可以看出,该算法是一个紧耦合的雷达惯导里程计(Tightly-coupled Lidar Inertial Odometry),借助的手段就是利用GT-SAM库中的方法。 LIO-SAM 提出了一个利用GT-SAM的紧耦合激光雷达惯导里程计的框架。 实现了

    2023年04月20日
    浏览(39)
  • LIO-SAM从0到1运行自己的数据集

    ​ 笔者在学习LIO_SAM时踩了不少坑,在此记录从开始到最后整个踩坑过程。文中参考了很多大佬的文章,我只是个搬运工。 可以直接跳到第二部分从0到1实现 有疑问可以随时联系我,欢迎交流。 ⼀种激光惯导紧耦合的SLAM框架,可在室内和室外实现效果不错的建图。 (1) Image

    2024年02月02日
    浏览(40)
  • 《LIO-SAM阅读笔记》-为何要引入增量式里程计?

    前言: LIO-SAM在后端中同时维护着两个里程计,一个是增量式里程计,一个是优化后的里程计,其中优化后的里程计是经过imu、回环、gps因子图联合优化后的结果,是整个系统中最准确的位姿估计,那么为什么还需要维护增量式里程计呢? 以下是我的理解 ,不一定正确,如有

    2024年01月22日
    浏览(46)
  • Ubuntu20.04 ROS noetic中编译和运行LIO-SAM

    本文是对自己学习过程的一个记录和总结,如果内容有误,请大家指点,感谢。         本文是在已经安装好ROS环境中进行的,不需要提前安装其他库,只需按照步骤进行操作,便能完成LIO-SAM的编译和运行,并且每一步都有我执行时的截图进行参考。 1.【创建工作空间】

    2024年03月24日
    浏览(57)
  • 多传感器融合SLAM --- 10.LIO-SAM前端代码分析 imuPreintegration.cpp

    目录 0.流程图 1.main函数 2 IMU预积分类 2.1 代码详细注释 2.2 分块讲

    2024年02月07日
    浏览(41)
  • SLAM学习笔记(一)Lio-sam安装与运行 ubuntu18.04+ros melodic

    三维激光SLAM入门 Lio-sam安装与运行 ubuntu18.04+ros melodic 最近在学习激光SLAM,本文将介绍了ubuntu18.04+ros melodic下部署复现LIO-SAM的过程。2020年TIxiaoshan在IROS发表了Lio-sam算法,LiO-sam是Lego-Loam的拓展版本,添加了IMU预积分因子和GPS因子,Loam与Lego-Loam纯靠激光雷达点云信息SLAM,Lio-sa

    2023年04月09日
    浏览(136)
  • Ubuntu 20.04 与 ROS noetic安装 gtsam 编译 LIO-SAM 的适配版本

    本文简介在 Ubuntu 20.04 下以 ROS noetic 为基础安装 GTSAM 并成功编译 LIO-SAM 的适配版本。 安装前请检查cmake 和boost版本,Ubuntu 20.04.06自带cmake(= 3.0) 和libboost-all-dev(= 1.65)已满足要求。编译LIO-SAM适配版本的其它依赖包也已满足要求(主要是PCL, Eigen和OpenCV等, 详见其CMakeList)。 当前

    2024年02月13日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包