Ubuntu20.04运行msckf_vio

news2024/11/27 7:09:30

文章目录

  • 环境配置修改
  • 编译项目
  • 运行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.5550000667572
	nr. of poses	2872
	path length (m)	59.50526035148245
	pos_end (m)	[0.59253062 2.10984284 0.88684343]
	pos_start (m)	[0.72924003 2.13096787 0.98620158]
	t_end (s)	1403715417.862143
	t_start (s)	1403715274.307143
--------------------------------------------------------------------------------
name:	data
infos:
	duration (s)	143.5550000667572
	nr. of poses	28712
	path length (m)	58.591730330076274
	pos_end (m)	[0.489592 1.967734 0.967288]
	pos_start (m)	[0.878612 2.14247  0.947262]
	t_end (s)	1403715417.857143
	t_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.244463
      mean	0.129176
    median	0.122528
       min	0.006008
      rmse	0.142572
       sse	58.378097
       std	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.147140
      mean	0.031982
    median	0.029215
       min	0.000090
      rmse	0.037516
       sse	4.040794
       std	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.coloradmin.cn/o/2248271.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络 第4章 网络层

计算机网络 (第八版)谢希仁 第 4 章 网络层4.2.2 IP地址**无分类编址CIDR**IP地址的特点 4.2.3 IP地址与MAC地址4.2.4 ARP 地址解析协议4.2.5 IP数据报的格式题目2:IP数据报分片与重组题目:计算IP数据报的首部校验和(不正确未改) …

Angular面试题汇总系列一

1. 如何理解Angular Signal Angular Signals is a system that granularly tracks how and where your state is used throughout an application, allowing the framework to optimize rendering updates. 什么是信号 信号是一个值的包装器,可以在该值发生变化时…

SAR ADC系列15:基于Vcm-Base的开关切换策略

VCM-Based开关切换策略:采样~第一次比较 简单说明: 电容上下极板分别接Vcm(一般Vcm1/2Vref)。采样断开瞬间电荷锁定,进行第一次比较。 当VIP > VIN 时,同时 减小VIP 并 增大VIN 。P阵列最高权重电容从Vcm(1/2Vref)…

实现Excel文件和其他文件导出为压缩包,并导入

导出 后端&#xff1a; PostMapping("/exportExcelData")public void exportExcelData(HttpServletRequest request, HttpServletResponse response, RequestBody ResData resData) throws IOException {List<Long> menuIds resData.getMenuIds();List<Co…

某车企ASW面试笔试题

01--背景 去年由于工作岗位的动荡&#xff0c;于是面试了一家知名车企&#xff0c;上来进行了一番简单的介绍之后&#xff0c;被告知需要进入笔试环节&#xff0c;以往单位面试都是简单聊聊技术问题&#xff0c;比如对软件开发的流程或者使用的工具等待问题的交流&#xff0c;…

计算(a+b)/c的值

计算&#xff08;ab&#xff09;/c的值 C语言代码C语言代码Java语言代码Python语言代码 &#x1f490;The Begin&#x1f490;点点关注&#xff0c;收藏不迷路&#x1f490; 给定3个整数a、b、c&#xff0c;计算表达式(ab)/c的值&#xff0c;/是整除运算。 输入 输入仅一行&…

【在Linux世界中追寻伟大的One Piece】多线程(二)

目录 1 -> 分离线程 2 -> Linux线程互斥 2.1 -> 进程线程间的互斥相关背景概念 2.2 -> 互斥量mutex 2.3 -> 互斥量的接口 2.4 -> 互斥量实现原理探究 3 -> 可重入VS线程安全 3.1 -> 概念 3.2 -> 常见的线程不安全的情况 3.3 -> 常见的…

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?

【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化&#xff1f; 重要性&#xff1a;★★ NLP Github 项目&#xff1a; NLP 项目实践&#xff1a;fasterai/nlp-project-practice 介绍&#xff1a;该仓库围绕着 NLP 任务模型的设计、训练、优化、部署和应用&am…

AIGC--AIGC与人机协作:新的创作模式

AIGC与人机协作&#xff1a;新的创作模式 引言 人工智能生成内容&#xff08;AIGC&#xff09;正在以惊人的速度渗透到创作的各个领域。从生成文本、音乐、到图像和视频&#xff0c;AIGC使得创作过程变得更加快捷和高效。然而&#xff0c;AIGC并非完全取代了人类的创作角色&am…

C++11特性(详解)

目录 1.C11简介 2.列表初始化 3.声明 1.auto 2.decltype 3.nullptr 4.范围for循环 5.智能指针 6.STL的一些变化 7.右值引用和移动语义 1.左值引用和右值引用 2.左值引用和右值引用的比较 3.右值引用的使用场景和意义 4.右值引用引用左值及其一些更深入的使用场景分…

React中事件处理和合成事件:理解与使用

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

大数据新视界 -- 大数据大厂之 Hive 数据桶:优化聚合查询的有效手段(下)(10/ 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

基于FPGA的信号DM编解码实现,包含testbench和matlab对比仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 1.编码器硬件结构 2.解码器硬件结构 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) FPGA测试结果如下&#xff1a; matlab对比仿真结果如下&#xff1a; 2.算法运行软…

鸿蒙中拍照上传与本地图片上传

1.首页ui import { picker } from kit.CoreFileKit; import fs from ohos.file.fs; import request from ohos.request; import { promptAction } from kit.ArkUI; import { cameraCapture } from ./utils/CameraUtils; import { common } from kit.AbilityKit; import { Imag…

【算法】连通块问题(C/C++)

目录 连通块问题 解决思路 步骤&#xff1a; 初始化&#xff1a; DFS函数&#xff1a; 复杂度分析 代码实现&#xff08;C&#xff09; 题目链接&#xff1a;2060. 奶牛选美 - AcWing题库 解题思路&#xff1a; AC代码&#xff1a; 题目链接&#xff1a;687. 扫雷 -…

人工智能 实验2 jupyter notebook平台 打印出分类器的正确率

实验2 jupyter notebook平台 【实验目的】掌握jupyter notebook平台的使用方法 【实验内容】上传文件到jupyter notebook平台&#xff0c;学会编辑运行ipynb文件 【实验要求】写明实验步骤&#xff0c;必要时补充截图 安装Anaconda。 2、 将BreadCancer.zip上传到jupyter no…

【贪心算法第五弹——300.最长递增子序列】

目录 1.题目解析 题目来源 测试用例 2.算法原理 3.实战代码 代码解析 注意本题还有一种动态规划的解决方法&#xff0c;贪心的方法就是从动态规划的方法总结而来&#xff0c;各位可以移步博主的另一篇博客先了解一下&#xff1a;动态规划-子序列问题——300.长递增子序列…

Spring Boot——统一功能处理

1. 拦截器 拦截器主要用来拦截用户的请求&#xff0c;在指定方法前后&#xff0c;根据业务需要执行设定好的代码&#xff0c;也就是提前定义一些逻辑&#xff0c;在用户的请求响应前后执行&#xff0c;也可以在用户请求前阻止其执行&#xff0c;例如登录操作&#xff0c;只有登…

【2024】前端学习笔记19-ref和reactive使用

学习笔记 1.ref2.reactive3.总结 1.ref ref是 Vue 3 中用来创建响应式引用的一个函数&#xff0c;通常用于基本数据类型&#xff08;如字符串、数字、布尔值等&#xff09;或对象/数组的单一值。 ref特点&#xff1a; ref 可以用来创建单个响应式对象对于 ref 包裹的值&…

javaweb-day01-html和css初识

html:超文本标记语言 CSS&#xff1a;层叠样式表 1.html实现新浪新闻页面 1.1 标题排版 效果图&#xff1a; 1.2 标题颜色样式 1.3 标签内颜色样式 1.4设置超链接 1.5 正文排版 1.6 页面布局–盒子 &#xff08;1&#xff09;盒子模型 &#xff08;2&#xff09;页面布局…