💥💥💞💞欢迎来到本博客❤️❤️💥💥
🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。
⛳️座右铭:行百里者,半于九十。
📋📋📋本文目录如下:🎁🎁🎁
目录
⛳️赠与读者
👨💻做科研,涉及到一个深在的思想系统,需要科研者逻辑缜密,踏实认真,但是不能只是努力,很多时候借力比努力更重要,然后还要有仰望星空的创新点和启发点。建议读者按目录次序逐一浏览,免得骤然跌入幽暗的迷宫找不到来时的路,它不足为你揭示全部问题的答案,但若能解答你胸中升起的一朵朵疑云,也未尝不会酿成晚霞斑斓的别一番景致,万一它给你带来了一场精神世界的苦雨,那就借机洗刷一下原来存放在那儿的“躺平”上的尘埃吧。
或许,雨过云收,神驰的天地更清朗.......🔎🔎🔎
💥1 概述
以下是关于使用激光雷达传感器和角点提取的EKF-SLAM(Simultaneous Localization and Mapping,即同时定位与地图构建)的研究:
一、引言
SLAM技术允许机器人在未知环境中构建地图并同时定位自身。本研究利用激光雷达传感器、角点提取技术和扩展卡尔曼滤波(EKF)实现2D SLAM导航。其中,激光雷达传感器用于环境感知,扩展卡尔曼滤波器用于状态估计和不确定性处理,分割和合并算法以及最小二乘法(LSM)用于角点提取和直线估计。
二、系统组成与工作原理
-
激光雷达传感器:通过发射和接收激光束来测量与障碍物之间的距离。获得的2D扫描数据反映了机器人周围环境的轮廓。
-
分割和合并算法:
- 分割算法:将激光雷达点云数据分成若干线段。基于距离的分割,如果相邻点之间的距离超过某个阈值,则认为是不同的线段;基于角度的分割,如果相邻点的角度变化超过阈值,则认为是不同的线段。
- 合并算法:将过度分割的线段重新合并。通过直线拟合,将相邻的线段进行直线拟合,如果误差在允许范围内,则合并这些线段;通过角度合并,如果相邻线段的角度变化很小,则合并这些线段。
-
角点提取:是SLAM的重要步骤。通过检测环境中的角点,机器人可以获得更多的特征信息以改进地图构建和定位精度。
-
最小二乘法(LSM):一种用于直线估计的标准方法。该方法通过最小化测量点到拟合直线的距离平方和来确定最佳直线参数。
-
扩展卡尔曼滤波(EKF):非线性系统状态估计的标准方法。其基本步骤包括预测步骤和更新步骤。在预测步骤中,根据运动模型预测机器人的下一个状态;在更新步骤中,利用观测模型更新预测状态,并计算卡尔曼增益以减少不确定性。
三、实验设置与结果
实验设置包括在真实环境中运行SLAM系统,验证其在不同复杂度环境中的性能。结果表明,采用激光雷达和角点提取的EKF-SLAM能够有效地构建高精度地图并实现准确定位。
-
环境描述:
- 简单环境:包含直线墙壁和少量障碍物。
- 复杂环境:包含多条不规则墙壁和多个障碍物。
-
性能指标:
- 地图构建精度:评估SLAM系统构建地图的准确性。
- 位置估计误差:评估SLAM系统定位机器人的准确性。
- 计算开销:评估SLAM系统的计算效率和资源消耗。
四、结论
本研究提出了一种基于激光雷达传感器和扩展卡尔曼滤波的2D SLAM导航方法。通过分割和合并算法进行角点提取,以及最小二乘法进行直线估计,提高了SLAM系统的精度和鲁棒性。实验结果验证了该方法在不同环境中的有效性和实用性。
📚2 运行结果
部分代码:
% Standard deviation error regarding observation
RTrue = diag([0.1, 0.5*pi/180]).^2;
REst = 2*RTrue;
% control input movement
deltaS =[0.28 0.30];
kr=0.0001;
% Gate value for measure acceptacnce
gateAccept =10;
F(nSteps) = struct('cdata',[],'colormap',[]);
% loop
for k =1:nSteps
% get true states
xVehicleTrue = xTrue;
xMapTrue =cornersLandFeatures;
% get estimated states
xVehicleEst = xEst(1:3); % get estimated state vehicle
xMapEst = xEst(4:end); % rest are the mapped corners estimated
% generate controls true value
u = getControl(xVehicleTrue,deltaS,0,0);
xVehicleTrue = moveRobot(xVehicleTrue,u);
% generate controls estimated value value
q = generateNoise(-0.005, 0.005, [3,1]); % noise
u = getControl(xVehicleEst,deltaS, 1, q);
xVehicleEst = moveRobot(xVehicleEst,u);
🎉3 参考文献
文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。(文章内容仅供参考,具体效果以运行结果为准)
[1]王亚伟.基于激光SLAM的AGV路径规划研究与实现[D].青岛理工大学,2021.
[2]阿拉法特·艾尼瓦尔.基于固态激光雷达SLAM的移动机器人定位技术研究[D].北方工业大学,2023.
[3]汤巍,王冠凌.基于激光雷达的智能小车SLAM研究[J].绥化学院学报, 2020, 40(5):5.
🌈4 Matlab代码实现
资料获取,更多粉丝福利,MATLAB|Simulink|Python资源获取