• hdl-graph-slam怎么保存tum格式轨迹


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 li_yu_ang 2024-04-17 20:53 采纳率: 0% 浏览 2 首页/ 人工智能 / hdl-graph-slam怎么保存tum格式轨迹 自动驾驶 请问hdl-graph-slam怎么保存tum格式轨迹并使用EVO进行评估嘞,SLAM指导 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    5条回答 默认 最新

    • GISer Liu 2024-04-17 21:42
      关注

      该回答引用自GPT-3.5,由博主GISer Liu编写:

      针对你的问题,我可以提供以下解决思路和解决方案:

      解决思路:

      1. 了解TUM格式 :首先要了解TUM格式的定义和结构,这是一种常用的轨迹数据格式,包含时间戳、位姿信息等。
      2. 保存轨迹数据 :在hdl-graph-slam中,需要将SLAM得到的轨迹数据保存为TUM格式的文件。这涉及将SLAM输出的轨迹数据按照TUM格式进行组织和保存。
      3. 使用EVO进行评估 :EVO是一种用于评估SLAM轨迹的工具,它支持TUM格式的输入数据。因此,我们可以使用EVO来评估hdl-graph-slam生成的轨迹。

        解决方案:

        1. 保存轨迹数据为TUM格式:

        在hdl-graph-
        slam的代码中找到保存轨迹数据的部分,将其修改为按照TUM格式保存。一般来说,TUM格式的每一行应包含时间戳(单位:秒)、位置坐标(x、y、z)和四元数表示的旋转信息(qw、qx、qy、qz)。你需要修改代码以确保输出的轨迹数据符合TUM格式的要求。
        pythonCopy code
        import numpy as np
        # 示例代码,假设poses是SLAM输出的位姿列表,每个元素为[x, y, z, qw, qx, qy, qz]
        poses = [...] 
        # 保存为TUM格式的文件
        with open('trajectory.tum', 'w') as 
        

      如果该回答解决了您的问题,请采纳!如果没有,请私信联系或评论您的疑惑

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-04-17 22:34
      关注

      【相关推荐】




      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
      评论
    • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-17 20:53
      关注

      引自免费微信小程序:皆我百晓生

      在使用HDL Graph-SLAM进行SLAM后,要将路径数据保存为TUM格式,并使用EVO进行评估,你需要按照以下步骤操作:

      1. 安装依赖库:

        • 首先确保已经安装了Eigen、g2o、Ceres Solver等必要的库。
        • 为了使用EVO,你需要安装EVO工具包。可以通过以下命令在GitHub上克隆仓库并构建:
          git clone https://github.com/paolomonti/Evo.git
          cd Evo
          mkdir build
          cd build
          cmake ..
          make
          
      2. 修改HDL Graph-SLAM源码:

        • 打开HDL Graph-SLAM的源码,找到负责输出轨迹的部分(通常是 slam_system.cpp 或者 slam_system.h)。你需要添加一个函数来导出轨迹到TUM格式。
      3. 编写TUM格式输出函数: 在slam_system.h中添加一个新的函数声明,例如:

        void saveTrajectoryToTUM(const std::string& filename, const Eigen::Matrix4d& pose);
        

        然后在slam_system.cpp文件中实现这个函数,内容如下:

        void slam_system::saveTrajectoryToTUM(const std::string& filename, const Eigen::Matrix4d& pose) {
            std::ofstream output(filename);
            if (!output.is_open()) {
                throw std::runtime_error("Failed to open file for writing.");
            }
        
            // 假设你有一个包含所有关键帧姿态的向量 poses_
            int num_keyframes = poses_.size();
            for (int i = 0; i < num_keyframes; ++i) {
                Eigen::Matrix4d current_pose = poses_[i];
                Eigen::Vector3d position(current_pose(0, 3), current_pose(1, 3), current_pose(2, 3));
                Eigen::Quaterniond orientation(current_pose.block<3, 3>(0, 0));
        
                // 写入TUM格式
                output << "timestamp," << i << "," << position.x() << "," << position.y() << "," << position.z() << "," << orientation.w() << "," << orientation.x() << "," << orientation.y() << "," << orientation.z() << "\n";
            }
            output.close();
        }
        
      4. 调用新函数保存轨迹: 在你的主程序中,在完成SLAM后调用这个新函数来保存轨迹,例如:

        slam_system slam;
        // ... 运行SLAM算法 ...
        slam.saveTrajectoryToTUM("trajectory.txt", slam.getLatestPose());
        
      5. 使用EVO进行评估:

        • 将刚刚保存的"trajectory.txt"文件复制到EVO的源码目录下的data文件夹中。
        • 执行以下命令运行EVO,评估SLAM结果:
          ./evo data/trajectory.txt --odom odom.txt --gt gt.txt --plot
          
        • odom.txt是你的odom数据(如果有的话),gt.txt是地面真实轨迹(如果有参考的话)。

      这样就完成了HDL Graph-SLAM轨迹的TUM格式保存以及EVO评估的过程。注意,如果你的系统有其他特定的数据结构或接口,你可能需要根据实际情况调整上述代码。此外,确保你理解了每个步骤,并且对你的代码进行了适当的测试。

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-04-17 20:53
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      解答: hdl-graph-slam是一个基于Lidar的SLAM算法,可以用于在室内或室外环境中进行地图构建和定位。如果要将hdl-graph-slam的轨迹保存为tum格式并使用EVO进行评估,则需要遵循以下步骤: 步骤一:修改hdl_localization.cpp文件,加入保存轨迹代码: 在hdl_localization.cpp文件中,找到LocalizationNode::spinOnce()函数,加入以下代码: ofstream f; f.open("/path/to/save/tum/trajectory.txt",std::ios::app); f << fixed << setprecision(6) << t << " " << p(0) << " " << p(1) << " " << p(2) << " " << q.w() << " " << q.x() << " " << q.y() << " " << q.z() << endl; f.close(); 其中,/path/to/save/tum/trajectory.txt是你要保存轨迹的文件路径。 步骤二:编译并运行hdl-graph-slam 使用以下命令编译hdl-graph-slam: catkin_make 然后运行hdl_localization节点: rosrun hdl_localization hdl_localization_node 步骤三:使用EVO进行评估 EVO是一个用于评估SLAM算法性能的工具,可以用来比较不同算法的性能。要使用EVO评估hdl-graph-slam生成的轨迹,需要先将轨迹转换为TUM格式。可以使用以下Python脚本将hdl-graph-slam生成的轨迹转换为TUM格式: import numpy as np f = open('/path/to/hdl/graph/slam/trajectory', 'r') lines = f.readlines() f.close() f = open('/path/to/hdl/graph/slam/trajectory_tum.txt', 'w') for i in range(len(lines)):
      if i == 0:
          continue
      data = lines[i].strip().split()
      t = float(data[0])
      x = float(data[1])
      y = float(data[2])
      z = float(data[3])
      qw = float(data[4])
      qx = float(data[5])
      qy = float(data[6])
      qz = float(data[7])
      pos = [x, y, z]
      quat = [qw, qx, qy, qz]
      T = np.eye(4)
      T[0:3,0:3] = quat_to_rotmat(quat)
      T[0:3,3] = pos
      line = "{} {:.9f} {:.9f} {:.9f} {:.9f} {:.9f} {:.9f} {:.9f}\n".format(i, t, pos[0], pos[1], pos[2], quat[0], quat[1], quat[2], quat[3])
      f.write(line)
      

      f.close() 其中,/path/to/hdl/graph/slam/trajectory是hdl-graph-slam生成的轨迹文件路径,/path/to/hdl/graph/slam/trajectory_tum.txt是转换后的TUM格式轨迹文件路径。 然后使用EVO工具评估轨迹,可以使用以下命令: evo_traj tum /path/to/hdl/graph/slam/trajectory_tum.txt --ref=groundtruth.tum --plot --save_plot plot.png 其中,/path/to/hdl/graph/slam/trajectory_tum.txt是上一步生成的TUM格式轨迹文件,groundtruth.tum是参考轨迹文件,--plot参数表示绘制轨迹图,--save_plot plot.png表示将轨迹图保存为plot.png文件。

      展开全部

      评论
    • Kwan的解忧杂货铺 Java领域优质创作者 2024-04-17 20:53
      关注

      晚上好🌙🌙🌙
      本答案参考ChatGPT-3.5

      要保存hdl-graph-slam的轨迹为tum格式并使用EVO进行评估,你可以按照以下步骤进行操作:

      1. 保存轨迹为tum格式:hdl-graph-slam默认输出轨迹为PoseGraph格式,需要将其转换为tum格式。tum格式是一种常用的轨迹数据格式,每行表示一个时刻的位姿数据,格式为timestamp tx ty tz qx qy qz qw,其中timestamp是时间戳,tx ty tz是平移向量,qx qy qz qw是旋转四元数。你可以使用一个文本编辑器(如记事本)打开PoseGraph格式的轨迹文件,并按照tum格式的要求进行转换,然后保存为一个新的文件。

      2. 安装EVO工具:EVO是一个用于评估SLAM算法的工具包,它可以计算轨迹的一些评估指标,例如ATE(平均轨迹误差)和RPE(相对姿态误差)。你可以在EVO的GitHub仓库(https://github.com/MichaelGrupp/evo)中找到相关的安装说明。

      3. 使用EVO评估轨迹:安装完EVO后,你可以使用EVO的命令行工具来评估轨迹。首先,将hdl-graph-slam转换后的tum格式轨迹文件和真实轨迹文件(例如TUM RGB-D数据集提供的groundtruth文件)放在同一个文件夹下。然后,打开命令行工具,进入到这个文件夹路径下,执行以下命令来评估轨迹:

      evo_ape tum groundtruth.txt estimated.txt --plot --save_results results.json
      

      其中,tum表示使用tum格式轨迹评估,groundtruth.txt是真实轨迹文件,estimated.txt是hdl-graph-slam转换后的tum格式轨迹文件,--plot表示生成可视化的误差图,--save_results表示保存评估结果到results.json文件中。

      1. 查看评估结果:评估完成后,可以打开results.json文件来查看评估结果。你可以查看ATE和RPE等指标的数值,并根据需要对轨迹进行进一步的分析。

      通过以上步骤,你可以将hdl-graph-slam的轨迹保存为tum格式,并使用EVO进行轨迹评估。希望对你有帮助!

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Jupyter lab 配置
    Unity中Shader的Lambert光照的实现
    asp.net blazor集成TinyMCE.Blazor
    WebDAV之π-Disk派盘 + 小书匠
    fwknop服务端编译和使用
    Java语法1
    JDK 动态代理
    学生信息管理系统(教务选课系统)
    暴雨信息|低碳发展共拓数字能源产业绿色空间
    程序员没有工作经验怎么办?能不能找到工作?
  • 原文地址:https://ask.csdn.net/questions/8090249