VINS_FUSION编译运行

2023-05-16

一、ROS安装

见前文

二、ceres安装

GitHub地址:

GitHub - ceres-solver/ceres-solver: A large scale non-linear optimization library

#14.04
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3.1.2 libgflags-dev libgoogle-glog-dev libeigen3-dev libgtest-dev
#18.04
sudo apt-get install liblapack-dev libsuitesparse-dev libcxsparse3 libgflags-dev libgoogle-glog-dev libeigen3-dev libgtest-dev

git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver/
mkdir build
cd build
cmake ..
make
sudo make install

记得安装依赖项,记得最后的make install

18.04报错“无法定位软件包 libcxsparse3.1.2”改成: libcxsparse3
(参考https://blog.csdn.net/weixin_42744670/article/details/82797586)
 

三、VINS_FUSION安装

创建ros空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash

安装VINS_Fusion

cd ~/catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git

 编译

cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash

catkin_make的时候遇到报错: c++ internal compiler error program cc1plus
之前报错查找catkin_make的原因找了好久,以为是各种相关项版本的问题,结果是因为虚拟机分配的内存不足,采用博文提到的https://blog.csdn.net/fenquegong2126/article/details/80988452的方法,报错前用的4G内存,改成8G内存,跑通了。

[XXX] is neither a launch file in package [XXX] nor is [XXX] a launch file name报错信息解决方法

catkin_make
source ~/catkin_ws/devel/setup.bash

 跑通实例:使用EuRoc数据集MH_01_easy.bag

下载EuRoC MAV数据集到YOUR_DATASET_FOLDER。以MH_01为例,可以使用三种传感器类型(单目相机+ IMU、立体声相机+ IMU和立体声相机)运行VINS-Fusion。打开四个终端,分别运行vins里程计、可视闭环(可选)、rviz和播放包文件。绿色路径为VIO里程计;红色路径为目视闭环下的里程计。下载EuRoC MAV数据集到YOUR_DATASET_FOLDER。以MH_01为例,可以使用三种传感器类型(单目相机+ IMU、立体声相机+ IMU和立体声相机)运行VINS-Fusion。打开四个终端,分别运行vins里程计、可视闭环(可选)、rviz和播放包文件。绿色路径为VIO里程计;红色路径为目视闭环下的里程计。

单目+IMU

roslaunch vins vins_rviz.launch
rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
(optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml 
rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

 双目+IMU

    roslaunch vins vins_rviz.launch
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_imu_config.yaml 
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

双目

    roslaunch vins vins_rviz.launch
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_stereo_config.yaml 
    rosbag play YOUR_DATASET_FOLDER/MH_01_easy.bag

 

报错opencv没有安装

报错缺少cv_bridge,补充安装包 sudo apt-get install ros-melodic-cv-bridge

报错 error: ‘CV_GRAY2BGR’ was not declared in this scope

1.查看自己的OPENCV版本

pkg-config --modversion opencv 

 2、修改报错代码目录上一层的CMakelist opencv包的版本

将这个:find_package( OpenCV REQUIRED )
替换为(自己的版本):find_package( OpenCV 3 REQUIRED )

四、KITTI数据集下载

http://www.cvlibs.net/datasets/kitti/raw_data.php
国外源打不开,感谢这个博主提供的国内源下载:https://blog.csdn.net/weixin_43599336/article/details/86533572

泡泡链接(百度网盘):https://www.sohu.com/a/219232053_715754

或者
https://www.dalipan.com/detail/40c8f99ba2120a493a148f8332094668
 

五、跑KITTI数据集

下载KITTI里程表数据集到YOUR_DATASET_FOLDER。以序列08为例,打开两个终端,分别运行vins和rviz。(我们在没有闭环功能的KITTI基准上评估了里程计)

KITTI Odometry (Stereo)

    roslaunch vins vins_rviz.launch
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml
    rosrun vins kitti_odom_test ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/08/ 

 

ps:本人使用的是虚拟机,rviz有时会莫名其妙的退出,出现

[rvizvisualisation-2] process has died [pid 28370, exit code -11, cmd /opt/r

建议关掉虚拟机的加速3d图形(关机状态下操作)

下载KITTI原始数据集到YOUR_DATASET_FOLDER。以2011_10_03_drive_0027_synced为例。打开三个终端,分别运行vins、global fusion和rviz。绿色路径为VIO里程计;蓝色路径为GPS全局融合下的里程计。

KITTI GPS Fusion (Stereo + GPS)

    roslaunch vins vins_rviz.launch
    rosrun vins kitti_gps_test ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml YOUR_DATASET_FOLDER/2011_10_03_drive_0027_sync/ 
    rosrun global_fusion global_fusion_node

 

 

 

汽车演示上的VINS-Fusion

下载汽车包到YOUR_DATASET_FOLDER。打开四个终端,分别运行vins里程计、可视闭环(可选)、rviz和播放包文件。绿色路径为VIO里程计;红色路径为目视闭环下的里程计。

    roslaunch vins vins_rviz.launch
    rosrun vins vins_node ~/catkin_ws/src/VINS-Fusion/config/vi_car/vi_car.yaml 
    (optional) rosrun loop_fusion loop_fusion_node ~/catkin_ws/src/VINS-Fusion/config/vi_car/vi_car.yaml 
    rosbag play YOUR_DATASET_FOLDER/car.bag

六、运行在设备上

VIO不仅是一种软件算法,它严重依赖于硬件质量。对于初学者,我们建议您使用专业设备运行VIO,其中包含全局快门相机和硬件同步。

6.1 配置文件

为你的设备写一个配置文件。可以以EuRoC和KITTI的配置文件为例。

6.2 相机校正

VINS-Fusion支持多种相机模型(针孔,mei,等距)。您可以使用相机模型校准您的相机。我们将一些示例数据放在/camera_models/calibrationdata下面,告诉您如何校准。

cd ~/catkin_ws/src/VINS-Fusion/camera_models/camera_calib_example/
rosrun camera_models Calibrations -w 12 -h 8 -s 80 -i calibrationdata --camera-model pinhole

七. Docker 支持

为了进一步简化构建过程,我们在代码中添加了docker。Docker环境就像一个沙盒,因此使我们的代码与环境无关。要运行docker,首先确保在您的机器上安装了ros和docker。然后通过sudo usermod -aG docker $YOUR_USER_NAME将您的帐户添加到docker组。如果出现权限拒绝错误,请重新启动终端或注销并重新登录,输入:

cd ~/catkin_ws/src/VINS-Fusion/docker
make build

注意,构建docker的过程可能需要一段时间,这取决于您的网络和机器。成功构建vins - fusion后,可以使用run.sh脚本运行vins估计器。脚本run.sh可以接受多个标志和参数。Flag -k表示KITTI, -l表示环路融合,-g表示全局融合。您可以通过./run.sh -h获取使用细节。以下是该脚本的一些示例:

# Euroc Monocualr camera + IMU
./run.sh ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# Euroc Stereo cameras + IMU with loop fusion
./run.sh -l ~/catkin_ws/src/VINS-Fusion/config/euroc/euroc_mono_imu_config.yaml

# KITTI Odometry (Stereo)
./run.sh -k ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/

# KITTI Odometry (Stereo) with loop fusion
./run.sh -kl ~/catkin_ws/src/VINS-Fusion/config/kitti_odom/kitti_config00-02.yaml YOUR_DATASET_FOLDER/sequences/00/

#  KITTI GPS Fusion (Stereo + GPS)
./run.sh -kg ~/catkin_ws/src/VINS-Fusion/config/kitti_raw/kitti_10_03_config.yaml YOUR_DATASET_FOLDER/2011_10_03_drive_0027_sync/

在Euroc的情况下,您需要打开另一个终端并播放您的包文件。如果您需要修改代码,只需在更改之后使用适当的参数重新运行./run.sh即可。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VINS_FUSION编译运行 的相关文章

  • Ubuntu软件包apt-get无法更新解决办法

    Ubuntu软件更新的时候报错 Reading package lists Building dependency tree Reading state information You might want to run 39 apt ge
  • 游戏开发人员需要看的书籍

    编码习惯及设计基础 程序员修炼之道 http product dangdang com 9053091 html 这本书讲解的一些设计原理很实用 对设计感兴趣的同学可以一看 推荐指数 5星 图形渲染 客户端 3D绘图程序设计 http pr
  • 【MySql】杂记

    1 mysqldump常用于MySQL数据库逻辑备份 二进制日志文件 中提供了执行mysqldump之后对数据库的更改进行复制所需要的信息 2 要显示存储过程传出的值 xff0c 需要使用show关键字 3 MySQL数据类型 decima
  • 智能车调速部分

    下载本文 xff1a http pan baidu com s 1qWAW49m 杂谈 本文是自己在整理智能车项目相关心得时所作 xff0c 与大家分享 如需转载请注明出处 xff0c 谢谢 xff01 1 1 智能车简单调速 测速 要实现
  • Linux网络编程——UDP通信 代码实现

    UDP通信 1 UDP 代码实现流程如下所示 UDP通信过程 span class token comment 服务器端 span span class token number 1 span span class token functi
  • 为什么要防止头文件多重包含

    网上有大量文章说如何防止头文件多重包含 xff0c 却从来不去说为什么要去防止头文件多重包含 xff1f 还有极少数文章讲到了头文件多重包含的危害 xff0c 但是只提到了其中一点 先把题目的结论抛出来 xff0c 防止头文件多重包含的真正
  • rtthread ulog 日志组件

    ulog 简介 日志的定义 xff1a 日志是将软件运行的状态 过程等信息 xff0c 输出到不同的介质中 xff08 例如 xff1a 文件 控制台 显示屏等 xff09 xff0c 并进行显示和保存 为软件调试 维护过程中的问题追溯 性
  • UDS_19服务学习笔记

    1 19 01 ReportNumberOfDTCBByStatusMask 服务的目的 xff1a 通过上位机定义的DTCStatus 来获取服务端与状态掩码匹配的个数 Request 19 01 43 Status Response x
  • FreeRTOS-Systick笔记

    1 在Cortem M内核中 xff0c 继承了systick的定时器 xff0c 属于NVIC的一部分 xff0c 异常类型为 15 systick是一个24位的向下计数器 2 Systick寄存器 3 如何使用该定时器 1 xff09
  • FreeRTOS-任务调度

    1 系统配置完成systick模块后 xff0c 通常下每当产生一个systick中断就会运行SysTick Handler 2 分析void xPortSysTickHandler void a 通过操作寄存器basepri关闭一些中端
  • FreeRTOS-延迟分析vTaskDelay

    void vTaskDelay const TickType t xTicksToDelay 这个函数比较简单 xff0c 主要分析prvAddCurrentTaskToDelayedList这个函数 xff1a 将该任务挂到延迟列表里面
  • 华为荣耀刷机失败,不断重启的解决办法

    如果你因为用第三方的recovery刷了官方的rom xff0c 那么就会出现不断重启的情况 xff01 解决办法就是先刷回华为官方的recovery xff0c 再通过三键强刷一开始的华为官方rom xff0c 即可成功救砖 xff01
  • FreeRTOS笔记---列表和列表项

    1 列表结构体 xff1a typedef struct xLIST listFIRST LIST INTEGRITY CHECK VALUE 用来检查数据的完整性 configLIST VOLATILE UBaseType t uxNum
  • FreeRTOS学习笔记-----队列

    1 创建队列 define xQueueCreate uxQueueLength uxItemSize xQueueGenericCreate uxQueueLength uxItemSize
  • Autosar CAN通讯——CANSM

    关于CANSM参考 xff1a https zhuanlan zhihu com p 126073070
  • UDS一些时间参数

    最近在做 xff21 xff55 xff54 xff4f xff53 xff41 xff52 诊断 xff0c 发现在诊断中有一些时间参数需要配置 xff08 其实这个时间参数 xff21 xff55 xff52 xff4f xff53 x
  • sql server 数据库开发 知识点

    sql server 数据库开发 1 含义 xff1a 数据库设计实际上就是规划和结构化数据库中的数据对象以及这些数据对象之间关系的过程 E R图组成包括 xff1a 矩形表示实体集 椭圆表示属性 菱形表示关系 直线用来连接实体集与属性 x
  • Activiti学习笔记一 工作流基本概念

    最近刚接触流程引擎这一概念 xff0c 对Activiti进行学习 xff0c 感觉正在入门中 xff0c 整理下自己的学习笔记把 xff01 1 xff1a 工作流的概念 工作流 Workflow xff0c 就是 业务过程的部分或整体在
  • Activiti学习笔记六 流程实例 任务 执行对象控制流程执行

    上一篇我们看了流程定义 xff0c 我们接下来看一下流程实例 xff0c 任务 xff0c 和执行对象 流程实例 任务的执行 1 流程图 2 部署流程定义 private final ProcessEngine processEngine
  • datetimepicker 控件验证问题

    34 baseStudents activistTime 34 trigger 39 blur 39 validators notEmpty message 39 确定积极分子时间不能为空 39 span class hljs tag lt

随机推荐

  • eclipse中SVN分支合并到主干

    在项目开发中 xff0c 需要添加一些新的功能 xff0c 但是又不想影响到其他开发人员的项目进度 xff0c 所以决定使用SVN分支进行开发 xff0c 分支开发完毕后再合并到主干 本文介绍如何在eclipse中合并分支到主干 要想将分支
  • 阿里云服务器

    一年多之前 xff0c 也就11年5月份的样子 xff0c 阿里云云服务器产品线终于上线了 但那时候 xff0c 国内完全没有能称得上云服务器的 xff0c 很多小公司就是搞个VPS就叫云服务器了 以至于阿里云云服务器刚出来的时候 xff0
  • 双控机制信息化系统管理平台建设的趋势和必要性

    什么是安全双控体系 xff1f 双控体系即风险分级管控和隐患排查治理双重预防机制 xff0c 目的是对生产经营单位内的所有安全隐患进行系统性的全面排查 xff0c 结合相关安全隐患的危险程度 发生的可能性以及带来的严重后果进行分级别的管控
  • mac 下 使用 iterm2 配置及快键键使用

    mac 下 使用 iterm2 配置及快键键使用 标签 xff08 空格分隔 xff09 xff1a mac 之前介绍过一篇关于mac 下使用和配置 iterm2的blog 今天这篇稍微详细一点介绍 并且搭配 zsh zsh 会单独开一篇博
  • 登录报错后,状态码是401并弹出登录框

    前后端分离的项目 xff0c 登录失败后会弹出一个非前端页面登录框 这是因为登录失败 xff0c 返回的响应表头里添加了WWW Authenticate属性 WWW Authenticate Basic realm 61 34 oauth2
  • 解决secureCRT账号密码正确,无法连接服务器,那大概因为不支持新的密钥交换算法

    连接比较新版本的linux类服务器 xff0c 是否出现下面这些问题 xff1f 或者是openstack新建centos7镜像的时候 xff0c 无法连接新创建的centos7系统 我百度或者谷歌好像都没有找到答案啊 xff0c 所以才写
  • 树莓派SSH连接-SSH服务安装与开机自动启动

    1 SSH连接 SSH连接比Telnet远程桌面连接使用更为安全 xff0c 已经成为行业标准 使用SSH连接树莓派 xff0c 可以对树莓派进行远程控制与编程开发 xff0c 在没有桌面环境的条件下使用SSH连接是非常合适的选择 第2节和
  • 【VSCode Git】stage和stash的区别

    VSCode Git stage和stash的区别 问题来源 用vscode提交变更的文件时 xff0c 会发现2个相似的选项 Stage Changes 和 Stash Changes xff0c 乍一看不知道用哪个 xff0c 它们有什
  • canal文档

    简介 github地址 canal k n l xff0c 译意为水道 管道 沟渠 xff0c 主要用途是基于 MySQL 数据库增量日志解析 xff0c 提供增量数据订阅和消费 canal 工作原理 canal 模拟 MySQL slav
  • 自然拼读与词根词缀简版

    词根词缀 词根词缀重点 1 ab abs 表示远离 或否定 2 ac acr 表示尖 xff0c 酸 xff1b 3 aer aero 表示空气 xff0c 天空 4 am 表示爱 5 ambi ambul 表示周围 xff1b 6 ani
  • MySQL递归查询上下级菜单

    正文 在传统的后台管理系统里面经常会需要展示多级菜单关系 xff0c 今天我们来学一下如何使用一条SQL语句展示多级菜单 现在我们有一张corpinfo单位表 xff0c 里面有一个belong字段指向上级单位 xff0c 首先来看一下现在
  • 基于ESP32双无刷FOC电机的瓦力平衡机器人(2)

    恍恍惚惚中 xff0c 感觉瓦力已经慢慢悠悠的向我走来 xff0c 看了他的孤独 xff0c 感觉自己的也就不算什么了 断断续续搞了差不多两周的时间 xff0c 总算是把这些底层模块都调通了 xff08 虽然还完全看不出任何瓦力的影子 xf
  • 嵌入式 职位描述 职位要求

    来于智联招聘 前程无忧 xff0c 有关工作经验 xff0c 管理经验 xff0c 学历一并删掉 xff0c 只剩职位描述 职位要求 看看自己还缺些什么 嵌入式软件工程师 关专业 xff0c 本科或以上学历 xff1b 2 基础扎实 xff
  • 信道脉冲响应CIR

    博客写作技巧 xff1a 遇到的问题 如何解决问题 需要那种帮助 信道脉冲响应 xff1a CIR 问题 xff1a 场强测量系统需要获取场强和信道信息 xff0c 那么CIR是什么 xff1f 如何利用CIR反映信道特性 xff1f 解决
  • OpenMV数据打包发送以及STM32对数据的解析(串口方式)

    今天尝试了使用Openmv用串口发送数据 xff0c 32接收 xff0c 遇到了一些坑 xff0c 但是最后还是实现了 xff0c 难住我的地方并不是关于传输的代码 xff0c 而是那个板子串口3不知道因为什么原因接收到的数据是错误的 x
  • linux下 c++ 服务器开发(一)

    苦逼的c 43 43 程序员还没找到工作 xff0c 所以顺便开始写服务器练手 对内容不满意不要喷我我是写给自己看的 xff08 把自己犯得错误记下来 xff09 1 我的电脑是win10的 xff0c 所以先去网上下虚拟机 xff0c 我
  • 最优化算法——常见优化算法分类及总结

    之前做特征选择 xff0c 实现过基于群智能算法进行最优化的搜索 xff0c 看过一些群智能优化算法的论文 xff0c 在此做一下总结 最优化问题 在生活或者工作中存在各种各样的最优化问题 xff0c 比如每个企业和个人都要考虑的一个问题
  • 利用手机摄像头采集图片运行ORB-SLAM2

    一 ROS配置安装 二 ORB SLAM2配置安装 可参考前文 ROS仿真环境安装与配置 身在江湖的郭大侠的博客 CSDN博客 三 Android手机摄像头与ROS建立通信 GitHub有个开源的项目 xff0c 可以通过wifi将摄像头捕
  • VINS_FUSION

    VINS FUSIO xff2e 意义 VINS Fusion在VINS Mono的基础上 xff0c 添加了GPS等可以获取全局观测信息的传感器 xff0c 使得VINS可以利用全局信息消除累计误差 xff0c 进而减小闭环依赖 此外 x
  • VINS_FUSION编译运行

    一 ROS安装 见前文 二 ceres安装 GitHub地址 xff1a GitHub ceres solver ceres solver A large scale non linear optimization library 14 0