weixin_56337147 2023-04-25 09:37 采纳率: 29.4%
浏览 16
已结题

为什么ORB-SLAM2处理完成相机数据后,时间戳变少?

为什么ORB-SLAM2处理完成相机数据后,时间戳变少?
比如,800张图片,处理后只有300个位置和姿态?

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-25 14:55
    关注
    • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/1090379
    • 你也可以参考下这篇文章:ORB-SLAM2源码解读(2.2):单目初始化、匀速运动模型跟踪、跟踪参考关键帧、跟踪局部地图
    • 除此之外, 这篇博客: ORB_SLAM2 源码解析 ORB_SLAM2简介(一)中的 2、三个线程是怎样运转的 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    •   LocalMappingLoopClosing线程都是靠Tracking线程产生的关键帧而运转的,在Tracking线程没有产生关键帧时,LocalMappingLoopClosing线程都是处于空转状态,直到Tracking线程产生关键帧时,LocalMapping、LoopClosing线程和Tracking线程一起运转。

      // Tracking线程主函数
      void Tracking::Track() {
      	// 进行跟踪
          // ...
      	
          // 若跟踪成功,根据条件判定是否产生关键帧
          if (NeedNewKeyFrame())
              // 产生关键帧并将关键帧传给LocalMapping线程
              KeyFrame *pKF = new KeyFrame(mCurrentFrame, mpMap, mpKeyFrameDB);
              mpLocalMapper->InsertKeyFrame(pKF);	
      }
      
      // LocalMapping线程主函数
      void LocalMapping::Run() {
      	// 死循环
          while (1) {
              // 判断是否接收到关键帧
              if (CheckNewKeyFrames()) {
                  // 处理关键帧
                  // ...
                  
                  // 将关键帧传给LoopClosing线程
                  mpLoopCloser->InsertKeyFrame(mpCurrentKeyFrame);
              }
              
              // 线程暂停3毫秒,3毫秒结束后再从while(1)循环首部运行
              std::this_thread::sleep_for(std::chrono::milliseconds(3));
          }
      }
      
      // LoopClosing线程主函数
      void LoopClosing::Run() {
          // 死循环
          while (1) {
              // 判断是否接收到关键帧
              if (CheckNewKeyFrames()) {
                  // 处理关键帧
                  // ...
              }
      
              // 查看是否有外部线程请求复位当前线程
              ResetIfRequested();
      
              // 线程暂停5毫秒,5毫秒结束后再从while(1)循环首部运行
              std::this_thread::sleep_for(std::chrono::milliseconds(5));
          }
      }
    • 以下回答由chatgpt基于相关博客总结生成:

      这个问题可能是因为ORB-SLAM2程序处理过程中丢失了一些帧,导致相应的时间戳也丢失了一部分,所以最终只能获取300个位置和姿态信息。解决该问题可以进行以下步骤: 1. 检查ORB-SLAM2程序处理过程中是否有丢帧现象,可以通过打印日志来观察,并进行一定的处理,如跳帧等,确保所有的帧都被处理上。 2. 对于已经丢失的帧,可以通过插值的方式来进行数据补全,即根据相邻帧的位置和姿态信息来推算出丢失帧的位置和姿态信息,从而将数据完整性恢复。 3. 检查程序中时间戳的处理方式,确保在处理过程中不会丢失原始数据的时间戳,可以在代码中添加必要的保护机制,如数据备份等。 4. 对现有的数据进行分析,找出问题所在,如丢帧或者时间戳处理不当等,并进行相应的修改和优化,以提高程序的稳定性和可靠性。

      可能需要进一步分析程序代码和数据,才能确定具体的解决方案。

    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 7月11日
  • 创建了问题 4月25日

悬赏问题

  • ¥15 在centos7安装conda
  • ¥15 c#调用yolo3 dll文件获取的数据对不上
  • ¥20 WPF 如何实现多语言,label 和cs(live Charts)中是否都能翻译
  • ¥15 STM32F103上电短路问题
  • ¥15 关于#单片机#的问题:以ATMEGA128或相近型号单片机为控制器设计直流电机调速的闭环控制系统(相关搜索:设计报告|软件设计|流程图)
  • ¥15 打开软件提示错误:failed to get wglChoosePixelFormatARB
  • ¥15 (标签-python|关键词-char)
  • ¥15 python+selenium,在新增时弹出了一个输入框
  • ¥15 苹果验机结果的api接口哪里有??单次调用1毛钱及以下。
  • ¥20 学生成绩管理系统设计