VSLAM(VINS)+EKF+MPC=停车场无限循环

1 背景

很奇妙,从一个群里看到一个人的朋友圈,搞定了【VSLAM(VINS)+EKF+MPC=停车场无限循环】,挺感兴趣的,在这里简单分析一下。

视频截图:

在这里插入图片描述

2 分析

2.1 VSLAM

根据经验,电脑屏幕上显示的是rviz,VSLAM具体是VINS,但不确定是VINS-mono,还是VINS-fusion,也不确定是单目+IMU,还是双目+IMU。

问题:

  • VINS是用的在线的定位模式还是加载地图的重定位模式?

猜测:

  • 根据视频展示,车辆在地下停车场自动驾驶,其实是循迹,也就是先建图,并记录轨迹,之后加载地图进行重定位,再使用EKF融合其他传感器,得到最终的pose,最后再使用MPC循迹
  • 当然也不能排除就是在线的定位模式的可能性

2.2 EKF

EKF是扩展卡尔曼滤波,SLAM可分为基于滤波的方法和基于优化的方法,但是已经有了基于优化方法的VINS,那么这里的EKF很可能用来做多传感器融合,比如robot_pose_ekf和robot_localization都是用的EKF做多传感器融合,可以融合Odometry,IMU,VO和GPS等进行定位。

2.3 MPC

MPC(Model Predict Control)是一种反馈控制(feedback control)算法,使用模型来预测过程的未来输出。

MPC的特点:

  • 支持MIMO系统,便于构建输入输出间的相互影响参数
  • 支持方便添加约束条件
  • 具有预测能力
  • 需要较好的处理器和较大的内存,因为需要大量的在线优化,存储大量的变量

相关参考资料:

  • https://blog.youkuaiyun.com/zhkmxx930xperia/article/details/87742479

2.4 VSLAM(VINS)+EKF+MPC

从视频效果来看,能够实现在停车场环境的无限循环自动驾驶。

从轨迹来看,也是有误差的,每次的行驶轨迹有差异,尤其是右上角部分,轨迹明显不重合。(轨迹不重合也可能是为了避障)

从这个角度看,VINS又可能是使用的加载地图的重定位模式,不然怎么消除的累计误差?

3 扩展

Autoware的waypoint_follower中使用的轨迹跟踪算法为Pure Pursuit。

参考资料:

### 动态语义SLAM与VSLAM结合光流多视角几何用于动态物体检测 为了有效应对动态环境中的挑战,现代视觉同步定位与映射(vSLAM)技术正逐步引入语义信息和先进的计算机视觉算法。通过融合多种感知手段和技术路径,可以显著提升系统的鲁棒性和适应能力。 #### 结合语义信息的vSLAM架构设计 一种有效的策略是在传统的vSLAM基础上增加专门负责处理语义数据的新线程[^1]。此线程独立于核心跟踪流程工作,允许系统持续接收最新的语义输入而不影响实时性能。具体来说: - **语义分割模块**:采用高效的卷积神经网络模型如SegNet或Mask R-CNN执行图像级像素分类任务,识别出场景内的固定结构与活动实体。 - **移动概率更新机制**:对于每一个被标记为潜在运动体的对象,计算其随时间推移的空间位置变动趋势,并据此调整该对象在未来帧中再次出现的可能性分布。这有助于维持长时间跨度内的一致性认知状态。 - **异常值剔除逻辑**:当发现某些特征点不符合预期轨迹模式时,则将其视为噪声源予以排除,从而保护全局姿态估计免受干扰因素的影响。 ```python def update_semantic_info(map_points, semantic_output): """ 更新地图点上的语义信息 """ for point in map_points: if is_dynamic_object(point.position, semantic_output): point.label = 'dynamic' adjust_probability(point) def remove_outliers(features, motion_model): """ 剔除非正常运动特征点 """ valid_features = [] for feature in features: if fits_motion_pattern(feature.trajactory, motion_model): valid_features.append(feature) return valid_features ``` #### 利用光流场辅助动态目标追踪 借助密集光流估计算法可以获得连续两帧间各处亮度变化的速度矢量场,这对于捕捉快速变换的小尺度局部现象特别有用。特别是针对那些难以依靠稀疏特征匹配来稳定锁定的目标而言,光流提供了额外维度的信息支持。 ```cpp cv::Mat compute_optical_flow(const cv::Mat& prev_frame, const cv::Mat& curr_frame){ cv::Mat flow; cv::calcOpticalFlowFarneback(prev_frame, curr_frame, flow, ...); return flow; } ``` #### 多视角几何约束下的三维重建 考虑到单目摄像机固有的尺度不确定性问题,可通过联合多个视角的数据共同求解空间坐标系下的对应关系。例如,在已知若干参考平面上投影的基础上,进一步推测未知部分的位置参数;或者反过来利用先验知识指导新观测结果融入现有模型之中。 ```matlab function P = triangulate_points(pts_2d, poses) % pts_2d: N-by-2 matrix of image coordinates across views % poses : list of camera extrinsics (rotation & translation) per view A = []; b = []; % Construct linear system Ax=b from all available correspondences... end ``` #### OctoMap地图表示及目标数据库管理 OctoMap作为一种层次化的栅格化表达形式非常适合用来存储复杂环境下不确定性的程度描述。每当有新的传感器读数到来之时,便依据当前最佳猜测更新相应单元格的状态标签——无论是占用还是空闲亦或是暂无定论。与此同时,维护一份关于感兴趣类别实例的历史记录库也十分必要,以便后续查询检索以及行为理解等功能需求得以满足。 ```bash rosrun octomap_server octomap_binary output.bt input.bag roslaunch dynamic_slam integrate_octomap.launch ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值