当前位置: 首页 > news >正文

选择好的佛山网站建设有什么做动画的网站

选择好的佛山网站建设,有什么做动画的网站,做微网站的第三方登录,内蒙古城乡建设网站换名字了文章目录 0 引言1 整体框架1.1 整体流程 2 System主类2.1 成员函数2.2 成员变量 3 多线程3.1 ORB-SLAM2中的多线程3.2 加锁 0 引言 ORB-SLAM2是一种基于特征的视觉SLAM#xff08;Simultaneous Localization and Mapping#xff09;系统#xff0c;它能够从单个、双目或RBG… 文章目录 0 引言1 整体框架1.1 整体流程 2 System主类2.1 成员函数2.2 成员变量 3 多线程3.1 ORB-SLAM2中的多线程3.2 加锁 0 引言 ORB-SLAM2是一种基于特征的视觉SLAMSimultaneous Localization and Mapping系统它能够从单个、双目或RBGD相机的输入中实时地同时定位相机的位置并构建环境的三维地图。ORB-SLAM2是在ORB-SLAM的基础上进行改进和扩展的版本。 本文主要对ORB-SLAM2的整体框架System主类和多线程进行学习和总结如有理解错误欢迎指正交流。 1 整体框架 1.1 整体流程 ORB-SLAM2整体框架如下图主要流程可以概括为以下几个步骤 特征提取和匹配ORB-SLAM2首先对输入的图像进行特征提取通常使用Oriented FAST and Rotated BRIEF (ORB)算法来检测和描述图像中的特征点。然后它使用特征描述子进行特征匹配以在连续帧之间建立对应关系。 初始化初始化阶段是在初始帧上建立初始地图并估计相机的初始位姿。ORB-SLAM2使用基于单目、双目或RGB-D输入的不同方法来进行初始化。在单目或双目情况下可以使用基于运动的方法或基于平面的方法来估计相机的初始位姿。在RGB-D情况下可以通过三角测量来估计初始位姿。 跟踪跟踪阶段是ORB-SLAM2的核心部分它通过连续图像帧之间的特征匹配和运动估计来实时定位相机。通过追踪特征点的运动ORB-SLAM2可以估计相机的位姿变化并通过优化方法来减小累积误差。 局部地图更新ORB-SLAM2通过局部地图来表示环境的三维结构。在跟踪过程中它会不断地更新和扩展局部地图包括添加新的地图点和关键帧。同时ORB-SLAM2还会执行一些优化步骤如相机位姿优化、地图点优化等以提高地图的一致性和准确性。 回环检测回环检测是为了解决定位漂移和累积误差问题的关键步骤。ORB-SLAM2会在跟踪过程中检测可能的回环并使用回环检测算法来识别和纠正回环。一旦回环被检测到ORB-SLAM2会进行全局优化来提高整体的一致性。 闭环优化闭环优化是在回环检测之后执行的步骤通过全局优化来进一步提高地图的一致性和准确性。ORB-SLAM2会使用所有的关键帧和地图点进行非线性优化以减小累积误差并提高整体的位姿和地图质量。 地图管理ORB-SLAM2会维护一个稠密的局部地图和一个稀疏的全局地图用于表示环境的三维结构。地图管理模块负责管理和更新地图包括删除冗余地图点、关键帧的选择和插入、地图点的筛选等。 以上是ORB-SLAM2的主要流程和步骤。通过不断的特征提取、跟踪、地图更新、回环检测和优化ORB-SLAM2能够实现实时的定位和地图构建并在大范围和长时间的场景中表现出较好的性能。 也有大佬绘制了更详细的流程图以mono_tum.cc的运行流程为例建议下载学习 https://www.jianguoyun.com/p/Dc1MEhMQ-9KLBxjM3uED 此外还有大佬已经中文注释了ORB_SLAM2可以参考理解代码 https://github.com/electech6/ORB_SLAM2_detailed_comments/tree/master 但是在学习以上的核心的主要流程之前需要先熟悉ORB-SLAM2中的System主类和多线程… 2 System主类 System类是ORB-SLAM2系统的主类主要代码是头文件ORB_SLAM2/include/System.h和源文件ORB_SLAM2/src/System.cc分析其主要的成员函数和成员变量。 2.1 成员函数 vscode打开System.cc文件如下可以看到成员函数的大纲 具体成员函数的类型和定义如下 成员函数类型定义System(const string strVocFile, string strSettingsFile, const eSensor sensor, const bool bUseViewertrue)public构造System函数cv::Mat TrackStereo(const cv::Mat imLeft, const cv::Mat imRight, const double timestamp)public跟踪双目相机,返回相机位姿cv::Mat TrackRGBD(const cv::Mat im, const cv::Mat depthmap, const double timestamp)public跟踪RGBD相机,返回相机位姿cv::Mat TrackMonocular(const cv::Mat im, const double timestamp)public跟踪单目相机,返回相机位姿void ActivateLocalizationMode()public开启纯定位模式void DeactivateLocalizationMode()public关闭纯定位模式bool System::MapChanged()public检测地图是否有较大变化void System::Reset()public系统复位void System::Shutdown()public系统关闭void System::SaveTrajectoryTUM(const string filename)public以TUM格式保存相机运动轨迹void System::SaveKeyFrameTrajectoryTUM(const string filename)public以TUM格式保存关键帧位姿void System::SaveTrajectoryKITTI(const string filename)public以KITTI格式保存相机运动轨迹int System::GetTrackingState()public获取追踪器状态vectorMapPoint* System::GetTrackedMapPoints()public获取追踪到的地图点vectorcv::KeyPoint System::GetTrackedKeyPointsUn()public获取追踪到的关键帧的点 2.2 成员变量 主要的成员变量及其定义如下 成员变量类型定义eSensor mSensorprivate传感器类型单目相机MONOCULAR,双目相机STEREO,彩色深度相机RGBDORBVocabulary* mpVocabularyprivateORB字典保存ORB描述子聚类结果KeyFrameDatabase* mpKeyFrameDatabaseprivate关键帧数据库保存ORB描述子倒排索引Map* mpMapprivate地图Tracking* mpTrackerprivate追踪器LocalMapping* mpLocalMapperprivate局部建图器std::thread* mptLocalMappingprivate局部建图线程LoopClosing* mpLoopCloserprivate回环检测器std::thread* mptLoopClosingprivate回环检测线程Viewer* mpViewerprivate查看器FrameDrawer* mpFrameDrawerprivate帧绘制器MapDrawer* mpMapDrawerprivate地图绘制器std::thread* mptViewerprivate查看器线程int mTrackingStateprivate追踪状态std::mutex mMutexStateprivate追踪状态加锁bool mbActivateLocalizationModeprivate开启纯定位模式bool mbDeactivateLocalizationModeprivate关闭纯定位模式std::mutex mMutexModeprivate纯定位模式加锁bool mbResetprivate系统复位std::mutex mMutexResetprivate系统复位加锁 都说ORB-SLAM2有三大线程TrackingLocalMapping和LoopClosing线程可从成员变量中只定义了LocalMapping和LoopClosing线程其实Tracking线程就是Syetem类的主线程构成三大线程虽然Tracking线程在代码实现上是主线程但三者的关系其实是并发的。 3 多线程 刚刚学习到ORB-SLAM2中主要有三大线程其实SLAM项目中一般都会使用多线程由于某个节点可能同时订阅多个消息或多个线程函数共享数据为了防止在多个消息被订阅时发生处理时间过长或阻塞而导致其他回调函数无法正常使用也为了防止共享数据时在存储或调用时发生错乱一般都会使用std::mutex(互斥锁)和std::thread(多线程管理)。 3.1 ORB-SLAM2中的多线程 ORB-SLAM2中三大线程中的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));} } 3.2 加锁 多线程一般都是和锁一起使用ORB-SLAM2中多线程和互斥锁一起使用而互斥锁是有范围的锁的有效性仅限于大括号{}之内程序运行出大括号之后就释放锁。另外一把锁一般在某个时刻只有一个线程能够拿到比如程序执行到某个需要锁的范围但是锁正在另一个线程那当前线程就会先停下来直到其他线程释放这个锁当前线程才能继续向下运行。 void KeyFrame::EraseConnection(KeyFrame *pKF) {// 以下大括号中的代码部分加锁{unique_lockmutex lock(mMutexConnections);if (mConnectedKeyFrameWeights.count(pKF)) {mConnectedKeyFrameWeights.erase(pKF);bUpdate true;}}// 程序运行到这里就释放锁,比如下行代码未在加锁范围UpdateBestCovisibles(); } 至此学习了ORB-SLAM2中的System主类的实现细节和ORB-SLAM2中的多线程。后续在此基础上继续学习ORB-SLAM2中的输入预处理部分的核心—特征点的提取、描述子的生成及特征点匹配等等。 Reference: https://github.com/raulmur/ORB_SLAM2 须知少时凌云志曾许人间第一流。 ⭐️
http://wiki.neutronadmin.com/news/94926/

相关文章:

  • 免费行业网站源码南宁新技术产业建设开发总公司网站
  • 千锋培训江苏网站优化
  • 网站设计对网站建设有哪些意义?网站推广在线推广
  • 网站制作生成器浙江省建设业协会网站
  • 东莞订制网站建设wordpress上传到空间
  • 网站开发制作公wordpress访问速度
  • 陕西省煤炭建设公司第一中学官方网站推广链接点击器安卓版
  • 婚纱摄影行业网站中国商检局做备案网站
  • 江西建设职业技术学院最新官方网站wordpress支付宝免签约
  • 摄影网站功能设计注册个公司大概要多少钱
  • 重庆网站建设运营wordpress 外链接口
  • 武威市凉州区建设局网站全能网站建设完全自学手册
  • 会员发布网站建设餐饮vi设计案例
  • 重庆微信企业网站开一个网站建设公司
  • 顺德网站建设合理使用颜色搭配_方能达到最佳视觉效果本地手机网站建设
  • 哪有做网站 的京东代运营
  • 做宴会网站wordpress 压力
  • 网站建设实验目的电商网站通用左侧弹出导航
  • Python视频直播网站开发wordpress woocommerce 支付宝
  • 网站搭建技术方案wordpress主题 个人博客
  • 邯郸做网站哪儿好济南企业型网站
  • 网站seo关键词优化技巧杭州网站如何制作
  • 做网站有意思吗?网站开发tt0546
  • 网站排名总是不稳定模版ppt
  • 回老家做PHP网站定西市城乡建设局网站
  • php网站开发 vip批量入侵wordpress
  • 网站版面如何布局视频设计师是干什么的
  • 外包网站开发合同网站开发项目的前端后端数据库
  • 网站页面设计合同网站seo诊断书
  • 网站开发fsdpjqwordpress导航页面设置