slam

SLAM:Google cartographer算法 机器人建图、保存地图

匿名 (未验证) 提交于 2019-12-03 00:30:01
这两天跑了以下google的cartographer算法,效果不错,比gmapping效果要好。 cartographer的安装网上很多教程,主要按照张明明的方法, https://github.com/hitcm/ ,安装好后,下个数据集,运行roslaunch cartographer_ros demo_backpack_2d.launch bag_filename:=yourpath/cartographer_paper_deutsches_museum.bag,就可以看到网上流行的那张图, 仿真数据跑成功后,就要用自己的机器人跑算法了。就我的实际经验,跑仿真数据很容易,照着教程,一步步来,基本都能看到建图效果 //////////******************************************************************************************************************************************///////////// 我使用的是adept机器人,其实不同的机器人差别不大,主要是看用了哪些传感器数据。我用的这款adept有激光和里程计。 和网上其他教程基本一样,主要修改demo_revo_lds.launch和revo_lds.lua 其中,demo_revo

视觉SLAM之相机选型

匿名 (未验证) 提交于 2019-12-03 00:22:01
相机选型时出现的参数的含义 1) 像元尺寸( Pixel size ) 像元尺寸指芯片像元阵列上每个像元的实际物理尺寸,通常的尺寸包括14um,10um, 9um , 7um , 6.45um ,3.75um 等。像元尺寸从某种程度上反映了芯片的对光的响应能力, 像元尺寸越大,能够接收到的光子数量越多 ,在同样的光照条件和曝光时间内产生的电荷数量越多。对于弱光成像而言,像元尺寸是 芯片灵敏度的一种表征 。 2) 图像传感器格式( Optical format ) 参考: https://zh.wikipedia.org/wiki/%E6%A8%99%E6%BA%96%E9%8F%A1%E9%A0%AD 图像传感器对角线长度为摄像管直径(即,传感器类型,如 1/3" )的 2/3 3) 活动成像区域的大小( active imager size ) 为了计算摄像机的视角,应该使用 传感器的活动区域的大小 。传感器的活动区域意味着传感器的区域,在该区域上,在给定的摄像机模式下形成图像。活动区域可以小于图像传感器,并且活动区域可以在同一相机的不同操作模式下有所不同。 有效面积大小取决于传感器的纵横比和摄像机输出图像的纵横比 。活动区域大小可以取决于相机给定模式下的像素数目。有效面积大小和透镜焦距决定了视角。 M12镜头参数计算 参考: https://blog.csdn.net

SLAM领域牛人列表

匿名 (未验证) 提交于 2019-12-03 00:22:01
SLAM领域牛人列表 Andrew Davison 。 点击打开链接 个人主页:http://www.doc.ic.ac.uk/~ajd/index.html. Imperial College London 机器人视觉宗师,现任英国帝国理工学院教授,机器视觉组及Dyson机器人实验室主任,英国牛津大学博士,单目摄像头SLAM奠基人(MonoSLAM),近年来在视觉slam领域做了大量研究,著名工作包括MonoSLAM, SLAM++, DTAM等。Google Scholar论文引用数:12232(截止2016年4月28日). David Murray . 点击打开链接 http://www.robots.ox.ac.uk/~dwm/. Oxford University 机器人视觉宗师,现任英国牛津大学教授,Active Vision Laboratory主任,PTAM作者,Philip Torr, Andrew Davison,Ian Reid的Phd导师。 lan Reid. 点击打开链接 https://cs.adelaide.edu.au/~ianr/ .University of Adelaide 机器人视觉著名科学家,现任澳大利亚阿德莱德大学教授,英国牛津大学博士,西澳大利亚大学学士。MonoSLAM第二作者。Google Scholar论文引用数:11720

SLAM -- 获取相机内参矩阵

匿名 (未验证) 提交于 2019-12-03 00:21:02
SLAM 不同的深度摄像头具有不同的特征参数(标定相机),在计算机视觉里面,将这组参数成为相机的内参矩阵 C C 。格式为: C = f x 0 0 0 f y 0 c x c y 1 C = [ f x 0 c x 0 f y c y 0 0 1 ] f x f x , f y f y 指相机在x轴和y轴上的焦距, c x c x , c y c y 是相机的光圈中心,这组参数是摄像头生产制作之后就固定的。 在计算机中,我们需要把相机转换为一种数学模型,这样我们把图片信息交给计算机才会被正确的识别出来。在SLAM中,相机被简化成针孔相机模型,如下图所示: 空间中一个点 ( x , y , z ) ( x , y , z ) 在和它在图像中的坐标 ( u , v , d ) ( u , v , d ) 的对应关系如下: u = x f x z + c x u = x f x z + c x v = y f y z + c y v = y f y z + c y d = z s d = z s 其中, f x f x , f y f y 指相机在 x x 轴和 y y 轴上的焦距, c x c x , c y c y 是相机的光圈中心, s s 是缩放因数。 z = d s z = d s x = ( u c x ) z f x x = ( u c x ) z f x y = ( v

激光SLAM算法学习(二)――2D激光SLAM

匿名 (未验证) 提交于 2019-12-02 23:35:02
2D激光SLAM 1、2D激光SLAM的介绍 2D激光SLAM的输入 IMU数据 2D激光雷达数据 里程计数据 2D激光SLAM的输出 覆盖栅格地图 机器人的轨迹 or PoseGraph 2D激光SLAM的帧间匹配方法 PI-ICP 梯度优化方法<――hector_slam CSM(Correlation Scan Match) State of Art: CSM+梯度优化 2D激光SLAM的回环检测方法 Scan-to-Map Map-to-Map Branch and Bound & Lazy Decision 2、2D激光SLAM的发展――时间 Filter-based EKF-SLAM----90年代 Gmapping----07 FastSLAM----02~03 Optimal RBPF----10 Graph-based Globally Consistent Range Scan For Environment Mapping----97 Karto SLAM----10 Incremental Mapping of Large Cyclic Environments----99 Cartographer----16 3、2D激光SLAM的应用 数据的预处理―非常重要!!! 轮式里程计的标定 不同系统之间的时间同步 激光雷达运动畸变去除 实际环境中的问题 动态物体

视觉SLAM十四讲-第五讲笔记

做~自己de王妃 提交于 2019-12-02 06:04:13
视觉SLAM14讲-第五讲笔记 针孔相机模型 不同坐标系 世界坐标系 相机坐标系 以 光心 为原点,相机自身的坐标系。 世界坐标系经相机位姿变化(T作用)变换到相机坐标系。 归一化平面 位于相机前方Z=1处的平面上。 是相机坐标系上点P,最后一维归一化的结果。 物理成像平面 相机坐标系中点经小孔投影到的平面。 焦距:物理成像平面到小孔的距离。 像素平面 物理成像平面上固定着的平面。 对物理成像平面上点的坐标进行采样和良好,得到像素。 像素坐标系:与物理成像平面间相差一个x,y方向缩放(α,β),一个原点平移(cx,cy)。 相机参数 内参数 内参数矩阵:K,表示从相机坐标系到像素坐标系的转换。 对于像素坐标 P u P_u P u ​ ,写成其次坐标形式,会引入一个缩放系数z。 从相机坐标系 P P P 到像素平面 P u P_u P u ​ 可表示为: Z P u = K P Z{P_u}=KP Z P u ​ = K P K对于相机固定,不随使用改变。可通过标定方法确定。 外参数 外参数矩阵:T,表示从世界坐标系到相机坐标系的转换。 外参数所描述的变换,即其位姿:旋转R和平移t。是SLAM任务中待估计的目标。 P = R P w + t = T P w P=R{P_w}+t=T{P_w} P = R P w ​ + t = T P w ​ 此时是三维齐次坐标(4x1)的表示

SLAM十四讲 ch7 demo 复写

无人久伴 提交于 2019-12-02 06:04:01
识别特征点并实现匹配 博主刚刚入门SLAM,之后可能会更多分享SLAM相关的学习总结。 刚刚学习1个多星期的SLAM,感觉自己的知识基础、论文阅读能力严重不足。幸好有高翔的《视觉SLAM十四讲》,由此书入门,觉得更容易了一些。之后应该会把全书通读一遍,而后找时间进行笔记整理和分享,也便于自己以后的复习。 我是看过1,2讲后直接入手第7讲,由于有需求的督促想尽快达到应用级别的了解,后续再补上数学基础。 纸上得来终觉浅,深知此事要躬行。读懂ch7的代码后,博主重写了一遍以加深印象,也加了一些备注以共查看。 #include <iostream> #include <opencv2/core/core.hpp> #include <opencv2/features2d/features2d.hpp> #include <opencv2/highgui/highgui.hpp> using namespace std; using namespace cv; int main ( int argc, char** argv ) { if ( argc != 3 ) { cout<<"usage: feature_extraction img1 img2"<<endl; return 1; } //1.Input two pictures Mat img_1 = imread( argv[1

视觉SLAM十四讲 从理论到实践-第九讲实践:设计前端,关于Sophus库中SO3类构造函数使用疑惑

放肆的年华 提交于 2019-12-02 05:57:15
在练习视觉SLAM十四讲 从理论到实践-第九讲实践:设计前端实验时,碰到了关于一处使用Sophus库中SO3类构造函数的疑惑。 Sophus库中: SO3::SO3(double rot_x, double rot_y, double rot_z) { unit_quaternion_ = (SO3::exp(Vector3d(rot_x, 0.f, 0.f)) *SO3::exp(Vector3d(0.f, rot_y, 0.f)) *SO3::exp(Vector3d(0.f, 0.f, rot_z))).unit_quaternion_; } 从该构造函数的实现来看, 该函数的参数为欧拉角,书上代码实现时,SO3的构造函数调用却用了从 cv::solvePnPRansac(pts3d, pts2d, K, Mat(), rvec, tvec, false, 100, 4.0, 0.99, inliers); 获得的旋转向量中的每个对应元素,即 T_c_r_estimated_ = SE3( SO3(rvec.at<double>(0,0), rvec.at<double>(1,0), rvec.at<double>(2,0)), Vector3d( tvec.at<double>(0,0), tvec.at<double>(1,0), tvec.at<double>(2,0)