[SLAM]2D激光扫描匹配方法
1.个人资源索引2.SLAM学习笔记(1)基本概念3.SLAM学习笔记(2)SLAM算法4.[ROS]2 尝试编译OrbSLAM5.[ROS]1 小乌龟6.SLAM最近的工作7.SLAM学习笔记(3)相关概念8.[SLAM]2D激光线特征提取9.[SLAM] GMapping SLAM源码阅读(草稿)10.[QGLViewer]First Demo11.SLAM数据集
12.[SLAM]2D激光扫描匹配方法
13.[g2o]一个备忘14.[ROS] slam_gmapping15.[ROS]3 Linux编程练习16.Linux学习和ROS安装(1)17.小豆包的学习之旅:机器人定位18.小豆包的学习之旅:传感器观测模型19.Kinect2.0相机标定20.小豆包的学习之旅:里程计运动模型21.小豆包的学习之旅:入门篇22.Kinect2.0点云数据获取23.[硬件]Robot运动控制24.[硬件]Urg_viewer数据读取25.[硬件]三维点云数据获取26.Kinect2.0获取数据27.ndt histogram_direction28.rplidar & hector slam without odometry29.rplidar测试30.[原创]NDT方法在SLAM中的应用31.[SLAM]Karto SLAM算法学习(草稿)32.ROS学习备忘33.[ROS]激光驱动安装34.OrbSLAM2采集点云数据35.Cartographer源码阅读(8):imu_tracker36.[硬件]点云数据采集237.Cartographer源码阅读(9):图优化的前端——闭环检测38.Cartographer源码阅读(7):轨迹推算和位姿推算的原理39.Ethzasl MSF源码阅读(3):MSF_Core和PoseMeasurement40.Ethzasl MSF源码阅读(2):百川汇海41.Ethzasl MSF源码阅读(1):程序入口和主题订阅42.Cartographer源码阅读(6):LocalTrajectoryBuilder和PoseExtrapolator43.Cartographer源码阅读(5):PoseGraph位姿图44.Cartographer源码阅读(4):Node和MapBuilder对象245.Cartographer源码阅读(3):程序逻辑结构46.Cartographer源码阅读(2):Node和MapBuilder对象47.Cartographer源码阅读(1):程序入口48.实时Cartographer测试(1) - rplidar49.Cartographer安装50.ROS安装(2)51.[ROS]一些传感器数据读取融合问题的思考52.小豆包的学习之旅:占用概率栅格地图和cost-map53.小豆包的学习之旅:开发记录54.[概述]移动机器人自主探索55.MRPT编译1.Beam Model
Beam Model我将它叫做测量光束模型。个人理解,它是一种完全的物理模型,只针对激光发出的测量光束建模。将一次测量误差分解为四个误差。
,测量本身产生的误差,符合高斯分布。
,由于存在运动物体产生的误差。
...
2.Likehood field
似然场模型,和测量光束模型相比,考虑了地图的因素。不再是对激光的扫描线物理建模,而是考虑测量到的物体的因素。
似然比模型本身是一个传感器观测模型,之所以可以实现扫描匹配,是通过划分栅格,步进的方式求的最大的Score,将此作为最佳的位姿。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | for k=1: size (zt,1) if zt(k,2)>0 d = -grid_dim/2; else d = grid_dim/2; end phi = pi_to_pi(zt(k,2) + x(3)); if zt(k,1) ~= Z_max ppx = [x(1),x(1) + zt(k,1)* cos (phi) + d]; ppy = [x(2),x(2) + zt(k,1)* sin (phi) + d]; end_points = [end_points;ppx(2),ppy(2)]; wm = likelihood_field_range_finder_model(X( j ,:)',xsensor,... zt(k,:)',nearest_wall, grid_dim, std_hit,Z_weights,Z_max); W( j ) = W( j ) * wm; else dist = Z_max + std_hit* randn (1); ppx = [x(1),x(1) + dist* cos (phi) + d]; ppy = [x(2),x(2) + dist* sin (phi) + d]; missed_points = [missed_points;ppx(2),ppy(2)]; end set (handle_sensor_ray(k), 'XData' , ppx, 'YData' , ppy) end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | function q = likelihood_field_range_finder_model(X,x_sensor,zt,N,dim,std_hit,Zw,z_max) % retorna probabilidad de medida range finder :) % X col, zt col, xsen col [n,m] = size (N); % Robot global position and orientation theta = X(3); % Beam global angle theta_sen = zt(2); phi = pi_to_pi(theta + theta_sen); %Tranf matrix in case sensor has relative position respecto to robot's CG rotS = [ cos (theta),- sin (theta); sin (theta), cos (theta)]; % Prob. distros parameters sigmaR = std_hit; zhit = Zw(1); zrand = Zw(2); zmax = Zw(3); % Actual algo q = 1; if zt(1) ~= z_max % get global pos of end point of measument xz = X(1:2) + rotS*x_sensor + zt(1)*[ cos (phi); sin (phi)]; xi = floor (xz(1)/dim) + 1; yi = floor (xz(2)/dim) + 1; % if end point doesn't lay inside map: unknown if xi<1 || xi>n || yi<1 || yi>m q = 1.0/z_max; % all measurements equally likely, uniform in range [0-zmax] return end dist2 = N(xi,yi); gd = gauss_1D(0,sigmaR,dist2); q = zhit*gd + zrand/zmax; end end |
3.Correlation based sensor models相关分析模型
XX提出了一种用相关函数表达马尔科夫过程的扫描匹配方法。
互相关方法Cross-Correlation,另外相关分析在进行匹配时也可以应用,比如对角度直方图进行互相关分析,计算变换矩阵。
参考文献:A Map Based On Laser scans without geometric interpretation
circular Cross-Correlation的Matlab实现
1 % Computes the circular cross-correlation between two sequences 2 % 3 % a,b the two sequences 4 % normalize if true, normalize in [0,1] 5 % 6 function c = circularCrossCorrelation(a,b,normalize) 7 8 for k=1:length(a) 9 c(k)=a*b'; 10 b=[b(end),b(1:end-1)]; % circular shift 11 end 12 13 if normalize 14 minimum = min(c); 15 maximum = max(c); 16 c = (c - minimum) / (maximum-minimum); 17 end
4.MCL
蒙特卡洛方法
5.AngleHistogram
角度直方图
6.ICP/PLICP/MBICP/IDL
属于ICP系列,经典ICP方法,点到线距离ICP,
7.NDT
正态分布变换
8.pIC
结合概率的方法
9.线特征
目前应用线段进行匹配的试验始终不理想:因为线对应容易产生错误,而且累积误差似乎也很明显!
作者:太一吾鱼水
文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。
欢迎大家留言交流,转载请注明出处。
合集:
SLAM
分类:
Robot & SLAM
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程
2013-06-15 统计推断和统计决策