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

电子地图 | 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 作者:自动驾驶专栏 | 原文出处:公众号【自动驾驶专栏】摘要如今,越来越多的传感器装载在机…icon-default.png?t=N7T8https://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 用户指南icon-default.png?t=N7T8https://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_pathpose_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的左右节点&#xff1b; 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 更新时出现报错&#xff1a; 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分布式任务调度 ​ 在实际项目中&#xff0c;为了降低耦合&#xff0c;通常会把定时任务的逻辑单独抽离出来&#xff0c;构建成一个新的工程。也有可能需要定时任务实现高可用&#xff0c;组建成集群&#xff0c;提高容错率。 ​ 那么问题也就来了。既然定时任务是多个…...

加拿大人工智能数据搜索平台【Secoda】完成1400万美元A轮融资

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;总部位于加拿大多伦多的人工智能数据搜索平台【Secoda】今日宣布已完成1400万美元A轮融资。 本轮融资由Craft Ventures领投&#xff0c;参与投资的投资机构有Abstract Ventures、现有投资者YCombi…...

less与sass

1.变量&#xff1a; Less: my-color: #ff0000;.container {background-color: my-color; } Sass:$my-color: #ff0000;.container {background-color: $my-color; } 在这点上&#xff0c;Less和Sass的变量概念基本相同&#xff0c;都是以声明的方式存储值&#xff0c;然后在…...

c-const修饰指针-day16

...

已解决: Go Error: no Go files in /path/to/directory问题

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页: &#x1f405;&#x1f43e;猫头虎的博客&#x1f390;《面试题大全专栏》 &#x1f995; 文章图文并茂&#x1f996…...

2022年6月和7月的工作经历

6月 3D打标软件 3D打标软件&#xff0c;要求在Open3d上加几个2D文字。大致有如下几个方案&#xff1a; 依葫芦画瓢&#xff0c;但O3DVisualizer派生于gui::Window&#xff0c;我的程序派生于Visualizer。工作量不小。 利用OpenGL输出文字&#xff0c;Baidu的两种方法一个编…...

【图像处理】SIFT角点特征提取原理

一、说明 提起在OpenCV中的特征点提取&#xff0c;可以列出Harris&#xff0c;可以使用SIFT算法或SURF算法来检测图像中的角特征点。本篇围绕sift的特征点提取&#xff0c;只是管中窥豹&#xff0c;而更多的特征点算法有&#xff1a; Harris & Stephens / Shi–Tomasi 角点…...

flutter开发实战-应用更新apk下载、安装apk、启动应用实现

flutter开发实战-应用更新apk下载、安装apk、启动应用实现 在开发过程中&#xff0c;经常遇到需要更新下载新版本的apk文件&#xff0c;之后进行应用更新apk下载、安装apk、启动应用。我们在flutter工程中实现下载apk&#xff0c;判断当前版本与需要更新安装的版本进行比对判断…...

DispatcherServlet初始化之Spring容器创建1.0

一、前言 在SpringMVC框架中&#xff0c;DispatcherServlet扮演着非常重要的角色&#xff0c;它负责接收所有的HTTP请求并将其分发给相应的处理器。在DispatcherServlet的初始化过程中&#xff0c;会创建一个Spring容器来管理应用程序中的Bean。 二、步骤 1、加载配置文件&a…...

CSS的基础

CSS美化HTML&#xff0c;布局网页 CSS最大的价值&#xff1a;由HTML专注去做结构呈现&#xff0c;样式给CSS&#xff0c;结构&#xff08;HTML)与样式&#xff08;CSS&#xff09;相分离 CSS主要由选择器以及一条或多条声明 在<head></head>中实现CSS在<body…...

mathtype如何嵌入到word中?详细mathtype安装步骤教程

mathtype是一款功能特别强大的数学方式编辑软件&#xff0c;为用户提供各种强大的数学公式符号帮助用户进行计算&#xff0c;并且速度很快。有小伙伴知道mathtype如何嵌入到word中吗&#xff0c;这里小编就给大家详细介绍一下mathtype嵌入到word中的方法&#xff0c;有需要的小…...

云安全之访问控制的常见攻击及防御

访问控制攻击概述 访问控制漏洞即应用程序允许攻击者执行或者访问某种攻击者不具备相应权限的功能或资源。 常见的访问控制可以分为垂直访问控制、水平访问控制及多阶段访问控制 (上下文相关访问控制)&#xff0c;与其相应的访问控制漏洞为也垂直越权漏洞(普通用户可以访问或…...

Java编程技巧:跨域

目录 1、跨域概念2、后端CORS&#xff08;跨域资源共享&#xff09;配置原理3、既然请求跨域了&#xff0c;那么请求到底发出去没有&#xff1f;4、通过后端CORS&#xff08;跨域资源共享&#xff09;配置解决跨域问题代码4.1、SpringBoot&#xff08;FilterRegistrationBean&a…...

react create-react-app 配置less

环境信息&#xff1a; create-react-app:v5 react:18.2.0 node:18.16.0 如果你不必须使用 less 建议直接使用scss。 因为less配置会遇到很多问题。 配置less过程&#xff1a; 如果你只需要 sass的话&#xff0c;就可以直接使用sass。因为默认配置了scss。 npm、yarn、cnpm、…...

树的表示——孩子兄弟表示法

从图中可以看出&#xff0c;树的每个结点&#xff0c;都有不确定的指向他们的孩子的节点&#xff0c;如果我们定义这样一个结构体来便是数的结构的话&#xff1a; struct TreeNode { int val; struct TreeNodep1; struct TreeNodep1; … }; 是不能够表示一棵树的&#xff0c;因…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

基础测试工具使用经验

背景 vtune&#xff0c;perf, nsight system等基础测试工具&#xff0c;都是用过的&#xff0c;但是没有记录&#xff0c;都逐渐忘了。所以写这篇博客总结记录一下&#xff0c;只要以后发现新的用法&#xff0c;就记得来编辑补充一下 perf 比较基础的用法&#xff1a; 先改这…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

视觉slam十四讲实践部分记录——ch2、ch3

ch2 一、使用g++编译.cpp为可执行文件并运行(P30) g++ helloSLAM.cpp ./a.out运行 二、使用cmake编译 mkdir build cd build cmake .. makeCMakeCache.txt 文件仍然指向旧的目录。这表明在源代码目录中可能还存在旧的 CMakeCache.txt 文件,或者在构建过程中仍然引用了旧的路…...

七、数据库的完整性

七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...

负载均衡器》》LVS、Nginx、HAproxy 区别

虚拟主机 先4&#xff0c;后7...