SLAM代码(SVO ros )

限时加码!20+主流AI编程工具免费用 购周边加赠Coding Plan Lite,Claude Code、Cursor等即刻畅享,学习进阶更高效! 阅读详情

SVO ros 节点解读

测试执行

  • 使用作者给出的bag文件,运行以下指令
rosbag play airground_rig_s3_2013-03-18_21-38-48.bag

这样会在ros环境中广播/camera/image_raw 图像message, svo节点重映射该message到cam_topic,并订阅该topoic。运行该节点程序

roslaunch svo_ros test_rig3.launch 

可视化输出结果

rosrun rviz rviz -d src/rpg_svo/svo_ros/rviz_config.rviz 

svo节点的输出节点通过一个tf变换和2个marker,这样可以可视化在rviz中。2个marker其中一个是point显示的相机的位置(svo/points),另外一个是(表示相机位姿的五面体(/svo/keyframe))
这里写图片描述
如图所示为svo节点广播的topic,其中svo/points和/svo/keyframe均为/visualization_msgs/marker类型的message.

运行结果

这里写图片描述
我使用同一段视频跑了2遍,发现所走的轨迹基本是完全一样的,从图中可以看出所用的背景很复杂,很有利于提取角点,有很多distinctive feature points。

ros node init

  • 创建ROS句柄
  • 订阅camera topic(svo/cam_topic)同时指定camera topic的回调函数
  • 指定广播的topics(可视化marker)
  • 订阅remote key用户输入,指定回调函数

VO的构造函数

vo节点的成员中包含FrameHandlerMono成员,该类完成svo的核心功能,其中包括image sparse alignment, feature alignment, pose and Structure Optimization

另一个是visualizer,负责输出message至rviz可视化显示计算结果,可以借鉴。广播的信息如下

pub_frames_ = pnh_.advertise<visualization_msgs::Marker>("keyframes", 10);
pub_points_ = pnh_.advertise<visualization_msgs::Marker>("points", 1000);
pub_pose_ = pnh_.advertise<geometry_msgs::PoseWithCovarianceStamped>("pose",10);

初始化(设置)marker的代码位于vikit中。
parameter设置,首先读取相机的内参数,使用分别读取了参数

cam_model: Pinhole
cam_width: 752
cam_height: 480
cam_fx: 414.536145
cam_fy: 414.284429
cam_cx: 348.804988
cam_cy: 240.076451
cam_d0: -0.283076
cam_d1: 0.066674
cam_d2: 0.000896
cam_d3: 0.000778

读取方法是

 getParam<int>(ns+"/cam_width"),

其中ns为参数的外层命名空间(svo)。
其次是读取相机的初始位姿。参数格式如下

<param name="init_rx" value="3.14" />
<param name="init_ry" value="0.00" />
<param name="init_rz" value="0.00" />

事实上,并不需要在launch文件中难过给出全部6D数据,因为如果从参数服务器中读不到的时候会返回一个默认值0.0.

图像的回调函数

ROS中首先sensor图像数据类型转化为opencv Mat类型,其次是处理用户输入,然后在vo中增加当前传入的图像(该该函数中分阶段处理图像(首帧,前2帧,和普通帧,重定位帧)),之后就是发布可视化message。

具体的流程如下
这里写图片描述

相关类简介

类 FrameHandlerMono(VO entity)

函数输入输出
构造函数抽象相机类-
增加图像Mat,时间戳-
设置首帧图像FramePtr-
读取末帧图像FramePtr

初始化

  • 构造特征检测子
  • 指定深度滤波器回调函数
  • 构造深度滤波器
  • 开启深度滤波器线程

processFirstFrame

  • 初始化机体到世界的齐次变化(4x4矩阵)
  • 单应矩阵得到第一帧图像
  • 增加keyframe
  • 增加新帧
  • 指示阶段变动

processSecondFrame

  • 单应矩阵增加第二帧图像
  • 两视图bundle adjustment
  • 添加新帧
  • 得到景深
  • 增加关键帧
  • 单应矩阵归零

processFrame

  • 获取上帧图像计算单应矩阵
  • 稀疏图像对齐 spase image alignment
  • Feature alignment
  • 如果重建误差大于预设阈值,那么丢弃计算所得变换,标注当前的计算是无效的.(map reprojection & feature alignment)
  • 位姿最优化,optimizeGaussNewton
  • 结构优化,optimizeStructure
SVO pro 编译运行 阅读详情

相关推荐

SLAMSVO2.0编译运行和论文代码解读

SVO2是我遇到的最难编译的代码了,可能公开版本不能放太鲁棒的代码吧,搞了快一个星期,终于跑起来了。

iwanderu的博客 5950

devexpress_20_december_2004 3/4

devexpress_20_december_2004 3/4

使用realsense t265测试svo2.0视觉里程计

毕业三年了,现在是第二份工作,第一份工作已经结束一年半了,这意味着,我有一年半的时间没有搞视觉SLAM相关的东西了,虽然在第二份工作也是做视觉相关的,但是只是用到一些目标识别和跟踪的知识,并锻炼了一下工程实现能力,编程能力,一直是我的一块心病,哈哈,由此可见我不用适合做程序员,至少不会是出色的程序员,但是这毕竟是我一个比较靠谱的职业,他可以让我生活的更好一些,所以,我还是在不断坚持,我去面试视觉SLAM岗位,面试官都会问,你有没有做过什么改进,可笑的是,我只是对一些开源的视觉SLAM代码熟悉一些而已。但是不

weixin_38636815的博客 2941

SLAM代码svo代码分析

在上文中我们从ROS节点出发,一步步介绍了SVO ros节点的运行流程,下面我们将深入介绍SVO大的核心代码SVO的核心主要分为3方面内容 - spase image alignment - Feature alignment - pose and Structure optimization - map 首先给出总体的结构图。 首先参考论文中的内容,进行分析。使用直接法最小化图像块

何必浓墨重彩 9933

ROS下安装和运行SVO数据包和实时详细过程

ROS下安装和运行SVO数据包和实时详细过程

行走星空的专栏 9667

SLAM-SVO-初始化-源代码解读(一)

#include <svo/config.h> #include <svo/frame.h> #include <svo/point.h> #include <svo/feature.h> #include <svo/initialization.h> #include <svo/feature_detection.h> #...

Jeff_ROS的博客 1102

SVO下载编译

参考: https://blog.csdn.net/seymour163/article/details/53947764 https://blog.csdn.net/u011092188/article/details/77833022 https://blog.csdn.net/weixin_44684139/article/details/104803225 https://blog.cs...

一只小菜鸟的博客 1467

SLAM开源代码

SLAM开源代码: ORB-SLAM :https://github.com/raulmur/ORB_SLAM LSD-SLAM:https://github.com/tum-vision/lsd_slam ORB-SLAM2:https://github.com/raulmur/ORB_SLAM2 DVO(密集视觉测距):https://github.com/tum-vision/dvo_slam SVO(半直接单眼视觉测距):https://github.com/uzh-rpg/rpg_sv.

m0_63647490的博客 1645

新手入门SLAM必收藏的资料

搜集了各大网络,请教了SLAM大神,终于把SLAM的入门资料搜集全了!在分享资料前,我们先来看看,SLAM技术入门前需要具备哪些知识?首先学习SLAM需要会C和C++,网上很多代码还用了11标准的C++。第二要学会用Linux。第三要会cmake,vim/emacs及一些编程工具。第四要会用openCV, PCL, Eigen等第三方库。只有学会了这些东西,才能真正上手编一个SLAM系统。如果要跑...

SLAMTEC的博客 1847

如何入门SLAM

SLAM入门必收藏的资料 搜集了各大网络,请教了SLAM大神,终于把SLAM的入门资料搜集全了!在分享资料前,我们先来看看,SLAM技术入门前需要具备哪些知识?首先学习SLAM需要会C和C++,网上很多代码还用了11标准的C++。第二要学会用Linux。第三要会cmake,vim/emacs及一些编程工具。第四要会用openCV, PCL, Eigen等第三方库。只有学会了这些东西...

weixin_30467087的博客 189

SLAM学习笔记 - 视觉SLAM方法资源汇总

工具类: ros框架 linux系列教程 vim Eigen Eigen快速入门 Pangolin Pangolin安装与使用 数据集: TUM 数据格式 提供python写的工具,参考 TUM数据集测评工具的使用 除此之外提供online测试 合并深度图和rgb: python assoc...

weixin_30321709的博客 154

SVO2.0 安装编译

SVO2-OPEN: https://github.com/uzh-rpg/rpg_svo_pro_open git挂梯子 https://blog.csdn.net/qq_33349365/article/details/101514412 如果各位终端无法挂梯子,直接下载我在码云上整理好的代码: 第一种编译方式: git clone https://gitee.com/ma_yu_armor/svo2_build.git 第二种编译方式: git clone -b method2 ..

qq_43111963的博客 4573

【位姿估计_代码_开源复现】SVO-SLAM在Ubuntu20.04中运行

在Ubuntu20.04运行SVO

qq_49421419的博客 922

Ubuntu16.04+ROS Kinetic环境下svo编译运行

准备工作: 安装Sophus(这个库是维护的比较好的一个李群和李代数的库) 注: 其实你在运行其他版本的slam系统的时候大概率已经安装过,不过这里面执行一下,无伤大雅,也不会搞乱你的系统。 #catkin_ws 是自己创建的ROS工作空间,在之前的博客里面也有创建ROS工作空间教程 cd catkin_ws/src/SVO #后面源代码拷贝到这个目录下,所以将svo需要的库也放在这里面 ...

ouyangandy的博客 1355

SLAM秋招知识点总结——自动驾驶算法、3D视觉岗位(附有解答)

前言 本文为楼主在学习SLAM过程中相关知识点总结,包含多视图几何、常见SLAM系统源码解析、相关数学知识、图像处理问题、机器视觉知识点、《十四讲》精品总结、基本库安装等系列。这些知识点帮助我在2020年秋招面试自动驾驶岗位过程中有了系统认知。2020年新冠疫情影响滞留在家,把之前学习的知识点做了系统总结,所有问题都有解答,并附有链接,希望可以帮助到之后寻找相关岗位的同学。 目录 一、多视图...

try_again_later的博客 4385

SVOSLAM)编译运行

SVO即“Fast Semi-Direct Monocular Visual Odometry”视觉slam算法 编译环境:Ubuntu14.04-LTS(64位)、ROS Indigo 不得不说,这个代码是我目前为止编译最为顺利的一个,没有遇到之前各种奇奇怪怪的问题。虽然完全按照原作者的方法来编译应该不会出现问题,但还是决定写一篇关于svo编译的。一是关于这个编译的文章少,我百度的时候没出来...

weixin_30352191的博客 1378

【视觉SLAM】视觉SLAM相关开源算法总结

稀疏的视觉SLAM MonoSLAM 第一个实时、单目SLAM系统,基于EKF优化。 PTAM 单目,首次将tracking和mapping并行化,首次采用了BA优化,之后加入了重定位部分。 ORB-SALM/2 v1只支持单目,三个独立的线程进行tracking,mapping,loop closing,基于BA进行局部优化,基于图优化进行全局优化。v2支持单目,双目,RGB-D。VI ORB-...

weixin_42696356的博客 5329

第1章 机器人SLAM定位入门最全知识体系及资料推荐入门

机器人SLAM知识体系:多而杂。

行知SLAM 6221

一起自学SLAM算法:9.3 SVO算法

连载文章,长期更新,欢迎关注:下面将从原理分析、源码解读和安装与运行这3个方面展开讲解SVO算法。

机器人研究猿-CSDN 1320
上一篇: SLAM代码(优化及常用库)
下一篇: SLAM代码之svo代码分析
wendox
博客等级 码龄16年 420粉丝 99原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值