Ubuntu20.04运行msckf_vio

文章目录

  • 环境配置修改
  • 编译项目
  • 运行MSCKF_VIO
    • 运行 Launch 文件
    • 运行 rviz
    • 播放 ROSBAG 数据集
  • 运行结果
  • 修改mskcf 保存轨迹
  • EVO轨迹评价
    • EVO轨迹评估流程
    • 实操
      • 先把euroc的真值转换为tum,保存为data.tum
      • 正式评估
  • 报错1
    • 问题描述
  • 报错2
    • 问题描述
    • 问题分析
    • 问题解决
  • 参考


环境配置修改

在CMakelists.txt中c++设置为14,OpenCV设置为4

add_compile_options(-std=c++14)
...
find_package(OpenCV 4 REQUIRED)

编译项目

cd ~/catkin_ws
catkin_make --pkg msckf_vio --cmake-args -DCMAKE_BUILD_TYPE=Release

编译完成后,使用以下命令加载 ROS 工作空间环境

source ~/catkin_ws/devel/setup.bash

运行MSCKF_VIO

项目提供了两个 .launch 文件,分别用于 EuRoC 数据集和 Fast Flight 数据集,运行以下命令来启动相应的 VIO 系统:

运行 Launch 文件

  1. 对于 EuRoC 数据集
roslaunch msckf_vio msckf_vio_euroc.launch
  1. 对于 Fast Flight 数据集
roslaunch msckf_vio msckf_vio_fla.launch

这会启动两个 ROS 节点:image_processor 和 vio。

运行 rviz

在目录中执行以下命令来运行 rviz :

rviz -d src/msckf_vio/rviz/rviz_euroc_config.rviz

播放 ROSBAG 数据集

rosbag play V1_01_easy.bag

注意,在初始化之前,机器人需要处于静止状态,以便滤波器能够使用前200个IMU消息来正确初始化陀螺仪和加速度计的偏置以及初始姿态。

运行结果

在这里插入图片描述

修改mskcf 保存轨迹

这部分完全按照这个进行的修改python2 安装evo 与 评价MSKCF 等slam系统

注意此处是w x y z顺序,而TUM顺序为x y z w 根据这个MSCKF-VIO输出轨迹文件,但没有验证。

https://github.com/symao/msckf_vio/blob/evaluation/src/msckf_vio.cpp

EVO轨迹评价

EVO轨迹评估流程

  1. 先把euroc的真值转换为tum,记得更改data.csv目录,在euroc在这里插入代码片的zip包中可以找到
evo_traj euroc data.csv --save_as_tum
  1. 正式评测,记得更改相应目录和对应的文件名
#输出轨迹、ape、rpe, p表示plot, va进行轨迹对齐
evo_traj tum vio.txt --ref groundtruth.tum -p -va
evo_ape tum groundtruth.tum vio.txt -p -va
evo_rpe tum groundtruth.tum vio.txt -p -va

实操

先把euroc的真值转换为tum,保存为data.tum

catkin_ws/src/msckf_vio$ evo_traj euroc /mnt/hgfs/Shared/datasets/EuRoC/V1_01_easy/mav0/state_groundtruth_estimate0/data.csv --save_as_tum
--------------------------------------------------------------------------------
name:	data
infos:	28712 poses, 58.592m path length, 143.555s duration
--------------------------------------------------------------------------------
Trajectory saved to: data.tum

正式评估

evo_traj tum vio.txt --ref data.tum -p -va

catkin_ws/src/msckf_vio$ evo_traj tum vio.txt --ref data.tum -p -va
--------------------------------------------------------------------------------
Loaded 5805 stamps and poses from: vio.txt
Loaded 28712 stamps and poses from: data.tum
--------------------------------------------------------------------------------
Found 2872 of max. 5805 possible matching timestamps between...reference
and:	vio.txt
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning vio.txt to reference.
Aligning using Umeyama's method...
Rotation of alignment:
[[-0.96918837  0.24620687  0.00748809][-0.24626393 -0.96916983 -0.00799443][ 0.00528894 -0.00959215  0.99994001]]
Translation of alignment:
[0.72924937 2.13045627 0.98621442]
Scale correction: 1.0
--------------------------------------------------------------------------------
name:	vio
infos:duration (s)	143.5550000667572nr. of poses	2872path length (m)	59.50526035148245pos_end (m)	[0.59253062 2.10984284 0.88684343]pos_start (m)	[0.72924003 2.13096787 0.98620158]t_end (s)	1403715417.862143t_start (s)	1403715274.307143
--------------------------------------------------------------------------------
name:	data
infos:duration (s)	143.5550000667572nr. of poses	28712path length (m)	58.591730330076274pos_end (m)	[0.489592 1.967734 0.967288]pos_start (m)	[0.878612 2.14247  0.947262]t_end (s)	1403715417.857143t_start (s)	1403715274.3021429

在这里插入图片描述

evo_ape tum data.tum vio.txt -p -va

catkin_ws/src/msckf_vio$ evo_ape tum data.tum vio.txt -p -va
--------------------------------------------------------------------------------
Loaded 28712 stamps and poses from: data.tum
Loaded 5805 stamps and poses from: vio.txt
--------------------------------------------------------------------------------
Synchronizing trajectories...
Found 2872 of max. 5805 possible matching timestamps between...data.tum
and:	vio.txt
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method...
Rotation of alignment:
[[-0.96918837  0.24620687  0.00748809][-0.24626393 -0.96916983 -0.00799443][ 0.00528894 -0.00959215  0.99994001]]
Translation of alignment:
[0.72924937 2.13045627 0.98621442]
Scale correction: 1.0
--------------------------------------------------------------------------------
Compared 2872 absolute pose pairs.
Calculating APE for translation part pose relation...
--------------------------------------------------------------------------------
APE w.r.t. translation part (m)
(with SE(3) Umeyama alignment)max	0.244463mean	0.129176median	0.122528min	0.006008rmse	0.142572sse	58.378097std	0.060334--------------------------------------------------------------------------------
Plotting results... 

APE(Absolute Pose Error,绝对位姿误差),用于评估VIO(视觉惯性里程计)或SLAM系统的绝对精度,反映了估计轨迹(vio.txt) 和地面真值(data.tum) 之间在平移方面的误差随时间的变化情况。

  1. 纵轴 (APE, 单位为米):表示估计轨迹与地面真值之间的绝对误差。数值越大,表示误差越大;数值越小,表示估计越准确。

  2. 横轴 (时间, t(s)):表示时间,以秒为单位。

  3. 曲线 (APE):灰色的曲线代表了随时间变化的绝对位姿误差。我们可以看到误差在整个时间段内的波动,表明估计轨迹的准确性在不同时间点存在差异。

  4. 统计线:

    • 蓝色线 (rmse):均方根误差,代表整体误差的一个重要统计量,越小表示估计效果越好。
    • 红色线(median):中位数误差,表示误差的中间值,通常能反映误差的分布情况。
    • 绿色线(mean):均值误差,表示平均误差值,可以用来衡量整体的误差水平。
    • 紫色阴影(std):标准差,表示误差的波动程度。紫色区域越宽,表示误差在不同时间点的波动越大。
  5. 误差变化趋势:

    • 在最开始的时间段,误差波动较大,但整体稳定在一个相对较低的水平(大约 0.10 - 0.15 米之间)。
    • 中期段,误差趋于降低,但仍存在一定的波动。
    • 在 100 秒之后,误差逐渐增大,达到 0.2 米以上,说明在后续的轨迹估计中误差变得更明显,估计轨迹的准确性有所降低。
  6. 总结:

    • 整体来说,系统的轨迹估计在前期和中期的表现较为稳定,但在后期误差有所增加。
    • 均方根误差 (rmse) 和 均值误差 (mean) 都显示在 0.1 - 0.15 米之间,表明总体的误差水平相对可控,但在某些时刻误差波动较大。
    • 标准差 (std) 的范围提示我们,误差在时间上的波动性较强,尤其在部分时间段内。

evo_rpe tum data.tum vio.txt -p -va

catkin_ws/src/msckf_vio$ evo_rpe tum data.tum vio.txt -p -va
--------------------------------------------------------------------------------
Loaded 28712 stamps and poses from: data.tum
Loaded 5805 stamps and poses from: vio.txt
--------------------------------------------------------------------------------
Synchronizing trajectories...
Found 2872 of max. 5805 possible matching timestamps between...data.tum
and:	vio.txt
..with max. time diff.: 0.01 (s) and time offset: 0.0 (s).
--------------------------------------------------------------------------------
Aligning using Umeyama's method...
Rotation of alignment:
[[-0.96918837  0.24620687  0.00748809][-0.24626393 -0.96916983 -0.00799443][ 0.00528894 -0.00959215  0.99994001]]
Translation of alignment:
[0.72924937 2.13045627 0.98621442]
Scale correction: 1.0
--------------------------------------------------------------------------------
Found 2871 pairs with delta 1 (frames) among 2872 poses using consecutive pairs.
Compared 2871 relative pose pairs, delta = 1 (frames) with consecutive pairs.
Calculating RPE for translation part pose relation...
--------------------------------------------------------------------------------
RPE w.r.t. translation part (m)
for delta = 1 (frames) using consecutive pairs
(with SE(3) Umeyama alignment)max	0.147140mean	0.031982median	0.029215min	0.000090rmse	0.037516sse	4.040794std	0.019612--------------------------------------------------------------------------------
Plotting results... 

报错1

问题描述

在项目构建时出现报错 Could not find a package configuration file provided by "random_numbers"
在这里插入图片描述

构建过程无法找到 random_numbers 包,这是一个 ROS 包,通常用于生成随机数。

安装 random_numbers 包:

sudo apt-get update
sudo apt-get install ros-noetic-random-numbers

报错2

问题描述

运行 rviz -d src/msckf_vio/rviz/rviz_euroc_config.rviz时,出现闪退情况。

[ INFO] [1732588553.257890582]: rviz version 1.14.25
[ INFO] [1732588553.257936010]: compiled against Qt version 5.12.8
[ INFO] [1732588553.257940901]: compiled against OGRE version 1.9.0 (Ghadamon)
[ INFO] [1732588553.264549191]: Forcing OpenGl version 0.
[ INFO] [1732588554.146584297]: Stereo is NOT SUPPORTED
[ INFO] [1732588554.146659189]: OpenGL device: SVGA3D; build: RELEASE;  LLVM;
[ INFO] [1732588554.146685523]: OpenGl version: 4.1 (GLSL 4.1) limited to GLSL 1.4 on Mesa system.
*** stack smashing detected ***: terminated
./run2.sh:行 4: 15123 已放弃               (核心已转储) rviz -d src/msckf_vio/rviz/rviz_euroc_config.rviz

问题分析

这个报错表明在运行 rviz 时发生了 “stack smashing”,这是一个与内存管理相关的问题,通常是因为程序访问了未定义或非法的内存区域,导致栈保护机制触发。

OpenGL 驱动问题

根据日志,rviz 在初始化 OpenGL 时出现了以下提示:

  1. Stereo is NOT SUPPORTED:表明当前显卡或虚拟机环境不支持立体视觉。
  2. OpenGL device: SVGA3D:这是虚拟机的虚拟显卡。
  3. OpenGl version: 4.1 (GLSL 4.1):虽然显示支持 OpenGL 4.1,但实际使用的是 Mesa 的软件渲染器。

在虚拟机中,显卡驱动和 OpenGL 支持可能不完善,rviz 依赖 OpenGL 来渲染,因此容易触发类似问题。

问题解决

解决方法

  1. 启用硬件加速: 在虚拟机设置中启用 3D 硬件加速。
  2. 更新虚拟机工具: 如果使用 VMware 或 VirtualBox,确保安装了最新版本的虚拟机工具(如 VMware Tools 或 VirtualBox Guest Additions),并启用了 3D 图形支持。
  3. 尝试使用软件模式运行 RViz: 修改 rviz 配置文件,强制使用软件渲染器运行:
export LIBGL_ALWAYS_SOFTWARE=1
rviz -d src/msckf_vio/rviz/rviz_euroc_config.rviz

export LIBGL_ALWAYS_SOFTWARE=1是一个环境变量设置,用于告诉 OpenGL 强制使用 软件渲染(Software Rendering)而不是硬件渲染(Hardware Rendering)。它在运行依赖 OpenGL 的程序时非常有用。

具体含义

  1. LIBGL_ALWAYS_SOFTWARE 是 Mesa 3D 图形库的一个环境变量。
  2. 设置为 1 时,强制使用 CPU 进行 OpenGL 渲染,而不是依赖 GPU 的硬件加速。

参考

msckf_vio在ubuntu20.04中的编译

msckf-vio 跑Euroc数据集,并用evo进行评估

MSCKF-VIO输出轨迹文件

https://github.com/symao/msckf_vio/blob/evaluation/src/msckf_vio.cpp

rviz global status显示为error的问题解决

运行msckf_vio

运行msckf_vio

msckf-vio 跑Euroc数据集,并用evo进行评估


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479182.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vscode下面python调试报错ImportError: cannot import name ‘Literal‘ from ‘typing‘

1 问题描述 我在vscode下面编写python程序,这个程序是在一个英伟达anoconda环境下的项目。之前能运行能调试,最近发现只能运行ctlf5,但是使用f5进行调试时,报错“File “c:\Users\86137.vscode\extensions\ms-python.debugpy-202…

vim 分割窗口后,把状态栏给隐藏

一、基本环境 主机MacOs Sonoma 14.7主机终端Iterm2虚拟机Parallels Desktop 20 for Mac Pro Edition 版本 20.0.1 (55659)虚拟机-操作系统Ubuntu 22.04 最小安装 二、分割窗口后的截图,红色线条部分就是状态栏 分割后个布局是:顶部1行高度窗口&#x…

flink学习(7)——window

概述 窗口的长度(大小): 决定了要计算最近多长时间的数据 窗口的间隔: 决定了每隔多久计算一次 举例:每隔10min,计算最近24h的热搜词,24小时是长度,每隔10分钟是间隔。 窗口的分类 1、根据window前是否调用keyBy分为键控窗口和非键控窗口…

【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测

简介:介绍 TM-16多线激光雷达 在8210A载板,TX2核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX2里已经安装了ROS版本:Melodic。 大家好,…

【排版教程】Word、WPS 分节符(奇数页等) 自动变成 分节符(下一页) 解决办法

毕业设计排版时,一般要求每章节的起始页为奇数页,空白页不显示页眉和页脚。具体做法如下: 1 Word 在一个章节的内容完成后,在【布局】中,点击【分隔符】,然后选择【奇数页】 这样在下一章节开始的时&…

【GAMES101笔记速查——Lecture 20 Color and Perception】

颜色与感知 目录 1 光场(Light Field / Lumigraph) 1.1 全光函数 1.1.1 改进:引入波长 1.1.2 改进:添加时间t 1.1.3 改进:人可以移动,添加空间坐标 1.1.4 改进:不把函数当电影来看。 1.…

HTML5和CSS3新增特性

HTML5的新特性 HTML5新增的语义化标签 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量…

ArcGIS+deck.gl矢量切片三维化表示建筑白模

01 背景介绍 很多ArcGIS API for JavaScript的用户想要ArcGIS的矢量切片技术体系实现Mapbox gl将城市建筑物footprint矢量切片三维化成建筑白模的效果。效果如图:截图来自mapbox studio1但目前仅靠ArcGIS VectorTileServer 和 ArcGIS API for JavaScript本身无法达…

Windows下安装FreeSurfer教程

简介 FreeSurfer 是一个开源软件包,用于分析和可视化横断面和纵向研究的结构、功能和扩散神经成像数据。它由Athinoula A. Martinos 生物医学成像中心的计算神经成像实验室开发。 官网 功能 FreeSurfer 为结构 MRI 数据提供完整的处理流,包括&#xf…

RTMP协议

背景介绍 RTMP(Real Time Messaging Protocol) 是由 Adobe 公司基于 Flash Player 播放器对应的音视频 flv 封装格式提出的一种,基于TCP 的数据传输协议。本身具有稳定、兼容性强、高穿透的特点。常被应用于流媒体直播、点播等场景。常用于推…

计算机网络----基本概念

基本概念 在这一章从整体上介绍计算机网络的概况, 为后续的学习搭建起整体的框架; 介绍计算机网络中的基础术语和概念; 什么是因特网 『 因特网 』是一个世界范围内互联了数以亿计的计算设备的计算机网络; 因特网具体构成 因特网互联了数以亿计的计算设备, 这些设备被称为…

CKA认证 | Day4 K8s管理应用生命周期(下)

第四章 K8s管理应用程序生命周期(下) 1、Pod对象 1.1 Pod 的基本概念 Pod 是 Kubernetes 中最基本和最重要的概念之一,是一个逻辑抽象概念,Kubernetes创建和管理的最小单元, 一个Pod由一个容器或多个容器组成。它简…

【微服务】Nacos

一、安装 1、官网地址:https://nacos.io/download/nacos-server/ 2、启动:找到bin目录下的startup.cmd双击启动,或者打开一个命令窗口输入: startup.cmd -m standalone双击启动后如下:可以访问控制台地址 访问后的…

学习笔记032——Spring学习笔记

文章目录 一、Spring开发步骤二、Spring配置文件1、Bean标签基本配置2、Bean标签范围配置3、Bean生命周期配置4、Bean实例化三种方式5、Bean的依赖注入概念6、Bean的依赖注入方式【第一种:set方法注入】【第二种:构造方法注入】 7、Bean的依赖注入的数据…

某科技研发公司培训开发体系设计项目成功案例纪实

某科技研发公司培训开发体系设计项目成功案例纪实 ——建立分层分类的培训体系,加强培训跟踪考核,促进培训成果实现 【客户行业】科技研发行业 【问题类型】培训开发体系 【客户背景】 某智能科技研发公司是一家专注于智能科技、计算机软件技术开发与…

Elasticsearch:Retrievers 介绍

检索器(retrievers)是 Elasticsearch 中搜索 API 中添加的新抽象层。它们提供了在单个 _search API 调用中配置多阶段检索管道的便利。此架构通过消除对复杂搜索查询的多个 Elasticsearch API 调用的需求,简化了应用程序中的搜索逻辑。它还减…

Python学习34天

import random class Game: peo0 rob0 # # def __init__(self,peo,rob): # self.peopeo # self.robrob def Play(self): """ 石头剪刀布游戏,0代表石头,1代见到,2代表石头 …

hive的存储格式

1) 四种存储格式 hive的存储格式分为两大类:一类纯文本文件,一类是二进制文件存储。 Hive支持的存储数据的格式主要有:TEXTFILE、SEQUENCEFILE、ORC、PARQUET 第一类:纯文本文件存储 textfile: 纯文本文件存储格式…

solr 远程命令执行 (CVE-2019-17558)

目录 漏洞描述 执行漏洞py脚本,取得shell连接 EXP 漏洞描述 Apache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。Velocity是Apache基金会旗下的一个开源软件项目,旨在确保Web应用程序在表示层和业…

uname -m(machine) 命令用于显示当前系统的机器硬件架构(Unix Name)

文章目录 关于 arm64 架构检查是否安装了 Rosetta 2其他相关信息解释:命令功能:示例: dgqdgqdeMac-mini / % uname -m arm64您运行的 uname -m 命令显示您的系统架构是 arm64。这意味着您的 Mac Mini 使用的是 Apple 的 M1 或更新的芯片&…