MSCKF_vio是一种基于多状态约束卡尔曼滤波器的双目视觉里程计。其中多状态约束是指将多帧图像的相机位姿加入卡尔曼状态向量中,在进行卡尔曼增益之前通过多帧图像之间的约束进行最小二乘优化来估计特征点的空间位置,然后根据优化后的特征点空间位置来约束状态向量。其中,多帧图像保存在一个按时间排序的滑动窗口序列中,跟踪多个特征点在多帧图像中的坐标,从而建立各帧图像位姿之间的约束。另一个约束是:同一时刻的相机位姿与IMU位姿之间是一个已知的约束,这个约束用在状态增广中。在这两种约束下,卡尔曼滤波能够获得一个较好的估计。该方法的优点在于鲁棒性高,计算复杂度低,而缺点是由于其后端是卡尔曼滤波,无法用到全局的信息进行全局的优化,没有回环检测。

    代码中主要有三个文件比较重要:src/msckf_vio.cpp, src/image_processor.cpp ,include/msckf_vio/feature.hpp。其中src/msckf_vio.cpp是系统的主体,滤波器的所有步骤都在此文件中进行,包括状态预测,状态增广,测量更新等,是后端优化部分。src/image_processor.cpp是视觉前端,主要作用是跟踪特征点,去除outliers,其中用了三种方法去跟踪特征点:LK光流跟踪,双目匹配,two-point RANSAC。include/msckf_vio/feature.hpp主要是通过多帧图像之间的约束进行最小二乘优化计算各个特征点的空间位置,这个空间位置在msckf测量更新的时候要用到(计算测量雅可比矩阵H,计算残差)。
---------------------
作者:被酱油打
来源:CSDN
原文:https://blog.csdn.net/u014491623/article/details/84712862
版权声明:本文为博主原创文章,转载请附上博文链接!

https://github.com/KumarRobotics/msckf_vio

阅读README.md,按照过程安装。

在此过程中出现了cv_bridge的错误,修改。

## Compling编译

cd /home/wj/Downloads/msckf_vio_workspace/(your_work_space)
catkin_make --pkg msckf_vio --cmake-args -DCMAKE_BUILD_TYPE=Release

## Calibration校准

准确的校准对于成功地运行软件是至关重要的。为了获得最佳的软件性能,立体相机和IMU应该是硬件同步的。注意立体标定,包括摄像机内置函数,失真,和两个摄像机之间的非本征,
你必须使用校准软件,手动设置这些参数将不够准确。
[Kalibr](https://github.com/ethz-asl/kalibr)可用于立体标定,也可用于立体相机与IMU之间的转换,所产生的kalibr YAML文件可以直接使用该软件。详情请参见“config”
文件夹中的校准文件。在“config”文件夹下的两个校准文件应与the EuRoC and [fast flight](https://github.com/KumarRobotics/msckf_vio/wiki)dataset直接工作。
校准文件的约定如下:
`camx/T_cam_imu`: takes a vector from the IMU frame to the camx frame.
`cam1/T_cn_cnm1`: takes a vector from the cam0 frame to the cam1 frame.
## Example Usage

分别为EuRoC and fast flight dataset准备了启动文件。启动 `msckf_vio_*.launch`,有两个ros node被创建:
* `image_processor` takes the stereo images to detect and track features.
* `vio` takes the feature measurements and tightly fuses them with the IMU messages to estimate pose.

用ros跑下载好的EuRoC数据

  1. 下载bag包:EuRoC
  2. 在一个终端,首先运行:  roscore
  3. 再打开一个终端  :
    $ cd /home/wj/Downloads/msckf_vio_workspace/           --- <path_to_catkin_ws>
    $ source devel/setup.bash
    $ roslaunch msckf_vio msckf_vio_euroc.launch
  4. 再打开一个终端,打开rviz:  rosrun rviz rviz -d /home/wj/Downloads/msckf_vio_workspace/src/msckf_vio/rviz/rviz_euroc_config.rviz   //rviz显示模型
  5. 再打开一个终端,载入数据:    rosbag play /home/wj/Downloads/dataset/EuRoC/ROS_bag/MH_05_difficult.bag

运行msckf_vio的更多相关文章

  1. ASP.NET Aries 入门开发教程1:框架下载与运行

    背景: 鉴于框架的使用者越来越多,文档太少,不少用户反映框架的入门门槛太高. 好吧,再辛苦下,抽时间写教程吧! 步骤1:下载框架源码 开源地址:https://github.com/cyq1162/A ...

  2. 在传统.NET Framework 上运行ASP.NET Core项目

    新的项目我们想用ASP.NET Core来开发,但是苦于我们历史的遗产很多,比如<使用 JavaScriptService 在.NET Core 里实现DES加密算法>,我们要估计等到.N ...

  3. Sublime Text3配置在可交互环境下运行python快捷键

    安装插件 在Sublime Text3下面写代码感觉很不错,但是写Python的时候遇到了一些问题. 用Sublime Text3打开python文件,或者在Sublime Text3下写好pytho ...

  4. hadoop 2.7.3本地环境运行官方wordcount-基于HDFS

    接上篇<hadoop 2.7.3本地环境运行官方wordcount>.继续在本地模式下测试,本次使用hdfs. 2 本地模式使用fs计数wodcount 上面是直接使用的是linux的文件 ...

  5. hadoop 2.7.3本地环境运行官方wordcount

    hadoop 2.7.3本地环境运行官方wordcount 基本环境: 系统:win7 虚机环境:virtualBox 虚机:centos 7 hadoop版本:2.7.3 本次先以独立模式(本地模式 ...

  6. Docker笔记一:基于Docker容器构建并运行 nginx + php + mysql ( mariadb ) 服务环境

    首先为什么要自己编写Dockerfile来构建 nginx.php.mariadb这三个镜像呢?一是希望更深入了解Dockerfile的使用,也就能初步了解docker镜像是如何被构建的:二是希望将来 ...

  7. Linux scp 设置nohup后台运行

    Linux scp 设置nohup后台运行 1.正常执行scp命令 2.输入ctrl + z 暂停任务 3.bg将其放入后台 4.disown -h 将这个作业忽略HUP信号 5.测试会话中断,任务继 ...

  8. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  9. Android数据存储之Android 6.0运行时权限下文件存储的思考

    前言: 在我们做App开发的过程中基本上都会用到文件存储,所以文件存储对于我们来说是相当熟悉了,不过自从Android 6.0发布之后,基于运行时权限机制访问外置sdcard是需要动态申请权限,所以以 ...

随机推荐

  1. win10家庭版升级专业版的两种方法和密钥

    win10家庭版升级专业版密钥:VK7JG-NPHTM-C97JM-9MPGT-3V66T4N7JM-CV98F-WY9XX-9D8CF-369TT FMPND-XFTD4-67FJC-HDR8C-3 ...

  2. 扩展C#与元编程

    扩展C#与元编程 https://www.cnblogs.com/knat/p/4580393.html https://www.cnblogs.com/knat/p/4584023.html 扩展C ...

  3. C++ 关于MFC多线程编程中的一些注意事项 及自定义消息的处理

    在多线程编程中,最简单的方法,无非就是利用 AfxBeginThread  来创建一个工作线程,看一下这个函数的说明: CWinThread* AFXAPI AfxBeginThread( AFX_T ...

  4. 吴裕雄 28-MySQL 序列使用

    MySQL序列是一组整数:1, 2, 3, ...,由于一张数据表只能有一个字段自增主键, 如果你想实现其他字段也实现自动增加,就可以使用MySQL序列来实现 使用AUTO_INCREMENTMySQ ...

  5. 吴裕雄 09-MySQL删除数据表

    以下为删除MySQL数据表的通用语法:DROP TABLE table_name; DROP TABLE runoob_tbl; 使用PHP脚本删除数据表PHP使用 mysqli_query 函数来删 ...

  6. centos 安装mysql数据库

    在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB. 1 下载并安装MySQL官方的 Yum Re ...

  7. 关于ubuntu14.04,忘记root密码解决方案(经测试,内核3.13和4.2可行)。

    网上已经有很多方案啦,我这里就不画蛇添足,直接上链接: http://jingyan.baidu.com/article/c843ea0b9e851077931e4aea.html 注意,有些机子没有 ...

  8. 清除 idea 缓存

    idea最好选择  付费版本 ,稳定一点~ 不要选择社区版 1.问题使用idea启动项目时,报如下错误:Intellij Error: Internal caches are corrupted or ...

  9. C++访问二维数组元素

    if(*image_in+j*+xsize+i)>=thresh)//xsize图像宽度 image_out是首地址,加上j*行宽就是目标行的首地址,再加上i,就是在此行中的第i个像素,所以整个 ...

  10. 自动化运维工具Ansible的部署步骤详解

    本文来源于http://sofar.blog.51cto.com/353572/1579894,主要是看到这样一篇好文章,想留下来供各位同僚一起分享. 一.基础介绍 ================= ...