SLAM中基于滤波的方法的问题及如何调参?

作者 | 半闲居士 编辑 | 汽车人

原文链接:https://www.zhihu.com/answer/3127818634

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【SLAM】技术交流群

本文只做学术分享,如有侵权,联系删文

两个月过去了,不知道你的问题是不是已经解决 :D

如果你从头开始写VIO或者LIO,那么跑飞是正常情况,不跑飞说明你天赋异禀,能够把所有咒语一口气念对。实际系统中相差一点点细节都可能导致IMU系统跑飞,比如某家IMU帮你去掉了重力,某家IMU的陀螺测量单位用的角度,而你假设的是弧度,等等。

而且优化系统并不比滤波器简单。优化也要调各因子的平衡性,而且雅可比矩阵、信息矩阵很容易把矩阵块的索引写错,除了自己查之外别人也帮不上什么忙 :D 我还碰到过把优化器搞出内存泄露调了好几周调不出来的。

如果你执意想从头写的话,我建议按照以下步骤来调:

  1. 先把你的VO或LO搞对。大部分系统在没有IMU的时候也能跑起来,保证你的纯视觉、纯激光系统大致是没错的。

  2. 检查IMU的单位是否和你预期的一致,比如陀螺和加计的单位,加计有没有去重力。检查IMU的三个轴方向是否和你预计的一样(视觉坐标系和雷达坐标系习惯通常是不一样的,雷达Z朝上,相机Z朝前)。

  3. 检查滤波器的F阵、H阵的元素和符号有没有写反。如果你用的开源框架,通常是对的,自己写的就不一定。

  4. 如果上述都是对的,那么轨迹“飞”通常是加计导致的(陀螺直接积分都不会飞,但加计会)。各数据集的加计性能相差很多,不能一概而论。实际上你可以先把加计部分去掉,直接用VO或LO估计的平移量。然后检查这个平移量和你用速度+加计估计出来的是否一致。如果不一致,通常就是坐标系出现了问题。

  5. 最后才是调参。在VO、LO能正常运行的情况下,把IMU的噪声设大一些,那么EKF会由视觉或激光部分来主导。如果都正常,再慢慢减小IMU的噪声值。不要太相信IMU的标定,我见过理论上推十几页公式,实践动不动把噪声参数乘10,乘100的,都正常。

  6. 至于边缘化、FEJ、能观性、P阵切空间投影这些,不会有很大影响,主要是让论文变长一些,至少不会让一个原本飞走的系统变得不飞走。在前期调试的时候甚至都不用做,甚至你可以在每次迭代之后把P阵设成一个单位阵。只要你纯VO或LO不飞,EKF也不会飞。

MSCKF不建议你直接写,我的某个实习生鸽了我两年半的MSCKF-LIO,直到毕业了也没写出来 @白徐行 。你可以在EKF基础上添加multi state部分,做视觉的话参考黄老师他们的方案即可。

然后论文和代码不一致是正常现象。完全一致通常说明作者毕业了或者懒得更新了。代码是在不断发展的,论文多灌一篇是一篇,谁还能不断更新论文不成……

EKF的dx有若干种方式来算,一般就是K乘innovation,其他的无非就是把K变一变形。本身K就是个中间变量,有很多种不同写法。我一般就是:

71198b2bd09fbbe8252f85ed619a7dfe.png
https://github.com/gaoxiang12/slam_in_autonomous_driving/blob/master/src/ch3/eskf.hpp

关键在于H阵和innvation都不要错符号(当然有时候两个都错等于没错就是了)。

还有什么疑问的,欢迎讨论。

b0d8cf774fd93ed7b05f8d70fcbcde2b.png

① 全网独家视频课程

BEV感知、毫米波雷达视觉融合、多传感器标定、多传感器融合、多模态3D目标检测、点云3D目标检测、目标跟踪、Occupancy、cuda与TensorRT模型部署、协同感知、语义分割、自动驾驶仿真、传感器部署、决策规划、轨迹预测等多个方向学习视频(扫码学习)

acd856d38bf9767b3a9f3425835b4469.png 视频官网:www.zdjszx.com

② 国内首个自动驾驶学习社区

近2000人的交流社区,涉及30+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(2D检测、分割、2D/3D车道线、BEV感知、3D目标检测、Occupancy、多传感器融合、多传感器标定、目标跟踪、光流估计)、自动驾驶定位建图(SLAM、高精地图、局部在线地图)、自动驾驶规划控制/轨迹预测等领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

3997e87483edf692a072e27a8818d1e9.png

③【自动驾驶之心】技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多模态感知、Occupancy、多传感器融合、transformer、大模型、点云处理、端到端自动驾驶、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向。扫码添加汽车人助理微信邀请入群,备注:学校/公司+方向+昵称(快速入群方式)

6e60a838d789b8d5716dcdccd4ff870d.jpeg

④【自动驾驶之心】平台矩阵,欢迎联系我们!

35df49821b3c05a37fab031913ff251f.jpeg

<think>好的,我现在需要帮助用户查找与ROS2相关的SLAM算法资料或实现方法。首先,我要回忆一下用户提供的引用内容,看看是否有相关的信息。引用1中提到了几种2D激光SLAM算法,比如gmapping、hector slam、karto slam,以及一些3D激光SLAM的库,比如slam6d和blam。引用3讨论了SLAM的一般处理流程,包括前端和后端,以及单目SLAM的分类。引用2提到了g2o图优化框架,引用4是关于深度强化学习的综述,可能不直接相关。 用户的问题是关于ROS2的SLAM算法实现或教程。ROS2是ROS的下一代版本,所以需要确认这些算法是否有ROS2的移植或官方支持。比如,gmapping在ROS1中有广泛应用,但在ROS2中可能需要使用替代包,比如slam_toolbox。同样,cartographer在ROS2中可能有支持。 接下来,我需要整理常见的ROS2支持的SLAM算法,并参考用户提供的引用内容。例如,gmapping基于粒子滤波,这在引用1中提到过,但ROS2中可能需要slam_toolbox来替代。然后,需要列出每个算法的特点、相关资源链接,以及实现步骤,比如安装包、配置参数、运行节点等。 另外,用户可能需要知道如何选择算法,比如基于传感器类型(激光雷达、RGB-D等),是否需要里程计数据,以及是否需要实时性等。根据引用1中的信息,hector slam不需要里程计,而gmapping和karto需要,这可以作为选型建议的一部分。 最后,生成相关问题,可能涉及算法比较、实践中的调参、与ROS1的区别等。确保回答结构清晰,分点列出,并正确引用提供的资料,如引用1和引用3中的内容。</think>以下是与ROS2相关的SLAM算法资料及实现方法的整理: ### 一、ROS2支持的SLAM算法及特点 1. **Cartographer (Google)** - **特点**:支持2D/3D激光雷达,基于图优化(与引用[2]中提到的g2o框架相关),提供实时建图和闭环检测能力。 - **ROS2实现**:官方支持ROS2,提供`cartographer_ros`包。 - 资源链接:[Cartographer官方文档](https://google-cartographer.readthedocs.io) 2. **slam_toolbox (替代gmapping的ROS2方案)** - **特点**:基于粒子滤波的2D激光SLAM(类似引用[1]中的gmapping算法),支持在线/离线建图。 - **ROS2实现**:直接通过`apt`安装包`slam_toolbox`。 - 代码示例: ```bash ros2 launch slam_toolbox online_async_launch.py ``` 3. **Nav2 + SLAM (集成方案)** - **特点**:结合导航与SLAM,支持多传感器融合(如RGB-D相机)。 - **实现步骤**: - 安装`nav2_bringup`和`slam_toolbox` - 启动命令: ```bash ros2 launch nav2_bringup tb3_simulation_launch.py slam:=True ``` 4. **RTAB-Map (3D SLAM)** - **特点**:基于视觉/深度相机的稠密建图(符合引用[3]中提到的稠密法分类)。 - **ROS2支持**:需手动编译安装,支持RGB-D和LiDAR数据。 - 资源链接:[RTAB-Map_ROS2教程](https://github.com/introlab/rtabmap_ros) --- ### 二、选型建议(参考引用内容) 1. **传感器类型**: - **2D激光雷达**:优先选择`slam_toolbox`或`Cartographer`(引用[1]中提到的2D激光算法)。 - **RGB-D相机**:使用RTAB-Map实现稠密建图(引用[3]中稠密法应用)。 2. **是否需要里程计**: - 无里程计:选择Hector SLAM的ROS2移植版本(如社区实现),但需注意其鲁棒性限制(引用[1]提到Hector无需里程计)。 3. **实时性要求**: - 高实时场景:Cartographer优于传统粒子滤波方法(引用[2]图优化框架提升效率)。 --- ### 三、实践步骤(以Cartographer为例) 1. **安装依赖**: ```bash sudo apt install ros-<distro>-cartographer-ros ``` 2. **配置参数**: - 修改`lidar_2d.lua`文件定义传感器参数: ```lua TRAJECTORY_BUILDER_2D.num_accumulated_range_data = 1 ``` 3. **启动节点**: ```bash ros2 launch cartographer_ros cartographer.launch.py ``` --- ### 四、相关引用 - 关于图优化框架的应用(如Cartographer后端),可参考g2o的理论基础[^2]。 - SLAM的前后端分离设计(如track和map模块)与引用[3]中描述的处理流程一致[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值