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

RGBD惯性SLAM

介绍

本篇介绍一种基于视觉光流法的RGBD惯性SLAM算法,该算法的前身是DEMO算法。
相对于原始版本:
更新了相对较老的IplImage 相关接口
加入了GTSAM后端;滑动窗口后端;3D-3Dbatch优化;点到面batch后端。分别对应不同的branch。
后端表现都很一般。待进一步优化,只推荐使用visualOdometry.cpp 对应的前端。其他推荐的借鉴代码见后介绍,主要供自己后续使用。

代码地址:https://gitee.com/nie_xun/ademo/tree/master

推荐测试:

  • slidW 分支:bundleAdjust_new.cpp使用slidingwindow的方法。使用方法同v5.1。
  • v4.1: launch/realsense_test1.launch 点到面batch优化,稠密建图,增加平面点筛选显示,后端效果一般。
  • v5.1: launch/realsense_depth_align.launch或realsense_depth_raw.launch。
    在visualOdometry.cpp增加了3D-3D的batch优化,增加关键帧简单显示,非稠密建图,实时性高。
    align 使用与rgb图像对齐的深度图;raw使用的是原始深度图,未与深度图对齐。有些数据包所录的深度图是raw的。
  • master 分支:接近原始的,修改了少量代码,能够成功运行,环境ubuntu1804&ROS melodic。

Branches

  • master 接近原始版本,修改了部分编译问题,加入了IMU filter等, imudataPrefilter.cpp
  • dataset 最接近原始的版本,修改了部分编译问题,能够运行原作者的datasets
  • devel 点到面batch优化,bundleAdjust.cpp
  • slidW BA_new使用 sliding window & marglization, bundleAdjust_new.cpp
  • useGTSAM BA 使用 GTSAM, bundleAdjust.cpp
  • vo_refine 没有使用后端,但在前端代码中加入了3D-3D batch优化, visualOdometry.cpp

代码结构

Congfig foler:
.yaml文件包含了相机参数以及IMU频率,轨迹存放位置等等配置。
.config 主要用来配置log级别等系统性配置。

src folder:
imudataPrefilter.cpp : IMU互补滤波器,详见参考文献2: /imu_to_init -> visualOdometry.cpp
featureTracking.cpp : /image_points -> visualOdometry.cpp
  基于cvGoodFeaturesToTrack接口提取角点;
  基于cvCalcOpticalFlowPyrLK得到匹配的角点特征点,在匹配的特征点基础上进行新提取并发布。

visualOdometry.cpp : /cam_to_init -> transformMaintenance.cpp
          /cam_to_init -> stackDepthPoint.cpp
    ICP 3D-3D : /cam2_to_init -> transformMaintenance.cpp
  融合IMU积分结果;
  通过体积/面积的方法来计算点到面的深度;
  基于匹配好的特征点建立观测约束(根据是否匹配深度建立不同的约束方程)最后通过高斯牛顿进行位姿解算。
processFlatpoints.cpp : 通过计算点簇的协方差来提取平面点 : /flat_cloud -> bundleAdjust.cpp
                                     -> registerPointCloud.cpp

transformMaintenance.cpp : ->/camera2_refine
  通过插值法融合前端高频位姿输出与后端低频位姿输出,最后得到优化后的高频位置输出,
registerPointCloud.cpp : map点云到原始坐标系下并发布点云地图:->/surround_cloud

bundleAdjust.cpp : 后端优化代码,不同分支根据方法不同而不同-> /bef_ba_to_init

bundleAdjust_new.cpp : marglize & sliding window BA : ->/cam2_to_init
trajLoad.cpp: 发布并生成轨迹文件,订阅/cam_to_init & /cam2_to_init

simulator.cpp: 发布仿真图像特征点数据,用于测试 bundleAdjust_new.cpp

stackDepthPoint.cpp : stack feature point : /depth_points_stacked -> bundleAdjust.cpp

使用示例图

在这里插入图片描述
在这里插入图片描述

压力测试,让数据集倍速播放,查看输出速率,基于v5代码:
https://gitee.com/nie_xun/ademo/blob/master/doc/outdoor_map.mp4
建图视频:
https://gitee.com/nie_xun/ademo/blob/master/doc/stress.webm

参考

1 原始代码地址-https://github.com/wpfhtl/demo_rgbd
2 IMU互补滤波器-https://blog.csdn.net/weixin_41469272/article/details/113599414

相关文章:

  • 电弧光的危害有哪些?我们该如何应对?
  • 分布式热点网络
  • 汽车零部件产线节能提效,工业网关解锁数据采集 “密码”
  • 音乐产业新玩法:NFTs如何颠覆传统与挑战未来?
  • JAVA身份证件图像识别(100%可以用)
  • Python 实现的运筹优化系统数学建模详解(多目标规划模型)
  • 报错:Nlopt
  • DICOM通讯(ACSE->DIMSE->Worklist)
  • STM32电机库 电机控制特性
  • 计算机网络(第四章)
  • TiDB 部署指南(单机模式) CentOS 7 安装 MariaDB 教程
  • 弱口令爆破
  • 亚马逊发货系统突发限制,卖家如何破局?
  • 转发表和路由表的差别
  • 详解关于VS配置好Qt环境之后但无法打开ui界面
  • Logisim——1位比较器,2位比较器,4位无符号比较器,16位无符号比较器(头歌平台实测通过)
  • Kubernetes Operator 是什么,以及它们的用途
  • Docker 与 Podman常用知识汇总
  • tmpfs的监控筛选/dev/shm下的shmem创建
  • Linux——基础开发工具
  • 魏晓栋已任上海崇明区委常委、组织部部长
  • 全品系停货?泸州老窖:暂未接到通知,常规调控手段
  • 张文宏团队公布广谱抗猴痘药物研发进展,将进入临床审批阶段
  • “雷公”起诉人贩子王浩文案开庭:庭审前手写道歉信,庭审中不承认拐走川川
  • 温氏股份一季度归母净利润20.01亿元,同比扭亏为盈
  • 福建一改造项目1人高处坠亡且事故迟报41天,住建厅约谈相关责任单位