evo测评A-LOAM算法(基于KITTI数据集)

使用evo测评SLAM算法可以是多角度的,例如轨迹评估,绝对位姿误差评估、相对位姿误差评估等,这些就交给读者自行研究,写这篇文章主要是帮助大家梳理一下A-LOAM算法评估流程。

1. KITTI数据集转bag

因为A-LOAM算法需要播放数据包,所以我们在运行A-LOAM算法时首先需要将KITTI数据集转成.bag文件。

关于KITTI数据中点云bin文件转成rosbag包的方法,大家用的最多的应该是被传得最多的阿里员工开发的转化工具lidar2rosbag_KITTI,github链接如下:

https://github.com/AbnerCSZ/lidar2rosbag_KITTI

安装就不讲了,直接创建工作空间和src文件夹,在src文件中git clone,然后在工作空间目录下catkin_make,使用前先source一下即可。

这里主要讲一下该功能包的使用,打开程序可以看到,读取KITTI数据集文件目录是写好了的:

所以按照这个目录去存储KITTI数据集即可,例如笔者在测评A-LOAM时用了KITTI05序列,相应的存储目录为:

其中,velodyne文件夹中存放点云.bin文件。

在进行使用时,需要先开启roscore。

然后,打开终端:

  1. source ./devel/setup.bash
  2. rosrun lidar2rosbag lidar2rosbag /home/xxx/data/KITTI/dataset/sequences/05/ 05

补充说明:第2行语句中,第一个05对应的是KITTI数据集序列号和存放目录号,第二个05是生成的.bag文件名,可以更改。

2. 保存A-LOAM发布的里程计话题数据(tum格式)

可以在A-LOAM算法中laserMapping文件中直接进行数据读取和写入操作,然后将当前帧添加到map坐标系后,发布的当前帧点云到map坐标下的里程计信息保存到.txt。

但笔者更倾向于订阅话题节点进行数据存储,今天在这里主要也是介绍这种方法。A-LOAM中需要订阅的里程计话题为“/aft_mapped_to_init”,所以我们需要订阅该话题,保存相应的时间戳和数据到.txt文件中去,因此保存的格式为tum(包含了时间戳)。

在这里,尊重原创,附上笔者当时借鉴的链接:

用于evo评估的里程计轨迹保存方法_evo_traj 保存对齐后的轨迹_dear小王子的博客-CSDN博客文章浏览阅读1.2k次,点赞4次,收藏37次。evo评估方法(里程计转tum格式的txt)_evo_traj 保存对齐后的轨迹https://blog.csdn.net/zhaohaowu/article/details/125340231?spm=1001.2014.3001.5506然后附上此次用到的.cpp代码:

  • #include <iostream>
    #include <string>
    #include <fstream>
    #include <ros/ros.h>
    #include <nav_msgs/Odometry.h>
    
    using namespace std;
    
    //结合自己目录进行修改
    string ALOAM_file = "/home/wangchao/odom_evo/ALOAM.txt";
    fstream aloam_file;
    
    void aloam_handler(const nav_msgs::Odometry::ConstPtr& msgIn)
    {
        nav_msgs::Odometry data = *msgIn;
        static int flag=1;
        static double stamp_init;
        if(flag==1){
            stamp_init = data.header.stamp.toSec();
            flag=0;
        }
        aloam_file << fixed << data.header.stamp.toSec()-stamp_init   << " "   << data.pose.pose.position.x    << " " << data.pose.pose.position.y << " " 
                << data.pose.pose.position.z    << " "   << data.pose.pose.orientation.x << " " << data.pose.pose.orientation.y << " " 
                << data.pose.pose.orientation.z << " " << data.pose.pose.orientation.w   << std::endl;
    }
    
    int main(int argc, char** argv)
    {
        ros::init(argc, argv, "odom2txt2");
        ros::NodeHandle nh;
    
        aloam_file.open(ALOAM_file, ios::out);
    
        ros::Subscriber sub_aloam = nh.subscribe<nav_msgs::Odometry>("/aft_mapped_to_init", 1000, &aloam_handler, ros::TransportHints().tcpNoDelay());
    
        ROS_INFO("\033[1;32m----> odom2txt start.\033[0m");
        ros::spin();
    
        return 0;
    }

注意:请根据自己目录修改代码中写入文件的目录和文件名。

相应的CMakeLists.txt也比较简单,读者只需要像往常一样创建功能包,添加.cpp即可,创建功能包时依赖项为roscpp rospy std_msgs即可,然后没有的在CMakeLists.txt中添加即可,笔者的CMakeLists.txt文件直接参照A-LOAM的依赖项进行的:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  geometry_msgs
  nav_msgs
  sensor_msgs
  rosbag
  image_transport
  cv_bridge
  tf
)

其他没有什么需要注意的,正常修改add_executable和target_link_libraries就行了。

3. evo评估A-LOAM

直接放上使用的语句:

语句1:

evo_traj tum --ref=gt05_tum.txt ALOAM.txt --plot --plot_mode=xyz --align --correct_scale

gt05_tum.txt为kitti真值tum格式文件。

参数说明:

 - 自动对齐  --align 或者 -a
 - 尺度校准  --correct_scale 或者 -s
 - 自动对齐且尺度校准  --align --correct_scale 或者 -as

语句2:

evo_rpe tum ALOAM.txt gt05_tum.txt -r trans_part -va --plot --plot_mode xyz --save_plot  /home/wangchao/kitti_result/05.pdf  --save_results /home/wangchao/kitti_result/05.zip

语句2中指定了目录对运行结果进行保存,方便后续操作。

如果需要KITTI真值tum格式文件,可以使用这个链接:

链接: https://pan.baidu.com/s/17hvZyQ3yAw74H1JtJ3OvsQ?pwd=tsnm 提取码: tsnm

  • 6
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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的运行效果进行评估和调试。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值