SVO编译
文章目录
- 软件版本
- 错误
- 编译
- 运行
- 轨迹路径保存
- 运行TUM数据集
- 附录
- 针对svo slam的/svo/pose_imu转为tum格式代码
软件版本
ubuntu | 20 |
---|---|
ros | noetic |
SVO SLAM | |
虚拟机 windows 11 |
错误
- 常见的git clone问题可以使用DevSidecar解决,在 加速服务-基本设置-绑定IP 设置为0.0.0.0,虚拟机网络连接设置为桥接,之后在虚拟机中设置网络中的 Network Proxy,IP为WindowsIP地址,端口为DevSidecar代理端口。
- server certificate verification failed. CAfile: none CRLfile: none。参考CSDN博客
- Cloning into ‘dbow2_src’…ssh: connect to host github.com port 22: Connection timed out。参考CSDN博客
cd svo_ws/src
git clone https://github.com/dorian3d/DBoW2.git
tar -cvf DBoW2.tar DBoW2
# 修改svo_ws/src/dbow2_catkin/CMakeLists.txt
ExternalProject_Add(dbow2_srcGIT_REPOSITORY git@github.com:dorian3d/DBoW2.gitCMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CATKIN_DEVEL_PREFIX}BUILD_COMMAND CXXFLAGS=-i${CATKIN_DEVEL_PREFIX}/include makeINSTALL_COMMAND make install
)
# 改为 XXXXXX为DBoW2.tar所在路径
ExternalProject_Add(dbow2_srcURL XXXXXX/DBoW2.tarCMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CATKIN_DEVEL_PREFIX}BUILD_COMMAND CXXFLAGS=-i${CATKIN_DEVEL_PREFIX}/include makeINSTALL_COMMAND make install
)
编译
创建工作空间,克隆代码
mkdir -p svo_ws/src && cd svo_ws/src
cd ..
catkin config --init --mkdirs --extend /opt/ros/noetic --cmake-args -DCMAKE_BUILD_TYPE=Release -DEIGEN3_INCLUDE_DIR=/usr/include/eigen3
cd src
git clone https://github.com/uzh-rpg/rpg_svo_pro_open.git
依赖下载
# 该步骤任选其一执行
# 1
vcs-import < ./rpg_svo_pro_open/dependencies.yaml
# 1 结束# 2
git clone https://github.com/catkin/catkin_simple.git &&\
git clone https://github.com/zurich-eye/cmake_external_project_catkin.git &&\
git clone https://github.com/ethz-asl/eigen_catkin.git &&\
git clone https://github.com/ethz-asl/eigen_checks.git &&\
git clone https://github.com/uzh-rpg/fast_neon.git &&\
git clone https://github.com/ethz-asl/gflags_catkin.git &&\
git clone https://github.com/ethz-asl/glog_catkin.git &&\
git clone https://github.com/ethz-asl/minkindr.git &&\
git clone https://github.com/ethz-asl/opengv.git &&\
git clone https://github.com/ethz-asl/minkindr_ros.git &&\
git clone https://github.com/ethz-asl/ceres_catkin.git &&\
git clone https://github.com/uzh-rpg/dbow2_catkin.git &&\
git clone https://github.com/uzh-rpg/rpg_trajectory_evaluation.git
# 2结束
编译
touch minkindr/minkindr_python/CATKIN_IGNORE
cd rpg_svo_pro_open/svo_online_loopclosing/vocabularies && ./download_voc.sh
cd ../../..
catkin build
运行
启动SVO核心ROS节点
source XXXXXX/devel/setup.bash
roslaunch svo_ros euroc_mono_frontend_imu.launch
播放数据集
rosbag play XXXXXX/DataSets/MH_01_easy.bag
运行图片
轨迹路径保存
svo轨迹数据通过 /svo/points 话题发布,该话题为visualization_msgs/Marker(中文参考)类型。旋转数据通过 /svo/pose_imu 发布,该话题为geometry_msgs/PoseWithCovarianceStamped(中文参考)类型。
轨迹路径保存主要分为以下几步:
- 启动svo_ros
- 播放bag包,在开始后按下空格暂停
- 新开两个终端记录话题信息/svo/points和/svo/pose_imu
- 继续播放bag包
- 将/svo/pose_imu数据转化为
进行轨迹对比时,使用tum格式进行对比。EUROC转tum命令如下
evo_traj euroc groundtruth.csv --save_as_tum
/svo/pose_imu原始数据转化为tum格式代码见附录
获取到真实轨迹与实际轨迹后进行对比,代码与结果如下(感觉结果有点不对,希望知道的人指出):data为真实轨迹,svo_result为ros结果
evo_traj tum data.tum svo_result.txt -p -s --align_origin -a --plot_mode=xyz --ref=data.tum
运行TUM数据集
待补充
附录
针对svo slam的/svo/pose_imu转为tum格式代码
in_file_path = "svo_pose_data.txt"
out_file_path = "svo_result.txt" rfp = open(in_file_path)
wfp = open(out_file_path,"w")
file_end = False
while file_end != True:time = 0tx = 0ty = 0tz = 0qx = 0qy = 0qz = 0qw = 0for i in range(19):line = rfp.readline()if line == "":file_end = Truebreakif i == 3:time += float(line.split(":")[1])elif i == 4:time += float(line.split(":")[1])/1e9elif i == 9:tx = float(line.split(":")[1])elif i == 10:ty = float(line.split(":")[1])elif i == 11:tz = float(line.split(":")[1])elif i == 13:qx = float(line.split(":")[1])elif i == 14:qy = float(line.split(":")[1])elif i == 15:qz = float(line.split(":")[1])elif i == 16:qw = float(line.split(":")[1])else:passwrite_str = "{time} {tx} {ty} {tz} {qx} {qy} {qz} {qw}\n".format(time=time,tx=tx,ty=ty,tz=tz,qx=qx,qy=qy,qz=qz,qw=qw)# print(write_str)wfp.write(write_str)
rfp.close()
wfp.close()
print("保存完毕")
相关文章:

SVO编译
文章目录 软件版本错误编译运行轨迹路径保存运行TUM数据集 附录针对svo slam的/svo/pose_imu转为tum格式代码 软件版本 ubuntu 20 rosnoeticSVO SLAM虚拟机 windows 11 错误 常见的git clone问题可以使用DevSidecar解决,在 加速服务-基本设置-绑定IP 设置为0.0.0…...

探索未知:最新发布的顶级浏览器,为你带来前所未有的浏览体验
目录 学习目标: 学习内容: 学习时间: 学习产出: 基本功能和操作方法: 如何打开和关闭浏览器 如何新建和关闭标签页 前进、后退、刷新页面等导航操作 使用地址栏和搜索栏进行访问和搜索 管理浏览器的历史记录 高级功能&…...

EasyX图形化学习(三)
1.帧率: 即每秒钟界面刷新次数,下面以60帧为例: 1.数据类型 clock_t: 用来保存时间的数据类型。 2.clock( ) 函数: 用于返回程序运行的时间,无需参数。 3.例子: 先定义所需帧率: const …...

git-生成证书、公钥、私钥、error setting certificate verify locations解决方法
解决方法 方法1-配置证书、公钥、私钥打开Git Bash设置名称和邮箱执行,~/.ssh执行,ssh-keygen -t rsa -C "这是你的邮箱",如图:进入文件夹可以看到用记事本之类的软件打开id_rsa.pub文件,并且复制全部内容。…...

论文笔记(四十)Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds
Goal-Auxiliary Actor-Critic for 6D Robotic Grasping with Point Clouds 文章概括摘要1. 介绍2. 相关工作3. 学习 6D 抓握政策3.1 背景3.2 从点云抓取 6D 策略3.3 联合运动和抓握规划器的演示3.4 行为克隆和 DAGGER3.5 目标--辅助 DDPG3.6 对未知物体进行微调的后视目标 4. 实…...

k8s学习-Deployment
Kubernetes通过各种Controller来管理Pod的生命周期 。 为了满足不同业 务 景 , Kubernetes 开发了Deployment、ReplicaSet、DaemonSet、StatefuleSet、Job等多种Controller。我们⾸先学习最常用Deployment。 1.1 Kubectl命令直接创建 第一种是通过kubectl命令直接…...

Unity之四元数
欧拉角 万向节死锁 四元数是什么 Unity中四元数的初始化 四元数和欧拉角的互相转换 补充 四元数相乘代表旋转四元数...

【计算机硬件】3、输入输出技术、总线结构
文章目录 输入输出技术内存与接口地址的编址方法1、 内存与接口地址独立编址方法2、内存与接口地址统一编址方法 计算机和外设间的数据交互方式1、程序控制(查询)方式2、程序中断方式3、DMA方式(直接主存存取) 总线结构 输入输出技术 内存与接口地址的编…...

k8s的对外服务--ingress
service作用体现在两个方面 1、集群内部 不断跟踪pod的变化,更新endpoint中的pod对象,基于pod的IP地址不断变化的一种服务发现机制 2、集群外部 类似负载均衡器,把流量ip端口,不涉及转发url(http,https&a…...

CSS 雷达监测效果
<template><view class="center"><view class="loader"><view></view></view></view></template><script></script><style>/* 设置整个页面的背景颜色为深灰色 */body {background-col…...

C# System.MissingMethodException
C#应用程序工程调用C#类库工程生成的动态链接库调试时报错: System.MissingMethodException HResult0xFFFFFFFF Message找不到方法…… 软件结构如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; usi…...

Redis面试题23
Redis 的持久化机制是什么? 答:Redis 提供了两种持久化机制来保证数据的持久性,即 RDB(Redis Database)和 AOF(Append Only File)。 RDB 持久化:RDB 是 Redis 默认的持久化方式。它…...

Linux中的yum源仓库和NFS文件共享服务
一.yum简介 1.1 yum简介 yum,全称“Yellow dog Updater, Modified”,是一个专门为了解决包的依赖关系而存在的软件包管理器。类似于windows系统的中电脑软件关键,可以一键下载,一键安装和卸载。yum 是改进型的 RPM 软件管理器&am…...

【LeetCode2744】最大字符串配对数目
1、题目描述 【题目链接】 标签:数组,哈希表,字符串,模拟 给你一个下标从 0 开始的数组 words ,数组中包含 互不相同 的字符串。 如果字符串 words[i] 与字符串 words[j] 满足以下条件,我们称它们可以…...

安全加速SCDN是什么
安全加速SCDN(Secure Content Delivery Network,SCDN) 是集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。已使用内容分发网络(CDN)或全站加速网络(ECDN)的用户&…...

Android 布局菜鸟 android中的布局类型和特点?
一、LinearLayout(线性布局) 1、 特点: 主要以水平或垂直方式来排列界面中的控件。并将控件排列到一条直线上。在线性布局中,如果水平排列,垂直方向上只能放一个控件,如果垂直排列,水平方向上也只能放一个控件。 2、适⽤场景: Android开发中最常见的 ⼀种布局⽅式,排列…...

2023总结与2024寒假计划
王泽政 2023 的总结 学习总结 关于 2023 学习总体上来讲,2023 学的东西还是不少的,有对技术栈广度的扩展,也有对计算机深度的挖掘。 学习内容总结: 学习 React 学习浏览器渲染原理 学习计算机网络 学习 Next.js 学习 Nest.…...

016-Vue-黑马2023:前后端分离开发(在线接口文档),前端工程化、Element、vue编写一个完成页面、Vue路由、vue打包部署到nginx
第三节 前后端分离开发 1、介绍 开发模式 前后端混合开发:传统开发模式 前后端分离开发:当前最为主流的开发模式 页面原型需求案例:分析出接口文档 离线开发文档示例: 2、YAPI(官网已停用) 202…...

如何给新华网投稿发稿?新华网的媒体发稿方法步骤
现如今,互联网已经成为了人们获取信息的主要途径,各大媒体网站也成为了发布自己作品的首选平台。其中,新华网作为中国最具影响力的新闻媒体之一,其内容覆盖面广、触及人群众多,因此,能够在新华网上发表文章…...

为什么 macOS 比 Windows 稳定?
在计算机操作系统领域,macOS 和 Windows 分别是苹果公司和微软公司的主打产品。尽管两者都拥有大量的用户群体,但在稳定性和用户体验方面,macOS 常常被认为优于 Windows。那么,为什么 macOS 比 Windows 更稳定呢? 我们…...

从matlab的fig图像文件中提取数据
这里用的是openfig()函数打开的fig文件 →→→【matlab 中 fig 数据提取】 很简洁 →→→【MATLAB提取 .fig 文件中的数据】 这个给出了包含多个曲线的情况 →→→【提取matlab fig文件里的数据和legend】 chatgpt给出的方法 打开fig文件并保存数据 我的…...

基于网络爬虫的微博热点分析,包括文本分析和主题分析
基于Python的网络爬虫的微博热点分析是一项技术上具有挑战性的任务。我们使用requests库来获取微博热点数据,并使用pandas对数据进行处理和分析。为了更好地理解微博热点话题,我们采用LDA主题分析方法,结合jieba分词工具将文本分割成有意义的…...

前端图片转base64 方法
在uni-app、Vue.js或其他前端框架中,将图片转换为Base64编码的过程是相似的。以下是一个简单的示例,说明如何在这些环境中使用JavaScript将图片转换为Base64编码。 1. HTML部分 首先,你需要在HTML中放置一个文件输入元素,用于选…...

Go语言数据结构(一)双向链表
list容器 Go语言中list容器定义在"container/list"包中,实现了一个双向链表。本文第一部分总结源码包中的方法,第二部分展示使用list包的常见示例用法以及刷题时的用法。 食用指南:先看第二部分的常用示例用法然后再用到时在第一部…...

【MySql】MySQL 如何创建新用户
具体代码与实现方法 登录 MySQL: 使用 root 用户或具有相应权限的用户登录到 MySQL。可以使用以下命令: mysql -u root -p这里 -u 后面跟的是用户名,-p 表示提示输入密码。 创建新用户: 使用以下 SQL 命令创建新用户:…...

【DFS】200.岛屿数量
题目 法1:DFS 最简单的DFS必须掌握!!! class Solution {public int numIslands(char[][] grid) {int m grid.length, n grid[0].length, ans 0;if (m 0 || n 0) {return ans;}boolean[][] visited new boolean[m][n];for…...

Vue动态添加新的属性到实例上(vue的问题)
当我们去看vue文档的时候,发现如果在实例创建之后添加新的属性到实例上,它不会触发视图更新。比如我们我们开始创建了一个对象实例,在实例创建之后为其增加新的属性,我们发现这个属性不能生效,此时需要使用this.$set()方法。 &…...

HarmonyOS应用开发者高级认证
一、判断题 云函数打包完成后,需要到AppGallery Connect创建对应函数的触发器才可以在端侧中调用(错) 在column和Row容器组件中,aligntems用于设置子组件在主轴方向上的对齐格式,justifycontent用于设置子组件在交叉轴…...

设计模式复盘
一、背景 在项目中,对于单据的扩展是基于类似于接口扩展实现的。从业务横行来看,业务有A、B、C;从纵向来看,单个业务逻辑编排也可以划分为基础数据查询,决策判断,逻辑执行三大块。 单据扩展:平…...

电力能源三维可视化合集 | 图扑数字孪生
电力能源是现代社会发展和运行的基石,渗透于工业、商业、农业、家庭生活等方方面面,它为经济、生活质量、环境保护和社会发展提供了巨大的机会和潜力。图扑软件应用自研 HT for Web 强大的渲染引擎,助力现代化的电力能源数字孪生场景…...