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

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

今年年初我用了一年的时间完成了两个工作,单房间和多房间扫地机的覆盖率测试软件,从场地搭建到软件开发,都是我一个人,虽然很多时候感觉到孤寂,但是看到其他同事跟项目经理扯皮时,被项目经理追着不放时,我感觉我是幸运的。完成了上面的项目后,领导让我开始调研视觉SLAM,想在我们现有的扫地机算法上加上视觉算法,重操旧业,感觉不错,但是压力还是不小的,我没有信息能做好,最初的一段时间我忙着去医院保胎,还得赶紧把驾照考出来,所以调研的进度比较慢,后来胎儿稳定了,驾照也考出来了,我的心也安定下来,专心做起工作来。

虽说是调研,但是还得实践,不能说光看看论文,博客就可以了,那就不得不搭建环境,把算法跑起来。说到大环境,不得不让我想起来,我在研究生时刚开始研究视觉SLAM时,那那基本上两三天重装一次Ubuntu系统,我还有个电子文档专门记录我的一些成功的操作,哪个库怎么安装,但是压力确实很大,Linux系统知识,编程能力,视觉SLAM基础知识,数学基础,真的让我吃不消,不知道当初为啥非要选这个方向。大概是没有自知之明,真是惨不忍睹。

话说回来,正是有了之前的无数次失败的经验,以及五六年里的知识沉淀,所以这次重新搭建环境就感觉轻松很多,因为我坚信,我遇到的问题,在网上一定会找到答案的,当时你如果能跳墙那是很好的,你的视野大了不是一点半点。之前一直用的是Ubuntu16.04,现在用的是Ubuntu8.04,差别不是很大。之前搭建过orb-slam3的环境,这次也比较顺畅,下一个是svo,尤其是svo2.0,费了老鼻子劲了。很多问题是因为网络问题导致的,一个是Ubuntu上我不能跳墙,在着就是,公司网速不好,一个东西要重复下载好几次,才有可能成功。所以第二次下载是我就使用手机热点,确实要好很多。

一、在原有win10系统的基础上安装Ubuntu18.04系统

 

Windows10安装ubuntu18.04双系统教程 - 不妨不妨,来日方长 - 博客园

Ubuntu上安装一个sogou输入法,好使

搜狗输入法linux-安装指导搜狗输入法for linux—支持全拼、简拼、模糊音、云输入、皮肤、中英混输https://shurufa.sogou.com/linux/guide 

二、Ros melodic安装

我按照官网和一些博客文章安装最后在rosdep update出了问题一直解决不了,不过这篇文章有解决方法 

ubuntu18.04 ROS melodic完整版教程及错误处理(附带 catkin_ws工作空间搭建)_黄宏智的博客-CSDN博客_ubuntu18.04安装catkin

 我是用上面的方法解决的rosdep update失败的问题,后来公司来了一个实习生,在遇到同样的问题时,他找到了下面这个解决方案,感觉要简单很多。

本文之后,世上再无rosdep更新失败问题!如果有....小鱼就...造福国内用户的rosdepc出来啦,再也不用担心rosdep初始化失败问题。\x0a大家好,我是小鱼,经过小鱼的不懈努力,rosdep国产替代品rosdepc终于完成,一行代码搞定初始化失败问题。https://mp.weixin.qq.com/s/VGs8oWdhHH6XsHcx21lN4Q

三、 orb-slam3环境搭建

ubuntu18.04配置ORB-SLAM3(包含ROS)完整版教程_黄宏智的博客-CSDN博客

 四、svo2.0

SVO2.0 安装编译_HR19的博客-程序员ITS203 - 程序员ITS203

在执行catkin build指令后,需要下载很多东西,好几个库会因为网速的问题,无法下载,可以尝试使用手机热点联网进行编译下载,再者出现“无法获取某个网址”错误时,那就重新编译,多执行几次编译命令,再次编译时不要删除掉上一次已经下载的build等文件夹中的东西。

除了网速问题,我还遇到了几个明显的问题,

(1)如果遇到“std::automic<int> a;不可以在定义式直接初始化”的错误时,

解决方案:那就在提示出错误的这个文件上添加头文件 #include<automic.h>

  (2) 如果遇到“next is not a member of boost : in /usr/include/yaml-cpp/node/detail/iterator.h”

在/usr/include/boost/next_prior.hpp中实现了boost::next的功能

解决方案:在iterator.h文件中添加 #include<boost/next_prior.hpp>

(3)如果遇到“/usr/local/include/sigslot/signal.hpp:1160:65 error: 'slots_reference ' was not declared in this space”

解决方案:将所有CMakeLists.txt中的所有的c++11替换为c++14

五、安装realsense t265相机驱动

按照官网“librealsense/installation.md at development · IntelRealSense/librealsense · GitHub”上说的步骤来安装,太过漫长,所以我就使用下面的方法来安装,还有安装ros Wrapper的步骤

(69条消息) ubuntu18.04 Intel Realsense T265与Realsense D435i 使用教程_xtdx_xty的博客-CSDN博客

六、使用realsense t265运行svo2.0

首先t265相机是omni-direction相机,对于这种相机使用的相机镜头比较特殊,构建镜头畸变模型时常用的模型有"Kannala Brandt", "MEI", "Scaramuzza",开源的框架中orb-slam3使用的是Kannala Brandt模型,vins使用的是MEI模型,svo2.0 使用的是scaramuzza模型,前两种模型都可以用kalibr进行标定,但是kalibr 不能标定scaramuzza模型,只能用ocam_clib库标定,所以你需要安装matlab,然后运行ocam_calib进行标定。标定出来还需要根据svo_ros/scripts/omni_matlab_to_rpy.py进行转换,得到一个24维的矩阵。

参考calib/blufox_25000826_fisheye.yaml文件,还需要一个mask,下面是参考vins的mask的生成方式,得到一个mask。

cv::Mat image = cv::Mat::zeros(800, 848, CV_8UC1);
cv::circle(image, cv::Point2f(424, 400), 424, cv::Scalar(255), -1, 8, 0);
cv::imwrite("mask.png", image);
cv::imshow("mask", image);
cv::waitKey(0);
return 0;

然后在launch/fronted/run_from_bag.launch文件中,将"cam0_topic” value修改为t265相机发布的话题,“camera/fisheye1/image_raw”, 然后是将pinhole.yaml改为fisheye.yaml.

然后首先将t265相机的话题发布出来

roslaunch realsense2_camera rs_t265.launch

然后运行svo2

roslaunch svo_ros realsense.launch cam_name:=realsense_t265_fisheye(这里的realsense.launch是从run_from_bag.launch文件修改过来的,我创建的t265相机的配置文件命名为 realsense_t265_fisheye.yaml)

上面的工作都做完后,我终于在周五下班前的一分钟,运行成功了,这周工作总算有个交代。但是这周一我跑了一下比较长的走廊,视觉里程计的跟踪效果不好,角度没有漂移,但是尺度在开始测试后不久漂移了很多,尺度一直在缩小,不知道是不是我的相机标定结果不精确有关系。

 总结:拿到最后的结果,上面五步是不可或缺的,也用了不少时间,最后是卡在了t265相机的畸变模型上面,其实在svo pro的GitHub上也是有介绍calibration这一块的,但是刚开始并没有放心上,不敏感,大概是刚开始对于上面提到的那三种相机模型不熟悉缘故,后来慢慢了解了这三种模型,自己的下一步工作才清晰。要不,刚开始,不知道自己到底该做些什么,怎么做。

上面测试结果,尺度漂移的厉害,肯定是有原因的,我先从我自己的工作上找问题,看看能不能解决这个问题。然后是把imu的数据也加上,再看一下效果。

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

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

相关文章

面试必问之JVM原理

1&#xff1a;什么是JVM JVM是Java Virtual Machine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令…

InfluxDB学习之InfluxDB的基本操作

InfluxDB提供类SQL语法&#xff0c;如果熟悉SQL的话会非常容易上手。本文就为大家介绍一下InfluxDB的基本操作。 InfluxDB提供类SQL语法&#xff0c;如果熟悉SQL的话会非常容易上手。 一、InfluxDB操作方式 InfluxDB提供三种操作方式&#xff1a; 1&#xff09;客户端命令行方式…

DOS Network一月项目月报

欢迎大家阅读DOS Network第一期项目月报&#xff01;DOS为了跟大家更好的沟通和交流&#xff0c;将在每个月为大家跟进DOS Network项目进展月报。月报主要分为项目研发和社区及营销两个部分。 如果你是刚认识DOS Network预言机网络的新朋友&#xff0c;欢迎查阅往期文章&#x…

lsof详解

from:https://www.cnblogs.com/the-study-of-linux/p/5501593.html lsof (list open files)是一个列出当前系统打开文件的工具。在linux系统环境下&#xff0c;任何事物都可以以文件形式存在&#xff0c;通过文件不仅可以访问常规的数据&#xff0c;还可以访问网络连接和硬件。…

ros rviz显示rosbag中的图像和imu数据

一、rosbag相关的指令 1. rostopic list //列举出系统中正在发布的ros 话题 2. rosbag record -a //录制系统中所有正在发布的ros 话题 3. rosbag record topic1 topic2 .... -o bagname.bag 4. rosbag play bagname.bag //播放bag文件 5. rosbag info bagname.bag //查看…

day1||python

测试题&#xff1a; 0. Python 是什么类型的语言&#xff1f; Python是一种面向对象、解释型、动态类型计算机程序设计语言解释型&#xff1a;程序无需编译成二进制代码&#xff0c;而是在执行时对语句一条一条编译动态类型&#xff1a;在程序执行过程中&#xff0c;可以改变变…

2.7万字还原行业面貌,《2019 AI金融风控行业研究报告》正式上线!...

在金融科技领域&#xff0c;风险控制的重要性&#xff0c;从其关联的金融业务和结合的技术维度可见一斑&#xff1a;风控涉及信用借贷、保险、支付、供应链金融等场景&#xff0c;并运用了包括生物特征识别、机器学习、自然语言处理、大数据、云计算等多项技术。 区别于美国有…

cs堡垒机使用说明

一、堡垒机介绍 为了保证机房的网络安全&#xff0c;IDC内所有服务器不被允许从办公网直接ssh登录&#xff0c;必须通过跳板机进行间接登录。用户通过跳板机执行的所有命令&#xff08;包括通过跳板机登录的其他机器后的命令&#xff09;都会被保存并审计。 cs是我们登录IDC服…

koa中间件机制详解

转自&#xff1a;https://cnodejs.org/topic/58fd8ec7523b9d0956dad945 koa是由express原班人马打造的一个更小、更富有表现力、更健壮的web框架。 在我眼中&#xff0c;koa的确是比express轻量的多&#xff0c;koa给我的感觉更像是一个中间件框架&#xff0c;koa只是一个基础的…

如何构建一个真实的推荐系统?

AI 前线导读&#xff1a;随着互联网行业的井喷式发展&#xff0c;数据规模呈现爆炸式增长。大数据中蕴含了巨大的价值&#xff0c;但同时也来了很 “信息过载” 的问题。推荐系统作为一个广泛应用的信息过滤系统&#xff0c;在很多领域取得了巨大的成功。在电子商务上&#xff…

volatile的适用场景

介绍 把代码块声明为 synchronized&#xff0c;有两个重要后果&#xff0c;通常是指该代码具有 原子性&#xff08;atomicity&#xff09;和 可见性&#xff08;visibility&#xff09;。 原子性意味着个时刻&#xff0c;只有一个线程能够执行一段代码&#xff0c;这段代码通过…

C#如何测试代码运行时间

第一种方式&#xff1a;System.Diagnostics.Stopwatch stopwatch new Stopwatch(); stopwatch.Start(); // 开始监视代码运行时间 // 需要测试的代码 .... stopwatch.Stop(); // 停止监视 TimeSpan timespan stopwatch.Elapsed; // 获取当前实例测量得出的总时间 double …

第二十二章:动画(六)

复合动画您可以混合等待和未等待的调用来创建复合动画。 例如&#xff0c;假设您希望按钮在大小扩展的同时旋转360度然后收缩。ViewExtensions类定义一个方法名称ScaleTo&#xff0c;它为Scale属性设置动画&#xff0c;就像RotateTo为Rotate属性设置动画一样。 Button大小的扩展…

ubantu之Git使用

本文讲述在Ubuntu 14.04 x64环境下&#xff0c;如何安装Git&#xff0c;配置连接GitHub&#xff0c;并且上传本地代码到github。 一. 注册Git账户以及创建仓库 要想使用github第一步当然是注册github账号了。之后就可以创建仓库了&#xff08;免费用户只能建公共仓库&#xff0…

C#如何打包EXE程序生成setup安装文件

C#如何打包EXE程序生成setup安装文件作为研发人员&#xff0c;在本机上开发的winform wpf或者控制台程序需要发给其他人测试时候&#xff0c;一般需要对其进行打包生成setup安装文件&#xff0c;今天第一次&#xff0c;搜了下资料&#xff0c;记录如下&#xff1a;注&#xff1…

最具戏剧性的分析诊断案例——十分钟锁定数据库性能“元凶”

昨天&#xff0c;正好有点空时间想看看书&#xff0c;结果&#xff0c;刚打开书&#xff0c;没看几个字儿&#xff0c;接到用户电话说&#xff1a;一个库有问题&#xff0c;希望能帮忙看下。因为我知道他们那边也有自己的专职DBA&#xff0c;于是问&#xff1a;没让人给看看吗&…

Python黑科技:在家远程遥控公司电脑,python+微信一键连接!

有时候需要远程家里的台式机使用&#xff0c;因为我平时都是用 MAC 多&#xff0c;但是远程唤醒只能针对局域网&#xff0c;比较麻烦&#xff0c;于是我想用微信实现远程唤醒机器。 *注意&#xff1a;全文代码可左右滑动查看 准备工作 本程序主要是实现远程管理 Windows10操作系…

c#通过app.manifest使程序以管理员身份运行

通常我们使用c#编写的程序不会弹出这个提示&#xff0c;也就无法以管理员身分运行。微软的操作系统使用微软的产品方法当然是有的&#xff0c;通过app.manifest配置可以使程序打开的时候&#xff0c;弹出UAC提示需要得到允许才可以继续&#xff0c;这样就获得了管理员的权限来执…

MOS管基本认识(快速入门)

1. 三个极的判定G极(gate)—栅极&#xff0c;不用说比较好认 S极(source)—源极&#xff0c;不论是P沟道还是N沟道&#xff0c;两根线相交的就是 D极(drain)—漏极&#xff0c;不论是P沟道还是N沟道&#xff0c;是单独引线的那边2. N沟道与P沟道判别箭头指向G极的是N沟道 箭头背…

基础构建模块

5 基础构建模块 Java平台类库包含了丰富的并发基础构建模块&#xff0c;例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(Synchronizer)。本章将介绍其中一些最有用的并发构建模块。 5.1同步容器类 同步容器类包括Vector和Hashtable&#xff0c;二者…