|
|
|
|
|
|
拼接点云思路
摘要:1.定义图片变量和相机位姿。用vector<cv::Mat>和vector<Eigen::Isometry3d>就可以了。2.读取(1)先设地址,位姿地址就一个。用ifstream fin("./pose.txt")直接读取就可以了。而图片地址有多个。就需要在for循环里,先boost::forma
阅读全文
ICP 求解相机思路
摘要:1.之前仍然是需要创建find_feature_matches,和pixel2cam,一个是用来匹配描述子的,一个是把像素坐标转成归一化平面坐标的。里面的变量都要带上&。2.因为是3d-3d.所以这里读取了两个深度图。depth1,depth2.跟之前一样。不同的是第二张图片的像素坐标也要转成空间点
阅读全文
光流法跟踪fast角点思路
摘要:光流法需要include<opencv2/video/tracking.hpp>,用到列表,所以要include<list><vector>1.读取文件定义图像存储路径用stringstring path_dataset=argv[1];associate文件地址string associate_f
阅读全文
稀疏直接法求解相机位姿的思路
摘要:主要用的g2o的方法。自己定义了一个新的一元边。边的误差项是测量值和由估计得来的x,y对应的灰度值之间的误差。导数为灰度对像素坐标的导数乘以像素坐标对yi*李代数的导数的负数。灰度对于像素坐标的导数矩阵为1*2的矩阵。比如像素坐标为u,v.第一个数就是灰度关于u的导数,为u+1,v对应的灰度值和u-
阅读全文
半稠密直接法求解相机位姿思路
摘要:半稠密直接法和稀疏直接法求解过程基本上是一样的,只是稀疏直接法提取的是fast关键点,一般是几千个,而半稠密直接法提取的是梯度明显的像素,一般是几万个,这里是提取了一万多个。所谓的梯度明显的像素,就是像素的灰度值同它周围的像素有明显的区别,这里是拿(v)[u+1]和(v)[u-1],还有(v+1)[
阅读全文
运行vo总结
摘要:这是基于之前的vo类做的。vo类总结.note参数文件的直接设置在config目录下,比如是default.yaml文件,里面会定义dataset_dir,cmera类的fx,fy,cx,cy,VisualOdometry的min_inliers,match_ratio,key_frame_min_
阅读全文
vo类总结
摘要:1.Camera类 camera类里面,首先camera有5个变量,fx_,fy_,cx_,cy_,depth_scale_5个变量,由外部传fx,fy,cx,cy,depth_scale给它。定义了一个智能指针,现在还不知道这个智能指针有什么用typedef std::shared_ptr<Cam
阅读全文
改进地图的vo类
摘要:现在的地图只是各帧特征点的集合。创建地图:局部,全局。局部:只相机位置附近的特征点,用来和当前帧匹配求解相机位置的。全局:不定位,回环检测和地图表达。重点或麻烦:维护局部地图的规模。为了实时,保证地图规模不能太大。1.修改地图点类MapPoint增加变量和函数形式。1.1类 变量倒也简单。两个id,
阅读全文
slam kf
摘要:一、KF 1.从概率来理解概率估计因为希望整个运动估计较长时间内最优,所以反而会用最新的知识去更新之前的状态,就比如在做完当前帧的位姿估计的时候,修改局部地图的路标点。如果站在之前的状态上来考虑,用的是未来的信息。所以不仅用过去的信息估计现在的状态,也用未来的信息更新自己。因为自己站在一个中间的时间
阅读全文
vo优化总结
摘要:问题1:位姿估计用的ransac,只用了几个点,如果3d_2d点存在噪声,不行。优化:把这值当做初值,用非线性优化问题2:深度图有误差,深度过近或过远不行,有误差。而特征点往往在物体边缘处,深度测量值通常不准。所以直接把特征点的3D位置当做真值来做不行。必须对特征点进行优化。问题3:两两帧不行,参考
阅读全文
轴角和四元数和空间点
摘要:1.公式轴角转四元数。q=[cos(theta/2),nx*sin(theta/2),ny*sin(theta/2),nz*sin(theta/2)]四元数转轴角theta=2arccosq0,[nx,ny,nz].T=[q1,q2,q3].t/sin(theta/2)经轴角旋转后的空间点这时旋转矩
阅读全文
BA优化PnP的思路
摘要:由之前的PnP,可以求出一个R,t,K又是已知的。而且空间点的世界坐标知道,第二个相机位姿的像素坐标也是知道的。就可以利用它们进行优化。首先确定变量为const vector<Point3f> points_3d,const vector<Point2f>,const Mat& K,Mat& R,M
阅读全文
BA模型 第10章
摘要:1.BA模型BA模型就是世界坐标到像素坐标的转换过程。这里多了一个去畸变。因为归一化平面坐标在转成像素坐标的过程中会出现畸变。这里只处理了径向畸变,径向畸变包括桶形失真和枕形失真,都是由于图像放大率随着与光轴之间的距离改变而增大或减小造成的。切向畸变是由于透镜与成像平面没有严格平行造成的。处理径向畸
阅读全文
g2o的一般过程
摘要:1.自己定义顶点类、边类或者用已经有的。1.1定义顶点例子class CurveFittingVertex: public g2o::BaseVertex<3, Eigen::Vector3d>{public: EIGEN_MAKE_ALIGNED_OPERATOR_NEW virtual void
阅读全文
g2o求解BA 第10章
摘要:1、g2o_bal_class.h1.1 projection.hg2o还是用图模型和边,顶点就是相机和路标,边就是观测,就是像素坐标。只不过这里的相机是由旋转(3个参数,轴角形式,就是theta*nx,theta*ny,theta*ny),位移(3个参数),f,k1,k2.就是之前BA模型的实现。
阅读全文
ceres求解BA第10章
摘要:1.前言g2o是根据边来保存每一个代价函数,它是在边类中构造误差函数,构造边的时候,会设置顶点、测量值、协方差矩阵等。而在ceres中,用problem类型来构造最终的目标函数。先是使用AddResidualBlock来添加代价函数,代价函数和核函数等构造成目标函数。在ceres中,代价函数就是误差
阅读全文
后端 位姿图 第11章
摘要:1.前言以BA为主的图优化,很多路标点,大量特征点,因为有这大量的特征点,所以实时不好,要在更大的场景上用,必须进行优化。这里后端有两种方法,一种位姿图,一种因子图。2.位姿图BA带有很多的相机位姿和空间点,时间一长,BA计算效率会下降。但是实际情况中,经过若干次观测之后,收敛的特征点和空间位置肯定
阅读全文
回环检测
摘要:1.回环检测的必要性因为累积误差,最后会使地图出现漂移。比如之前位姿图优化,只给后端提供相邻帧之间的约束,x1-x2,x2-x3,x1的误差就会传到x3.而回环检测能够给出时隔更久远的约束,比如x1-x100,它做的事就是检测相机经过了同一个地方,把带有累积误差的边拉回到了正确的位置。回环检测提供了
阅读全文
第13章建图
摘要:13.1概述之前所有的讲的,包括前端,后端,位姿图估计,路标点的地图,回环检测,都是定位问题,而不是建图。都是定位了相机的位姿。而没有建图。要建图,首先来看对建图的需求。slam是一种底层技术,要看上层应用需要slam做什么事情。如果上层是一个机器人,应用层的开发者希望用slam来做全局定位,并让机
阅读全文
|
|