自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

脑子不够,博客来凑!!

  • 博客(95)
  • 资源 (2)
  • 收藏
  • 关注

原创 ORBSLAM3 的改进

周六看到了ORBSLAM3的源码,安装运行后看了一下其代码结构,因为加IMU的部分是针对之前的ORB-VI, 因此大家可以参考jinpang的LearnORBVI可以更纯粹地学习视觉+IMU的组合;这篇文章主要是针对其在Tracking线程做出的改动,尤其是添加Atlas后对Tracking部分的影响,LoopClosing和MapMerging的部分会在后面的分析中讲到,有错误也欢迎各位指正。ORBSLAM3相对于ORBSLAM2做出的主要改动:1. Atlas: 用于保存很多琐碎的地图;主要

2020-07-27 09:26:27 10211 6

原创 使用Kalibr进行IMU+相机的标定

利用kalibr标定IMU和相机:  https://github.com/ethz-asl/kalibr/wiki/Camera-IMU-calibration#2-collect-images在开始需要明确几点的是:需要先安装kalibr,该工具主要是标定相机和IMU, 在标定的过程中需要用到IMU和相机的内参文件,这里的内参文件可以用ROS 帮忙获得,或者如果已经有这个文件可以直接用。...

2019-10-29 19:29:13 4501 9

原创 结合CmakeList来更好地理解windows下的动态库和静态库

动态库和静态库的输出window下输出的静态库为.lib文件,用于包含所有的函数,以及函数的实现,以及其他的一些东西,所以文件较大;输出的动态库包含.lib文件和.dll文件,.lib文件主要包含接口函数,而.dll文件用于保存函数的实现;因此设置静态库保存路径时要设置ARCHIVE_OUTPUT_DIRECTORY;而设置动态库输出路径时要设置ARCHIVE_OUTPUT_DIRECT...

2019-02-18 14:05:37 3956

原创 Opencv单目标定flag的设定

1. flag中的标签顺序:在代码中的对应如下: enum{ CALIB_USE_INTRINSIC_GUESS = 1 << 0, CALIB_RECOMPUTE_EXTRINSIC = 1 << 1, CALIB_CHECK_COND = 1 << 2, CALIB_FIX_SKEW = 1 << 3, .

2021-05-11 20:49:13 2880 3

原创 OpenCV入门: Mat数据类型及其转换,访问

1. 总结先贴上我总结的Opencv的数据类型, 主要是针对不同Mat类型进行新建,修改和访问时使用, 更详细的数据访问见下文:2. CV_8UC3解说新建一个CV_8UC3型的cv::Mat, 其中U代表了unsigned char型的数据, 其表示的范围为0 到 255;C3表示三个通道, 也就是同一个位置能存放几个数字;最常见的使用位置是用于保存图像类型, C3用于存储RGB彩色图像, C1用于存储灰度图像, 为什么用uchar型数据来存储图像数据, 这里有详细的解释, 总结来讲,就是in

2021-04-21 19:46:46 5223 1

原创 Eigen问题解决:eigen_assert_exception’ is not a member of ‘Eigen’

很意外地遇到一个Eigen相关的错误:/usr/local/include/eigen3/Eigen/src/Core/products/Parallelizer.h:162:40: error: ‘eigen_assert_exception’ is not a member of ‘Eigen’ if (errorCount) EIGEN_THROW_X(Eigen::eigen_assert_exception());按照提示, 问题处在/usr/local/include/eigen3..

2021-04-17 14:43:08 4829 6

原创 boost::filesystem::directory_iterator() 出现段错误 Sementation fault

这是一个复盘帖,将遇到的boost的相关问题复盘一下, 先贴上我的代码部分:if (boost::filesystem::is_directory(mypath)){ boost::filesystem::directory_iterator end_iter; std::cout << "mypath is a directory! " << mypath.string() << std::endl; boost::filesystem:

2021-04-12 19:18:39 1623

原创 Kalibr源码学习(一): 重投影误差

Kalibr源码学习(一): 重投影误差给自己挖一个大坑, 从标定结果来学习Kalibr的标定源码, 这里基本以KB模型为例, 也就是标定时, kalibr的模型设定为 --model pinhole-equi , 这里以重投影误差开始,希望能坚持;重投影误差标定结果首先以重投影误差的txt文档的结果开始,可以看到上面的标定结果中, 重投影误差显示为 reprojection error: [-0.000002, -0.000000] +- [0.535272, 0.572115]这里的两项对应

2021-04-03 17:40:00 4302 5

原创 cv::KeyPoint中response的介绍

opencv : keypoint 类讲解:https://docs.opencv.org/master/d2/d29/classcv_1_1KeyPoint.html#a1f163ac418c281042e28895b20514360What does size and response exactly represent in a SURF keypoint?Ask Questionhttps://stackoverflow.com/questions/10328298/what-doe

2021-04-03 17:38:29 2596 1

原创 基础算法 -- 贪心算法

题目描述:给定一个数组,它的第i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4]输出: 7示例 2:输入: [1,2,3,4,5]输出: 4示例3: 输入: [7,6,4,3,1]输出: 0解释: 在这种情况下, 没有交易完成, 所以最大利润为 0。class Solutio..

2021-03-25 21:03:23 256

原创 std::thread的使用

几次变迁:原本:if (left_cam_.is_capturing()) { if (!take_and_send_image(left_cam_,left_info)) ROS_WARN("USB camera did not respond in time.");}if(right_cam_.is_capturing()){ if(!take_and_send_image(right_cam_, right_info)) ROS_WARN("USB c...

2021-03-25 20:43:09 1390

原创 Ros编译 找不到package

1. 在ORB中编译ROSCMake Error at /opt/ros/kinetic/share/ros/core/rosbuild/private.cmake:102 (message): [rosbuild] rospack found package "ORB_SLAM2" at "", but the current directory is "/home/shinan/P...

2021-03-18 20:25:59 1116

原创 利用PCL做点云的平面拟合

前提:需要验证一组点云的误差,基本上都是墙面上的点,直观地看点云的话可以看出一个平面,但远近不一致,因此想尝试一下做一下平面几何,计算一下内点数量,然后算一下精度;可以自己用RANSAC迭代,用三个非共线的点进行寻找内点数量最多的平面,也可以直接用PCL中的平面拟合函数直接进行计算;这里采用第二种;1. 在项目中包含PCL库find_package(PCL REQUIRED)include_directories(${PCL_INCLUDE_DIRS})target_link_librar

2021-03-18 20:11:51 6058 2

原创 正确使用StereoRectify

双目矫正的使用cv::fisheye::StereoRectify()函数, 主要用于对双目图像做出矫正,计算出用于立体矫正的参数;具体的使用方法如下:void cv::fisheye::stereoRectify (InputArray K1,InputArray D1, InputArray K2, InputArray D2, const Size &

2021-03-18 20:05:08 7947 8

原创 abstract class 抽象类的使用

1. 抽象类的定义编译错误编译报错:invalid new-expression of abstract class type ‘×××בhttps://www.jianshu.com/p/c25561cb2466home/shinan/Project/FisheyeSLAM-DR-SE-master/src/Tracking.cc: In member function ‘bool ORB_SLAM2::Tracking::ParseCamParamFile(cv::FileStorage

2021-02-23 21:21:11 782 2

原创 三角测量及在SLAM中的使用

这篇文章主要参考《SLAM十四讲》和《多视觉几何》两本书关于三角测量的原理和推导内容,以ORBSLAM2和ORBSLAM3为例,说一下三角测量的应用,有不对的地方,欢迎指正交流~~以单目初始化为例,得到两张图像的匹配点之后,第一步就是计算H矩阵或者F矩阵,并从这两个矩阵中恢复出这两帧之间相机的运动,也就是R,t有了相机的位姿,接下来就是恢复3D点,即通过两帧图像中对应的匹配点的像素坐标x1,x1'和相机的位姿R,t,计算得到其对应的在三维世界中的坐标X;这里要和PnP做一下区分,PnP也是两帧.

2021-02-20 15:00:48 3236

原创 在CMakeLists.txt文件中包含Eigen

挺简单的一个问题,弄了好半天,主要是关于CMAKELISTS的一些语法和Eigen的库记不清楚了;这里整理一下做一个记录;首先说Eigen只有头文件(headers only),只需要设定一个包含路径即可;有如下的方法:1. find_package()find_package(Eigen3 REQUIRED)使用这种方法会自动在系统的cmake路径,以及前面文件设置的cmake的包含路径中查找Eigen;LIST(APPEND CMAKE_MODULE_PATH ${PROJECT

2021-02-01 21:03:16 7850 1

原创 使用kalibr标定时的注意事项

使用Kalibr标定的使用方法可以参考: 这里因为使用过程中出现很多问题,这里大概总结如下,有更多注意事项或者错误的地方欢迎大家补充或指正:1. 模型的选择这里主要是总结在各种issue中大家提出的使用kalibr中模型选择的问题,以及各种模型之间利弊;pinhole-radtan: 最常见的针孔模型+布朗畸变模型, 适用于大多数的角度小于120的相机, 其中畸变参数包含了径向畸变k1,k2和切向畸变p1,p2; 如果相机的畸变情况不是很严重,这个模型基本都可以; 比如我的DOV为150的

2021-01-20 09:14:22 3674 2

原创 信息矩阵

1. 协方差矩阵Cartographer 中的协方差矩阵和信息矩阵1:运动方程有协方差矩阵R,观测方程有协方差矩阵Q。它们表示的意义是,到当前时刻t为止,所有测量的样本的协方差矩阵,用来衡量本次测量的不确定性。2:信息矩阵是协方差矩阵的逆,用来表示本次测量的可靠性,即不确定越小,则可靠性就越大。3:因此,公式推导里出现的相邻两个状态之间的协方差矩阵,实际上是到当前状态为止,之前所有样本的协方差矩阵。也就是说协方差矩阵随着样本的增加在不断的更新。2. 信息矩阵和协方差矩阵首先,.

2021-01-15 18:01:03 4573

原创 mipi接口的摄像头驱动并发布话题

情况: 需要跑ORBSLAM, 之前一直使用USB接口的相机, 打开摄像头一般使用的是ROS下的usb-cam-node进行驱动,采集图像并发布成topic的形式,或者使用opencv的videoCapture进行图像的捕捉;因为某些原因需要将usb接口的camera转换成mipi接口的相机; 还是使用了原先usb_cam_node进行摄像头的驱动,输入/dev/video, 对应的width和height之后,结果出现了如下的提示:最主要的就是[ERROR], 提示如下:[ERROR]

2020-12-30 09:05:17 2919 3

转载 【学习笔记】卡尔曼滤波中的协方差矩阵

本文转载至:添加一些自己的理解和标注的重点,算是学习笔记吧;一. 卡尔曼滤波的理论框架:kalman滤波的理论框架是全概率法则和贝叶斯法则,在设定中假设预测和感知均有误差,且均服从正态分布,且预测过程和感知过程采用不同的概率更新策略,具体采取的策略如下所示:预测过程符合全概率法则,是卷积过程,即采用概率分布相加; 感知过程符合贝叶斯法则,是乘积过程,即采用概率分布相乘;以一维运动为例,假如有一个小车,开始位于x=的位置,但是由于误差的存在,其真实分布是高斯分布,其方差是,即其...

2020-12-26 17:09:27 15079 12

原创 【小白冲冲冲!!!】补2:SLAM中最小二乘问题的引入及求解

这一部分是我自己加的, 对于理解非线性优化以及那些常用的优化算法有很大的帮助,所以有时间也可以看看,互相交流;我们都已经知道SLAM中的问题求解其实就是要求出一个位姿,使得噪声项的平方,即误差最小化。 因此, 对于所有的运动和任意的观测, 都可以定义数据与估计值之间的误差:运动方程的误差: 观测方程的误差: 对...

2020-12-12 15:43:24 293

原创 【小白冲冲冲!!!】补1: 说一下最大化后验概率

在解释Dog-Leg算法之前, 需要了解与SLAM相关的几个重要的概念, 先验(prior), 后验(posterior),似然(Likehood);这三个概念所对应的公式分别如下, 一直x是结果(如买东西),是原因(双十一来了,或者钱有点多), 即导致x发生的原因, 则先验: 就是原因发生的概率似然: 也就是在某个原因发生时,导致特定结果的概率, 如对于我来讲,双十一发生的情况下,...

2020-12-12 15:24:47 770 1

原创 【小白冲冲冲!!!】37. ORBSLAM初始化时为什么要同时初始化H矩阵和F矩阵?

主要是针对初始化时不同的图像中不同的状态, H矩阵适用与特征点都处于同一个平面或者发生纯旋转时的状况, 这种状态时F举矩阵退化, 因此需要使用H矩阵; 而F矩阵适用于特征点在不同深度的情况;接下来总结一下关于F矩阵,H矩阵和E矩阵的一些相关的知识点:首先来说E矩阵,也就是本质矩阵, 本质矩阵有几个很重要的特性:本质矩阵在不同尺度下都是等价的; 对E乘以任意的非常数之后, 对极约束依然满足; 本质矩阵的奇异值必定是[a, a, 0]的形式, 这称为本质矩阵的内在性质; 因为旋转和平移各有三个自由

2020-12-12 15:22:37 559

原创 使用memcpy()时报错

找了两个小时的问题,记录一下, 在ROS下usb_cam节点下添加了新的去畸变函数,并将其发布成topic,但是在实际运行的时候,有时候会出现段错误,debug模式提示如下:__memcpy_avx_unaligned () at ../sysdeps/x86_64/multiarch/memcpy-avx-unaligned.S:238可以定位到我代码中的memcpy()函数, 其实是ROS下的sensor_msgs::fillmage()的memcpy(&image.data[0

2020-12-11 19:11:43 6827

原创 Opencv中普通相机模型与鱼眼相机模型的区别

鱼眼相机模型普通相机模型无畸变时相机模型的状态:有畸变时的状态:The distortion parameters are the radial coefficientsk1,k2,k3,k4,k5, andk6,p1andp2are the tangential distortion coefficients, ands1,s2,s3, ands4, are the thin prism distortion coefficients. High...

2020-11-23 20:06:07 2925 1

原创 [冲啊!!!!!]小白SLAM相关基础知识

SLAM基础问题(黑色是我的答案,红色是未正确回答的部分)1. Mat是如何访问元素的? 先访问行还是先访问列?多通道的Mat类矩阵是一个类似于三维的数据,而计算机的存储空间是一个二维空间,因此Mat类矩阵在计算机存储时是将三维数据变成二维数据,先存储第一个元素每个通道的数据,之后再存储第二个元素每个通道的数据。每一行的元素都按照这种方式进行存储,因此如果我们找到了每个元素的起始位置,便可以找到这个元素中每个通道的数据。图2-5展示了一个三通道的矩阵的存储方式,其中连续的蓝色、绿色和红色的方块分别代

2020-11-03 20:59:34 776 1

原创 package ‘catkin‘ depends on non-existent package ‘python3-catkin-pkg‘

这个问题的出现有点莫名其妙,不知道是在怎样的情况下触发的. 总之,现象就是: 之前可以很好地编译的ROS下的ORBSLAM的文件都无法再编译了, 每次提示如下:[rosbuild] Building package ORB_SLAM2Failed to invoke /opt/ros/kinetic/bin/rospack deps-manifests ORB_SLAM2[rospack] Error: package 'catkin' depends on non-existent packag

2020-11-02 12:04:45 2418

原创 将Rosbag中的Compressed类型的图像转换成raw类型

经常存在这种情况, 我们需要在移动设备上录制一些包含图像信息的rosbag, 但是如果录制raw格式的话,占的内存空间太大, 一般可以采用录制compressed模式; 但是一般的代码中,图像从sensor_msgs转换到cv::Mat都是通过原图像,即raw类型的topic, 这时可以我们自己手动添加函数, 即可以订阅compressed topic的类型; 或者如果该代码实在麻烦,也可以之间将录制好的comppressed包转换成raw格式;haha@haha:/opt/ros/kinetic/l

2020-10-29 14:32:07 4101 2

原创 ORBSLAM3的IMU积分求解过程

目前是自己的手稿版的ORBSLAM3的最大后验概率推导, 主要是参考论文:<Inertial-Only Optimization for Visual-Inertial Initialization>后面找到大块的时间编辑一下, 大家可以先收藏,然后互相交流~~

2020-10-20 21:06:49 4001 15

原创 VINS_MONO+D435i Realtime运行

艰难地运行了三天,终于算是搞定了,主要的时间和精力都花在标定上了, 总结一些需要注意的点,希望能对同样使用VINS-MONO的人有帮助.先说一下我的初衷,其实是想要使用ORBSLAM3的Mono_Inertial的,但是总是会初始化失败,图像可以初始化成功,但是在添加IMU数据后整个track就会LOST, 觉得可能是IMU和相机的标定问题,所以想要试一下VINS-MONO的标定效果;IMU+Camera 标定我采用的是彩色相机+IMU的形式,所以只需要标定单目,单目标定和相机加IMU标定使用的

2020-10-16 21:09:26 1474 10

原创 数学翻译这件事

有时候觉得数学专业领域的翻译是一个很考验人的事情,不仅考验的是专业能力,也考验的是翻译人员对于小白的共情能力;最近在看<线性代数应该这样学>这本数, 看到矩阵的时候发现一个很有趣的概念: "线性映射的矩阵", 只看这几个汉字的时候一头雾水,可是看到后面的英文"matrix of linear map", 顿时恍然大悟, 哦~~, 这不就是线性映射的矩阵嘛!!领悟之前和领悟之后是同一句话,但是在脑子里的感觉却不一样了.从英文翻译成中文的过程中,对文科生来讲, 丢失的可能是美感,而对理.

2020-10-16 15:16:18 203

原创 Realsense无法启动彩色摄像头

使用realsense的过程中,遇到了一些问题,设定了rs_camera.launch文件后提醒:[ WARN] [1602639880.042525199]: Given stream configuration is not supported by the device! Stream: Color, Stream Index: 0, Width: 640, Height: 480, FPS: 20因为给定了两条WARN信息,所以有些confused, 因此饶了很大一圈;首先.

2020-10-14 13:56:59 2299 2

原创 用CubeSLAM跑自己的数据集

针对CubeSLAM本博客内容如下,主要是阅读论文和代码的一些结果总结,还有一部分总结未完成,同样使用或者对语义slam感兴趣有经验的欢迎交流,该博客后面也会不段更新cubeslam在自己的数据集上的使用结果和一些避坑指南:1. cubeSLAM主要贡献2. 2D->3D的cube转换3. 使用自己的数据集1. 主要贡献:这篇文章在语义SLAM中好评较多,主要是与常见的ORBSLAM实现来物体级别的结合;主要分为两部分,第一部分为2d部分,主要是可以通过平面的bbox生成出立体的c...

2020-10-07 16:13:09 2862 10

原创 【DEBUG】undefined reference to `cv_bridge::toCvShare

使用情况:在一个已经存在的ROS项目中添加Rosbag的图像读取:操作:按照之前的使用方法,分别在package.xml中以及CMakeList.txt的catkin_package() 中添加了对应的包,但是编译时还是出现了未定义的引用;解决:这里主要说一下解决的方法:首先对于cv_bridge中函数的具体使用方法,大家可以参考博客:CV_Bridge的使用,这里对使用该博客后出现的问题做一个补充;首先在使用Ros时,如果需要用到新的package,则需要在两个地方添加,1.在该工程对

2020-09-27 14:34:56 2402

原创 ROS Image_transport使用

本来想要用image_transport来将compressed图像republish成raw的,结果使用过程中遇到找不到image_transport.这一点很矛盾,因为一直都在用这个,一下是遇到的问题集锦;1. 首先是找不到list_transport:s———n@shinan:/opt/ros/kinetic/lib/image_transport$ rosrun image_transport list_transports[rosrun] Couldn't find executab.

2020-08-13 20:51:23 4965 3

原创 ROS 图像相关的命令与应用

本文翻译自 xx大学的机器人课程,以及个人使用的Ros进行图像处理时的一些问题总结:1. ROS 中表示图像1.1 查看图像ROS中最基本的图像表示方式为sensor_mags/Image类型,可以使用RVIZ对该topic所对应的图像画面进行查看,RVIZ中的Camera display功能;或者更简便的,可以使用模块image_view:具体命令为:rosrun image_view image_view image:=topic_name例如, 如果想要查看 Turtlebo...

2020-08-11 20:32:31 2981 2

原创 【回环检测】如何理解loopClosing中的连续性检测

在连续性检测中会用到几个变量如下,可以先理解一下这几个变量之间的关系如图:总结:回环部分对候选帧的检测其实可以理解为静态检测和动态检测;静态检测也就是对于图片相似度的检测,通过候选帧及其共视帧的commonwords 和score进行选择,保存下来的帧都具有静态一致性;空间上的连续性检测主要是动态检测,用于筛选那些落单的相似帧,通俗来讲就是这一候选、帧与当前帧相似,但是走两步之后就不一定相似了(传说中的没病走两步),怎么实现走两步的效果检测呢?那就是看簇与簇之间有没有共同帧了;PS:簇 = 候.

2020-07-28 09:50:39 798

原创 详细解读ORBSLAM中的描述子提取过程

一直都在基于ORBSLAM做一些相关的开发,只知道进来的图片会直接提取出BRIEF描述子,但是都没有详细地看过它具体的提取过程,今天仔细研究了一下代码和相关理论,弄清楚之后感觉神清气爽,部分内容查找有些费劲,所以特此整理出来,希望对需要的人有所帮助。1. 前言ORBSLAM中使用的ORB特征是FAST特征和BRIEF描述子的集合,详细的FAST特征的提取过程这里大概说一下,方便后面对描述子的理解;FAST特征的提取过程:1. 构建高斯金字塔:ComputePyramid()​ 第一层.

2020-07-21 21:09:04 3026

原创 cartographer编译过程遇到未定义的dlclose@@GLIBC_2.2.5

1. 使用的安装过程如下:先装下这下面几个依赖sudo apt-get updatesudo apt-get install -y python-wstool python-rosdep ninja-build1. cartographer,cartographer_ros,ceres-solver放在工作空间的src目录下2. protobuf放在工作空间下3. 编译指令:catkin_make_isolated --install --use-ninja一些相关的以来安装完成后

2020-07-07 16:19:48 2408 6

tesseract使用结果分析

tesseract使用结果分析

2017-04-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除