从0开始跑通VINS FUSION(KITTI数据集)

2023-05-16

背景:

VINS FUSION是香港科技大学在VINS MONO后做的推出的多功能版,有双目的数据,还有和GPS的融合。作为一个SLAM小白,记录一下整个的跑通过程。

代码连接:https://github.com/HKUST-Aerial-Robotics/VINS-Fusion

环境:

这里和作者github主页一致,但由于条件有限,我使用的是虚拟机。

Ubuntu 16.04 LTS,ceres1.13.0,ROS Kinect。opencv自己装的3.3。应该网上有很多安装这些软件/库的方法,印象中如果用最新的ceres需要把cmake版本提升,不能用16.04下sudo apt-get获得的默认版本。

一、编译

这里用作者github页面下的方法就行,但是博主我就是小白,还是写的清楚一点。

首先你要建个文件夹,博主建的文件夹就叫 vins-catkin_ws,里面再建一个叫src的文件夹,然后把解压好的代码(博主的文件夹叫VINS-FUSION-master)放进去。这时候就是/vins-catkin_ws/src/VINS-FUSION-master的目录顺序。

然后命令行进入到/vins-catkin_ws这一层,进行catkin make。

注意:这里博主遇到了问题,博主本来的虚拟机分配了1核1G内存,在前面15%的时候卡死了,查了下自己笔记本的配置,最后分配了2核4G内存,编译花了大概10分钟的时间。另外看到过网上部分人提到使用catkin make是默认-j2的,也有可能会卡主(反正我也小白不太懂),博主就是 -j1进行的编译。有兴趣的朋友可以试一下其他。

(编译完成后的成功截图)

之后需要开启ros的工作空间,就是source devel/setup.bash。这条命令执行完后,博主的终端没有显示。

具体的代码是如下:

mkdir -p vins-catkin_ws/src
cd vins-catkin_ws/src
git clone https://github.com/HKUST-Aerial-Robotics/VINS-Fusion.git
cd ..
catkin make -j1
source devel/setup.bash

博主是在home目录下建的文件夹,如果是别的路径,那么自己修改路径就可以了,这些都没问题。

 

二、数据集

这个对应4.1的KITTI的examples。首先需要注意的是,因为底下跑数据集的数据都需要开多个终端,那么基本顺序是类似的,首先打开一个终端roscore,让ros跑起来。然后注意,在每一个终端运行roslaunch或者rosrun的时候,都需要在工作区间内,就是你都需要source devel/setup.bash。

在跑通demo之前,还需要数据集。对于KITTI,你可以从官网下载,也可以找国内的备份。我所知的泡泡机器人网站分享的连接都是度盘,体感上比国外的网站也快不到哪去(https://www.sohu.com/a/219232053_715754,不过这个好像也不全。)

另外再分享个博文,国内的镜像,速度还不错http://dataset.f3322.net:666/share/kitti/

插一个题外话,因为博主用的是虚拟机,一开始只分配了20G的空间,一次性放入所有的数据集空间不太够,如果有同样的萌新可以参考https://blog.csdn.net/weixin_39510813/article/details/78387334

 

三、跑Odometry的示例

作者在github主页上有两个基于KITTI数据集的示例,第一个是Odometry,数据是KITT Odometry dataset,作者给出的运行的命令贴在这里

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/00/ 

首先第二个的optional是可选的(作者也在主页上做出了说明),就是回环检测的部分。感兴趣的同学可以跑两次试试,当然跑的时候(optional)是要去掉的。在跑之前,可以看到作者用的是sequence/00的数据,整个KITTI的Odometry数据包括

可以看到除了最后1M的开发工具,前面是灰阶和彩色图像数据,Velodyne(激光雷达公司名)的数据,标定数据和真实的位姿。这些是分开存储的,每个文件夹都有sequence/很多数据,00是第一个。需要把其中的数据拿出来放到一个文件夹内(如果你偷懒,就叫sequence/00),那么这个路径用来替换后面的YOUR_DATASET_FOLDER/sequence/00/。因为在作者给出的动图中是灰阶,我这里也是用的grayscale的数据,没有用color。

另外,作者也把结果其他的准备工作就是替换成你自己的文件路径(作者默认的路径是如下,替换自己的就好)。

然后再编译成功的基础上就可以尝试跑起来了。具体步骤如下:

①先打开一个终端roscore(默认是已经成功编译);

②再打开一个终端,先进入ros的工作区间,即输入 source vins-catkin_ws/devel/setup.bash,然后把rivz打开。即roslaunch vins vins_rviz.launch;

(我这里坐标系还有问题,还没解决)

③在进入工作区间后,运行rosrun vins kitti_odom_test vins-catkin_ws/src/VINS-Fusion-master/config/kitti_odom/kitti_config00-02.yaml dataset/sequences/00/命令。

④最后运行第三条命令打开回环,(还是要进工作区间),rosrun loop_fusion loop_fusion_node vins-catkin_ws/src/VINS-Fusion-master/config/kitti_odom/kitti_config00-02.yaml

(运行时,rosrun的节点名称,比如loop_fusion_node,是和CMakeLists中add_excutable的可执行文件名一致的,跑KITTI Raw的)

之后,你的rviz就会显示实时的轨迹和双目图像的跟踪情况,具体如下图

(至于为什么回环这里显示no image,还在研究中。。。)

更改配置文件中的输出路径,也可以把回环后的全局位姿输出到表格文件中,如下图:

(数据分析工作还在继续)

四、跑GPS Fusion的结果

和上面跑odometry的情况类似,这里我们也是首先需要把数据下好,还是先贴上原作者的代码:

 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

可以看到,作者是需要原始数据中2011_10_03_drive_0027_sync的数据当例子,这个数据在KITTI数据集官网的路径如下:raw data→Residental(善用网页关键字搜索即可)。如果想看最后的结果,还是需要在配置文件的outpath处修改你自己的路径。

顺序类似于跑odometry的结果,这里直接给出步骤:(确保你完成了catkin_make成功的基础上)

①还是打开一个终端,运行roscore

②新终端下打开rviz,运行roslaunch vins vins_rviz.launch

③打开另一个终端,利用source命令进入工作区间后,运行rosrun vins kitti_gps_test vins-catkin_ws/src/VINS-Fusion-master/config/kitti_raw/kitti_10_03_config.yaml dataset/2011_10_03_drive_0027_sync/

④打开另一个新的终端,进入工作区间后,运行rosrun global_fusion global_fusion_node
 

结果和odometry比较类似。

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

从0开始跑通VINS FUSION(KITTI数据集) 的相关文章

  • 在STM32下完成基于FreeRTOS的多任务程序

    目录 一 任务要求二 FreeRTOS移植1 简单介绍2 应用实例 一 任务要求 在STM32下完成一个基于FreeRTOS的多任务程序 xff0c 执行3个周期性task task1 xff0c 每间隔500ms闪烁 xff08 变化 x
  • 学习HTML后总结

    目录 一 HTML简介二 软件 插件使用三 HTML的文档结构1 元素2 文本格式3 标题4 超链接5 图片 文件路径img6 表格7 列表List8 表单Form9 其他内容 一 HTML简介 HTML是超文本标记语言 xff08 Hyp
  • 学习CSS后总结

    目录 一 CSS简介二 CSS语法三 CSS的生效方式四 CSS实际使用1 颜色 尺寸 对齐2 盒子模型3 边框与边距4 定位5 溢出6 浮动7 透明度8 组合选择器9 伪类和伪元素 一 CSS简介 CSS是级联样式表 xff08 Casc
  • 《通信软件开发与应用》课程结业报告

    目录 一 作业内容二 完成过程三 问题及解决办法四 仍然存在的问题五 总结 一 作业内容 要求 xff1a 完成一个静态网站的制作 可使用你喜欢的任何CSS框架如BootStrap MDB tailwind等 xff0c 页面不少于5个 x
  • prometheus + grafana 监控Mysql、主机、Redis超简入门

    文章目录 grafana安装启动如何导入需要的dashboard prometheus安装集成grafanaExportermysqld exporter安装配置 node exporterredis exporter grafana 安装
  • 地址栏中输入IP地址提示指定的网络名不再可用的解决方法

    在日常工作中 xff0c 我们有的时候为了省去在网上邻居查找相关资料的麻烦 xff0c 一般都直接在地址栏中输入远程地址 xff0c 如192 168 1 100 F xff0c 可有的时候偏偏输入地址后却提示 指定的网络名不再可用 的问题
  • ubuntu18.04添加用户

    文章目录 前言一 创建用户目录二 修改用户权限 前言 笔记 在远程服务的时候经常遇到用户登入冲突的情况 xff0c 在此做了总结 一 创建用户目录 span class token comment 创建deepstream user spa
  • 详细介绍如何在ROS 中使用自定义 msg 消息

    首先我们对Ros中的msg 消息做以简单的回顾 xff1a msg 消息是 ROS topic 通讯时 xff0c 节点之间进行传递的内容 msg 消息描述的是业务之间传递数据 xff0c 也可以理解为业务之间数据的抽象化 常见 Msg 消
  • linux下的信号量操作示例

    include lt sys types h gt include lt sys ipc h gt include lt sys sem h gt include lt pthread h gt include lt errno h gt
  • 用户行为分析的指标及其意义

    什么是用户行为 xff1f 用户行为由最简单的五个元素构成 xff0c 我们可以简单地记为3W2H xff1a 时间 xff08 When xff09 地点 xff08 Where xff09 人物 xff08 Who xff09 交互 x
  • 二层漫游和三层漫游(转载)

    漫游域 根据STA是否在同一个子网内漫游 xff0c 可以将漫游分为二层漫游和三层漫游 不同子网之间的漫游是三层漫游 xff08 同一个VLAN pool内的漫游仍然属于二层漫游 xff09 网络中有时候会出现以下情况 xff1a 两个子网
  • HTML DOM 事件

    1 HTML DOM 事件 参考文档 xff1a https www runoob com jsref dom obj event html HTML DOM 事件允许Javascript在HTML文档元素中注册不同事件处理程序 事件通常与
  • 用户分类以及用户活跃度的衡量方法

    一个APP最根本的便是用户 xff0c 那么当然用户也分许多种类 xff0c 比如活跃用户 留存用户 流失用户等等 xff0c 那么一般情况下又是怎么来分析活跃用户的呢 xff1f 首先 xff0c 我们来看一下用户的具体分类 不同类型的用
  • 什么是用户标签?其实很好理解

    用户画像与用户标签 亚马逊的CEO Jeff Bezos曾说过他的梦想 xff0c 如果我有一百万的用户 xff0c 我就会做一百万个不同的网站 xff01 xff0c 做这个的基础是先对用户打标签 什么是用户画像呢 xff1f 就是根据某
  • 用户标签体系的意义及设计方法

    我们这次重点谈一下用户标签 对于市场层面 xff0c 用户标签能帮助我们什么 xff1f 1 完善数据仓 之前我们讲过 xff0c 企业或市场要有自己的数据仓来进行线索的存储与培育 xff0c 用户标签就是存在于此 xff0c 我们希望用户
  • 如何设计数据埋点方案?知道这2步就行了

    数据埋点是什么 xff1f 数据埋点是数据产品经理 数据运营以及数据分析师 xff0c 基于业务需求 xff08 例如 xff1a CPC点击付费广告中统计每一个广告位的点击次数 xff09 xff0c 产品需求 xff08 例如 xff1
  • 什么是UTM参数?这些你知道吗

    现在移动互联网发展比较迅速 xff0c 而且现在很多人都在做公众号 xff0c 公众号也要有自己的特色 xff0c 这样才能给自己的产品带来利益 现在也有很多的人关注APP运营 xff0c APP运营工作中的每一步都会讲求ROI xff08
  • 用户触达方式及用户触达渠道选择

    任何用户运营过程总离不开用户触达渠道的连接 可以说 xff0c 触达渠道的组合选择 xff0c 是与你最终运营效果直接挂钩的 xff0c 用户触达方式的选择直接影响了你运营的结果 如何做精准的用户触达 如何选择不同的用户触达方式 如何最大限
  • 用户行为分析之渠道分析、转化分析、留存分析

    数据分析脱离不了业务 xff0c 不同的业务所关注的数据不同 xff0c 比如互联网 快消等 xff0c 行业不同 xff0c 关注的数据点也不同 在互联网行业普遍产品的数据分析中 xff0c 我认为用户行为分析最重要的三个点是渠道分析 转
  • 通过用户分级实现精细化运营

    10年前 xff0c pc互联网时代 xff0c 当你浏览百度的网页 xff0c 你会普遍看到各种插件推广 弹窗广告等等 xff0c 这些弹窗就好似牛皮癣一样 xff0c 想关掉都不行 用户体验极其不好 xff0c 这是一个 卖方 占绝对优

随机推荐

  • 如何进行流失用户召回?做到这三步!

    如果按照每天渠道投放获客1000名 xff0c 次日留存率40 来算 xff0c 每天会有60 的用户 xff0c 第二天就再也不打开我们的APP xff0c 最终成为了流失用户 平均每日损失几百到数万元不等 虽然相比动辄几百万到几千万的融
  • Spring使用到的设计模式

    Spring涉及到的设计模式 简单工厂模式工厂模式单例模式适配器装饰器模式 Decortor代理模式观察者模式策略模式模板模式 简单工厂模式 一个工厂类根据传入的参数 xff0c 动态决定创建哪一个类 public abstract cla
  • 路由协议的优先级

    对于相同的目的地 xff0c 不同的路由协议 xff08 包括静态路由 xff09 可能会发现不同的路由 xff0c 但这些路由并不都是最优的 事实上 xff0c 在某一时刻 xff0c 到某一目的地的当前路由仅能由唯一的路由协议来决定 为
  • 自己动手写操作系统 将引导程序成功写入优盘启动电脑

    原文 xff1a http freesoftman iteye com blog 629598 输入命令 xff1a nasm boot asm o boot bin 一会儿就生成了一个镜像文件boot bin 该文件就是我所谓的操作系统了
  • 关于C语言等高级语言能不能直接控制硬件的问题

    关于C语言等高级语言能不能直接控制硬件的问题 xff0c 我认为C语言等高级语言不能直接控制硬件 这里谈论的问题本质是 xff0c C语言等高级语言能不能直接对硬件进行编程 我认为 xff0c 不能 众所周知 xff0c 计算机之初的程序员
  • scanf函数输入字符 %c之前要有空格分析

    问题描述如下 xff1a test c int main void int n 61 0 char c while 1 scanf 34 c 34 amp c printf 34 c d n 34 c 43 43 i return 0 这段
  • Linux0.11内核 进程睡眠和唤醒

    当进程等待资源或者事件时 xff0c 就进入睡眠状态 有两种睡眠态 xff0c 不可中断睡眠态 xff08 TASK UNINTERRUPTIBLE xff09 和可中断睡眠态 xff08 TASK INTERRUPTIBLE xff09
  • ubuntu linux 触控板失灵的解决方案

    这几天研究内核的模块机制 xff0c 接触到了一些关于模块的操作命令 xff0c 比如lsmod命令可以列出内核中已经安装的模块 xff0c insmod命令可以安装一个指定的模块 xff0c rmmod可以删除一个指定的模块 也是处于好奇
  • Linux 安装远程桌面并设置添加分辨率

    本来想用本地的kali linux来远程登陆centos的服务器 xff0c 在远程服务器安装VM xff0c 再VM里安装Windows虚拟机 xff0c 用作工作娱乐需要 xff0c 尼玛八颗八核至强CPU xff0c 128G内存 x
  • 将数据库文件导入mysql并输出为txt文件

    大致上MySQL数据库备份可以采用两种方式 xff1a 一种就是直接导出sql语句或者易于导入的其他格式的sql存储文件 xff0c 使用sql语句或者一些可视化客户端导出 xff0c 这种方法非常简单 xff0c 无需赘述 xff1b 另
  • golang gorilla/mux设置静态目录

    发现网上都是类似下面的代码 96 96 96 s 61 34 Users golang golang 34 http Handle 34 static 34 http StripPrefix 34 static 34 http FileSe
  • ios系统removeCachedResponseForRequest无效的替代方案

    相信你能找到我这篇博客 xff0c 肯定是对URLCache缓存有了深刻的理解 xff0c 并且被ios系统api removeCachedResponse ForRequest使用起来并不能删除指定的缓存所困惑 其实也可以自己想办法来模拟
  • DHCPv6报文介绍

    摘自HUAWEI官网 DHCPv6报文格式如图11 2所示 图11 2 DHCPv6的报文格式 表11 1 DHCPv6报文中各个字段的含义 字段 长度 含义 msg type 1字节 表示报文的类型 xff0c 取值为1 xff5e 13
  • vnc服务器的搭建

    vnc服务的概述 xff1a VNC Virtual Network Computing 虚拟网络计算机的缩写 xff0c 主要是完成图形界面的远程控制使用 一个vnc系统是由客户端 服务器端和一个协议组成 服务器是分享其屏幕 xff0c
  • openwrt配置wifi桥接上级AP,再作为ap路由(可实现ip透传,例如远距离图像传输)

    第一步 上级ap配置为 接入点AP xff08 WDS xff09 xff0c 例如无人机的飞机端作为wds ap a xff0c 无线概况里点击修改 b xff0c ESSID改为你想要的名字 xff0c 要选择固定信道 xff08 非常
  • 菜鸟学Linux命令:ssh命令

    转载自品略图书馆 http www pinlue com article 2020 04 1003 1210139769049 html 1 查看SSH客户端版本 有的时候需要确认一下SSH客户端及其相应的版本号 使用ssh V命令可以得到
  • STM32串口发送数据

    串口通信经常作为开发调试的工具 xff0c 所以先介绍下串口通信 串口通讯 Serial Communication 是一种设备间非常常用的串行通讯方式 xff0c 因为它简单便捷 xff0c 大部分电子设备都支持该通讯方式 xff0c 电
  • npm ERR! code EINTEGRITY 解决方案

    报错信息 xff1a Error sha1 HsihLT8VutOkAReGpzpIZJY2twQ 61 integrity checksum failed when using sha1 wanted sha1 HsihLT8VutOkA
  • VScode搭建C/C++开发环境

    目录 1 VScode是什么 xff1f 2 VScode的下载和安装 2 1下载和安装 下载 xff1a 安装 xff1a 2 2环境的介绍 环境介绍 xff1a 安装中文版插件 xff1a 3 VScode配置C C 43 43 开发环
  • 从0开始跑通VINS FUSION(KITTI数据集)

    背景 xff1a VINS FUSION是香港科技大学在VINS MONO后做的推出的多功能版 xff0c 有双目的数据 xff0c 还有和GPS的融合 作为一个SLAM小白 xff0c 记录一下整个的跑通过程 代码连接 xff1a htt