电子地图 | VINS-FUSION | 小觅相机D系列
目录
一、相关介绍
二、VINS-FUSION环境安装及使用
(一)Ubuntu18.04安装配置
1、Ubuntu下载安装
2、设置虚拟内存(可选)
(二)VINS-FUSION环境配置
1、ros安装
2、ceres-solver安装
3、vins-fusion编译安装(可选,针对不接入小觅相机,仅想运行已有数据集)
(二)VINS-FUSION运行官方数据集
1、下载数据集
2、运行双目
3、运行单目+IMU
4、运行双目+IMU
三、VINS-FUSION接入小觅相机
(一)安装MYNT-EYE--FUSION-Sample
(二)安装MYNTEYE SDK
(三)实时建图+bag数据包采集
一、相关介绍
VINS系列|VINS-Fusion论文精读:一种通用的基于优化的多传感器局部里程计估计框架(上) - 知乎论文链接:https://arxiv.org/pdf/1901.03638.pdfGitHub链接:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion 作者:自动驾驶专栏 | 原文出处:公众号【自动驾驶专栏】摘要如今,越来越多的传感器装载在机…
https://zhuanlan.zhihu.com/p/627643416
VINS-FUSION算法总结_Lusix1949的博客-CSDN博客vins-fusion在将单目vio系统vins-mono扩展到了双目,同时添加了GPS的融合信息,支持纯双目、双目+IMU、双目+imu+GPS、单目+IMU等多种传感器组合方式。本篇对vins-fusion的主要改进点进行总结。_vins-fusionhttps://blog.csdn.net/guanjing_dream/article/details/129187579
VINS-FUSION 前端后端代码全详解_vins-fusion 源码解读_敢敢のwings的博客-CSDN博客本次工作我首先一步步的把代码全部注释了,十分的详细,对于C++和OpenCV的一些操作也进行了详细的注释,对于刚入门的同学应该还是有帮助的。之后我将代码开源,并写了相应的博客进行讲解。1. 程序入口rosNodeTest.cpp1.1 定义内容运行程序时,首先进入的是主程序vins_estimator/src/estimator/rosNodeTest.cpp里边主要定义了 估计器、 缓存器 、 获取传感器数据的函数 和 一个主函数// 获得左目的messagevoid img0_callb_vins-fusion 源码解读https://blog.csdn.net/lovely_yoshino/article/details/118729353
二、VINS-FUSION环境安装及使用
VINS-FUSION可以运行录制好的图像数据集实现地图绘制,也可以接入相机实时绘制地图。我们可以根据需要进行环境配置。
(一)Ubuntu18.04安装配置
小觅相机最高支持到ubuntu18版本,因此我们在Ubuntu18.04系统下完成vins-fusion的环境搭建。
1、Ubuntu下载安装
ubuntu18.04系统安装教程(如果在新电脑上直接安装Ubuntu单系统,参考该博客至制作启动盘即可,完成后直接将USB插入电脑并按照提示步骤安装ubuntu):
Ubuntu18.04安装教程——超详细的图文教程_ubuntu18.04安装教程——超详细的图文教程_ubuntu18.04安装教程——超详细的图文-CSDN博客Ubuntu18.04镜像_ubuntu18.04安装教程——超详细的图文教程_ubuntu18.04安装教程——超详细的图文https://blog.csdn.net/weixin_44623637/article/details/106723462
2、设置虚拟内存(可选)
ubuntu设置虚拟内存_ubuntu 虚拟内存_白依山的博客-CSDN博客ubuntu设置虚拟内存一:查看当前交换内存第二行 Swap:可以看到,目前交换分区的大小为0二:创建交换分区切换用户到root在根目录下创建swap目录,进入swap目录输入创建交换分区命令我这里是创建了一个12g的交换分区,各自根据各自的内存,酌情创建,下图是ubuntu建议设置的大小制作交换文件挂载交换分区如果挂载时提示这个信息,则需要需改交换文件的权限其中swapoff swapfile 是卸载交换分区的命令,再次输入挂载命令,会发现没有提示了。此时再输入_ubuntu 虚拟内存https://blog.csdn.net/weixin_42431643/article/details/124842425
(二)VINS-FUSION环境配置
1、ros安装
参考以下教程
ROS安装-Ubuntu18.04安装配置ROS melodic_ubuntu18.04安装ros_不加黄花菜的博客-CSDN博客最近小白周围的同学都陆陆续ROS,小白也是帮几个同门安装了几次ROS,想来发表一篇关于本人常用的安装ROS步骤的文章,以便未来的师弟师妹,和需要安装ROS同学们,可以少踩一些坑,顺利地将ROS安装成功,更快地开展接下来的科研和项目工作。_ubuntu18.04安装roshttps://blog.csdn.net/weixin_41485784/article/details/126655268
2、ceres-solver安装
(1)在Release 2.0.0 · ceres-solver/ceres-solver · GitHub上下载需要的ceres-solver版本并解压。
这里使用的是2.0.0版本:

(2)接下来,安装ceres-solver需要的相关依赖:
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libgtest-dev
(3)安装ceres-solver:
cd ceres-solver-2.0.0 //进入解压后的ceres-solver文件夹
mkdir build //创建build文件夹
cd build
cmake ..
make -j4 //
sudo make install
3、vins-fusion编译安装(可选,针对不接入小觅相机,仅想运行已有数据集)
(1)在主目录新建文件夹fusion_ws/src,并在其中修改、构建和安装catkin包,从而实现ros工作空间的创建:
mkdir -p ~/fusion_ws/src
cd ~/fusion_ws/src
(2)将vins-fusion项目clone到src目录下并解压:
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
(3)返回上一级目录,执行catkin_make:
cd ..
catkin_make
如果上述命令成功运行,在fusion_ws工作空间会生成build、devel、src这个三个目录文件夹(这3个是catkin编译系统默认的):
- build(Build Space):catkin(CMake)的缓存信息和其他中间件
- devel(Development Space):生成目标文件(包括头文件、动态链接库、静态链接库、可执行文件等)、环境变量
- src(Source Space):ROS的catkin软件包(源码)
Tips:
早期有些教程仍然保留catkin_init_workspace这条初始化命令,它的作用就是在fusion_ws工作空间的src目录下创建CMakeLists.txt 文件。但实际上catkin_make命令包含了catkin_init_workspace,不必再调用了(当然你也可以使用,没有任何影响)。
(4)接下来设置环境变量,首先source一下新生成的setup.*sh文件(在devel目录下可看见几个setup.*sh):
source devel/setup.bash
但是上述命令只适用当前终端,这导致每次打开新的终端都需要source命令一下,重新刷新环境变量,才能使用ROS相关命令。解决办法是,在终端中输入如下命令,如此每次打开终端,.bashrc会自动运行:
echo "source ~/fusion_ws/devel/setup.bash" >> ~/.bashrcsource ~/.bashrc
至此,我们完成了vins-fusion的环境安装,可以通过一些官方提供的数据集来验证是否安装正确及环境是否完成搭建。
(二)VINS-FUSION运行官方数据集
1、下载数据集
下载链接:
kmavvisualinertialdatasets – ASL Datasets
我这里下载的是MH_01_easy.bag。

该数据集中包括了相机双目图像数据以及IMU数据。VINS-Fusion支持双目、单目+IMU以及双目+IMU,我们可以依次进行实验。
2、运行双目
(1)新建终端输入以下命令行,开启rviz实现ros可视化:
roslaunch vins vins_rviz.launch
(2)新建终端输入以下命令行,指向双目配置文件XXX_config.yaml。该配置文件中包括了相机的内参及外参、帧率等信息,在后期我们使用自己的相机时,如果对相机进行了更精确的标定,可以对这些参数进行修改,从而进一步提升建图的精准度。
这里我们直接使用官方默认参数。
rosrun vins vins_node ~/fusion_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml
(3)新建终端输入一下命令行,播放bag数据包。由于指定了配置文件,我们只会使用到bag包中双目图像帧数据。
rosbag play ~/MH_01_easy.bag
3、运行单目+IMU
新建终端分别输入以下命令行:
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/fusion_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml //除了相机参数,还包含IMU参数
rosrun loop_fusion loop_fusion_node ~/fusion_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml //开启回环检测,可选
rosbag play ~/MH_01_easy.bag
4、运行双目+IMU
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/fusion_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml
rosbag play ~/MH_01_easy.bag
三、VINS-FUSION接入小觅相机
如果想实现实时绘图,我们则需要接入相机,在录制数据的过程中同时利用vins-fusion进行定位建图。这里我们使用D系列小觅相机,该相机可以同时采集双目图像及IMU数据,并在硬件上基本实现了左右目和IMU的时间同步。

小觅相机官方在github上提供了VINS-FUSION的样例,方便我们使用,地址:GitHub - slightech/MYNT-EYE-VINS-FUSION-Samples at master。该样例包括了Docker版本(docker_feat分支)和非Docker版本(master分支)。这里我们使用非Docker版本。
在接入小觅相机前,我们需要先保证ros和ceres-solver的正确安装。
(一)安装MYNT-EYE--FUSION-Sample
(1)在主目录新建文件夹catkin_ws工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
(2)将MYNT-EYE--FUSION-Sample项目clone到src目录下并解压:
git clone https://github.com/slightech/MYNT-EYE-VINS-FUSION-Samples.git
(3)返回上一级目录,执行catkin_make:
cd ..
catkin_make
(4)配置环境变量:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrcsource ~/.bashrc
(二)安装MYNTEYE SDK
参考官方教程:
MYNT EYE D SDK: Linux SDK 用户指南
https://slightech.github.io/MYNT-EYE-D-SDK/build_linux.html
(三)实时建图+bag数据包采集
1、将小觅相机连接到电脑上:

2、开启小觅相机:
cd MYNT-EYE-D-SDK-master //进入小觅相机SDK
source ./wrappers/ros/devel/setup.bash //将setup.bash挂载到ROS文件系统
roslaunch mynteye_wrapper_d vins_fusion.launch //开启小觅相机
3、修改配置文件
以单目+IMU为例,其配置文件是~/catkin_ws/src/MYNT-EYE-VINS-FUSION-Samples-master/config/mynteye-d/mynt_mono_config.yaml,我们需要对输出结果的文件存放位置output_path和pose_graph_save_path进行修改。
其它参数我们暂时不进行修改,如果进行参数大修,那么需要重新对相机和IMU的参数进行标定,并将重投影误差控制在1px内。
4、以单目+IMU为例,输入如下命令运行vins-fusion:
cd ~/catkin_ws //进入catkin_ws工作空间
roslaunch vins mynteye-d-mono-imu.launch //运行启动VINS-FUSION单目+IMU
实时建图效果如下:

5、及时开启一个新的命令窗口,同步进行数据包的录制(以便后期数据重用)
cd XXX //进入想存放数据包的文件夹
rosbag record /mynteye/left/image_color /mynteye/imu/data_raw //录制单目灰度图及IMU数据,这里的topic(image_color和data_raw)需要和前面提到的yaml配置文件保持一致,topic可以自行修改
录制完成后会生成一个带有录制时间的bag数据包,该数据包下包含了单目及IMU数据,ros topic分别为image_color和data_raw。基于该数据集,我们可以重绘电子地图,或对该数据进行一定处理,使得绘图更加准确。
利用该bag数据包绘制地图的命令如下:
roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/MYNT-EYE-VINS-FUSION-Samples-master/config/mynteye-d/mynt_mono_config.yaml
rosbag play XXX.bag //XXX包含了路径及bag数据包名称相关文章:
电子地图 | VINS-FUSION | 小觅相机D系列
目录 一、相关介绍 二、VINS-FUSION环境安装及使用 (一)Ubuntu18.04安装配置 1、Ubuntu下载安装 2、设置虚拟内存(可选) (二)VINS-FUSION环境配置 1、ros安装 2、ceres-solver安装 3、vins-fusion…...
C++goto语句
在本文中,您将了解goto语句,它是如何工作的,以及为什么应该避免它。在C 编程中,goto语句用于通过将控制权转移到程序的其他部分来更改程序执行的正常顺序。 goto语句的语法 goto label; ... .. ... ... .. ... ... .. ... label…...
Spring学习笔记11 GoF代理模式
Spring学习笔记10 JdbcTemplate_biubiubiu0706的博客-CSDN博客 新建个maven模块 static-proxy 演示静态代理 订单接口 测试 需求:统计每个业务方法的耗时 package com.example.proxy.service;/*** author hrui* date 2023/9/25 8:42*/ public class OrderServiceImpl implem…...
代码随想录二刷 Day23
669. 修剪二叉搜索树 找到小数字的右子树与大数字左子树必须要重新检查一遍然后让root的左右直接指向return的左右节点; class Solution { public:TreeNode* trimBST(TreeNode* root, int low, int high) {if (root NULL) return NULL;if (root->val < low…...
Ubuntu `apt` 报错 “Errors were encountered while processing: base-passwd“ 的解决方法
Ubuntu apt 更新时出现报错: Setting up base-passwd (3.5.52build1) ... Changing home-directory of irc from /var/run/ircd to /run/ircd 1 changes have been made, rewriting files Writing passwd-file to /etc/passwd Error making backupfile /etc/passwd…...
XXL-JOB分布式任务调度
XXL-JOB分布式任务调度 在实际项目中,为了降低耦合,通常会把定时任务的逻辑单独抽离出来,构建成一个新的工程。也有可能需要定时任务实现高可用,组建成集群,提高容错率。 那么问题也就来了。既然定时任务是多个…...
加拿大人工智能数据搜索平台【Secoda】完成1400万美元A轮融资
来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于加拿大多伦多的人工智能数据搜索平台【Secoda】今日宣布已完成1400万美元A轮融资。 本轮融资由Craft Ventures领投,参与投资的投资机构有Abstract Ventures、现有投资者YCombi…...
less与sass
1.变量: Less: my-color: #ff0000;.container {background-color: my-color; } Sass:$my-color: #ff0000;.container {background-color: $my-color; } 在这点上,Less和Sass的变量概念基本相同,都是以声明的方式存储值,然后在…...
已解决: Go Error: no Go files in /path/to/directory问题
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页: 🐅🐾猫头虎的博客🎐《面试题大全专栏》 🦕 文章图文并茂🦖…...
2022年6月和7月的工作经历
6月 3D打标软件 3D打标软件,要求在Open3d上加几个2D文字。大致有如下几个方案: 依葫芦画瓢,但O3DVisualizer派生于gui::Window,我的程序派生于Visualizer。工作量不小。 利用OpenGL输出文字,Baidu的两种方法一个编…...
【图像处理】SIFT角点特征提取原理
一、说明 提起在OpenCV中的特征点提取,可以列出Harris,可以使用SIFT算法或SURF算法来检测图像中的角特征点。本篇围绕sift的特征点提取,只是管中窥豹,而更多的特征点算法有: Harris & Stephens / Shi–Tomasi 角点…...
flutter开发实战-应用更新apk下载、安装apk、启动应用实现
flutter开发实战-应用更新apk下载、安装apk、启动应用实现 在开发过程中,经常遇到需要更新下载新版本的apk文件,之后进行应用更新apk下载、安装apk、启动应用。我们在flutter工程中实现下载apk,判断当前版本与需要更新安装的版本进行比对判断…...
DispatcherServlet初始化之Spring容器创建1.0
一、前言 在SpringMVC框架中,DispatcherServlet扮演着非常重要的角色,它负责接收所有的HTTP请求并将其分发给相应的处理器。在DispatcherServlet的初始化过程中,会创建一个Spring容器来管理应用程序中的Bean。 二、步骤 1、加载配置文件&a…...
CSS的基础
CSS美化HTML,布局网页 CSS最大的价值:由HTML专注去做结构呈现,样式给CSS,结构(HTML)与样式(CSS)相分离 CSS主要由选择器以及一条或多条声明 在<head></head>中实现CSS在<body…...
mathtype如何嵌入到word中?详细mathtype安装步骤教程
mathtype是一款功能特别强大的数学方式编辑软件,为用户提供各种强大的数学公式符号帮助用户进行计算,并且速度很快。有小伙伴知道mathtype如何嵌入到word中吗,这里小编就给大家详细介绍一下mathtype嵌入到word中的方法,有需要的小…...
云安全之访问控制的常见攻击及防御
访问控制攻击概述 访问控制漏洞即应用程序允许攻击者执行或者访问某种攻击者不具备相应权限的功能或资源。 常见的访问控制可以分为垂直访问控制、水平访问控制及多阶段访问控制 (上下文相关访问控制),与其相应的访问控制漏洞为也垂直越权漏洞(普通用户可以访问或…...
Java编程技巧:跨域
目录 1、跨域概念2、后端CORS(跨域资源共享)配置原理3、既然请求跨域了,那么请求到底发出去没有?4、通过后端CORS(跨域资源共享)配置解决跨域问题代码4.1、SpringBoot(FilterRegistrationBean&a…...
react create-react-app 配置less
环境信息: create-react-app:v5 react:18.2.0 node:18.16.0 如果你不必须使用 less 建议直接使用scss。 因为less配置会遇到很多问题。 配置less过程: 如果你只需要 sass的话,就可以直接使用sass。因为默认配置了scss。 npm、yarn、cnpm、…...
树的表示——孩子兄弟表示法
从图中可以看出,树的每个结点,都有不确定的指向他们的孩子的节点,如果我们定义这样一个结构体来便是数的结构的话: struct TreeNode { int val; struct TreeNodep1; struct TreeNodep1; … }; 是不能够表示一棵树的,因…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
剑指offer20_链表中环的入口节点
链表中环的入口节点 给定一个链表,若其中包含环,则输出环的入口节点。 若其中不包含环,则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...
并发编程 - go版
1.并发编程基础概念 进程和线程 A. 进程是程序在操作系统中的一次执行过程,系统进行资源分配和调度的一个独立单位。B. 线程是进程的一个执行实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。C.一个进程可以创建和撤销多个线程;同一个进程中…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
pycharm 设置环境出错
pycharm 设置环境出错 pycharm 新建项目,设置虚拟环境,出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...
