拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

无人机视觉SLAM实战:VINS-Fusion从环境搭建到实机飞行全指南

无人机视觉SLAM实战:VINS-Fusion从环境搭建到实机飞行全指南 1. 为什么要在无人机上跑VINS-Fusion1.1 视觉SLAM对无人机意味着什么飞控能稳住姿态但飞控不知道自己在哪。GPS能告诉你大概位置但室内、桥洞、林间、楼宇夹缝里GPS要么漂到几十米外要么直接没信号。这时候无人机要自主飞行、要定点悬停、要按轨迹巡航就必须靠自己的传感器实时算出“我在哪、我朝哪、我周围长什么样”——这就是视觉SLAM要解决的事。VINS-Fusion是香港科技大学开源的一套视觉惯性紧耦合里程计方案输入是相机图像加IMU数据输出是高频的位姿估计和稀疏点云地图。它最大的特点是紧耦合把视觉观测和IMU预积分放在同一个优化框架里联合求解而不是像早期方案那样把两者松耦合地拼在一起。紧耦合带来的直接好处是在纹理弱、光照突变、快速运动的场景下系统不容易跟丢尺度也能靠IMU观测约束住。我拿它跑过室内走廊、地下车库、林荫道和农田上空几种场景。室内和车库表现最稳林荫道因为树叶纹理重复偶尔会飘农田上空如果作物排列规整、纹理单一需要把相机角度调低一些让地面纹理进入视野。整体来说VINS-Fusion在机载算力有限的条件下是目前性价比很高的选择。1.2 这套系统适合谁、需要什么基础这篇文章面向的是已经能飞、但想让无人机“自己知道在哪”的开发者。你不需要是SLAM算法专家但需要具备以下基础会用Linux基本命令能看懂CMake编译报错装过ROS知道节点、话题、消息这些概念了解相机内参、IMU噪声这些名词大概指什么手上有能跑Ubuntu的机载电脑或开发板如果你连ROS都没装过建议先把ROS环境跑通再回来。装ROS这件事本身有坑后面我会专门讲。整套系统的数据流是这样的相机和IMU的数据先进入ROS由VINS-Fusion节点订阅节点内部做特征跟踪、IMU预积分、滑动窗口优化最后发布里程计话题和点云话题飞控或导航节点再订阅这些话题做控制。理解这条链路后面配置的时候就知道每一步在干什么。注意VINS-Fusion对时间同步非常敏感。相机和IMU的时间戳如果对不齐优化会直接发散。这是新手最容易忽略、也最难排查的问题后面会单独展开。2. 硬件选型与传感器搭配的取舍2.1 相机怎么选全局快门是硬指标视觉SLAM对相机的要求和普通航拍完全不同。航拍追求画质和动态范围SLAM追求的是时间一致性和纹理可跟踪性。第一个硬指标是全局快门。卷帘快门在无人机振动和快速运动时会产生果冻效应同一帧图像里不同行的曝光时间不同特征点位置会畸变直接破坏几何约束。我早期用过一个卷帘快门相机悬停时还行一往前飞特征跟踪就大量丢失。换成全局快门后同样场景稳定很多。第二个指标是帧率。VINS-Fusion建议相机帧率在20Hz以上IMU在200Hz以上。帧率太低快速运动时帧间位移过大特征跟踪容易失败。但帧率也不是越高越好太高会挤占算力机载电脑扛不住。第三个是视场角。视场角大能看到的特征多但畸变也大标定难度上升。一般选90到120度之间的镜头比较平衡。我用的是120度左右的广角标定做好了畸变影响可以接受。常见的搭配是双目加IMU比如小觅、奥比中光的深度相机模组或者自己用两个全局快门相机加一个独立IMU组装。双目比单目的优势是尺度可以直接从基线算出来不依赖IMU初始化系统启动更快更稳。单目加IMU也能跑但初始化阶段需要无人机做一段激励运动才能把尺度和重力方向估出来。2.2 IMU怎么选噪声密度比量程更重要很多人选IMU只看量程觉得量程越大越好。实际上对VINS-Fusion来说噪声密度和零偏稳定性才是关键。IMU的噪声分两类白噪声和随机游走。白噪声影响单次测量的精度随机游走影响零偏随时间漂移的速度。VINS-Fusion的配置文件里需要填四个参数陀螺仪噪声、陀螺仪随机游走、加速度计噪声、加速度计随机游走。这些参数填错了优化权重就错了系统要么过度信任IMU导致视觉约束被淹没要么过度信任视觉导致IMU预积分形同虚设。参数从哪来正规IMU的datasheet里会给出噪声密度单位一般是度每根号小时或米每二次方秒每根号赫兹。如果datasheet没给就得自己做艾伦方差标定。我建议哪怕datasheet给了也自己标一次因为实际安装后的振动环境会让噪声特性变化。IMU的安装位置也有讲究。理想情况下IMU和相机光心尽量靠近这样两者之间的外参平移量小标定误差影响小。如果IMU装在飞控上、相机装在机头两者距离几十厘米外参标定不准的话旋转运动时会产生很大的位置估计误差。2.3 机载电脑算力、功耗、重量的三角平衡VINS-Fusion在机载电脑上跑算力、功耗、重量三者互相制约。无人机每多一克重量就少一点续航每多一瓦功耗就少一点飞行时间。我试过几种方案。树莓派4能跑但只能跑单目低帧率双目加IMU基本卡死。Jetson Nano勉强能跑双目但帧率要降到15Hz以下而且发热严重。Jetson Xavier NX是比较舒服的选择双目20Hz加IMU能实时跑功耗控制在10瓦左右。再往上Orin系列性能过剩对大多数无人机来说重量和功耗不划算。选机载电脑的时候还要看接口。相机和IMU的接口类型决定了你能不能直接连还是需要转接板。MIPI接口的相机延迟低但线缆脆弱USB接口方便但带宽和延迟不如MIPI。我一般用USB3.0的全局快门相机线缆好固定带宽也够。散热不能忽视。机载电脑在密闭机壳里跑SLAMCPU满载温度能到八九十度降频之后帧率直接掉。我一般会加一个小风扇或者导热硅胶垫把热量导到机壳上。实测加散热之后同样负载下帧率能稳定不少。3. ROS环境搭建从裸机到能跑节点3.1 Ubuntu版本和ROS版本怎么配VINS-Fusion官方推荐Ubuntu 18.04加ROS Melodic或者Ubuntu 20.04加ROS Noetic。这两个组合的依赖库版本最匹配编译报错最少。如果你用的是Ubuntu 22.04ROS2是主流但VINS-Fusion的ROS2版本生态还不如ROS1成熟很多教程和配置文件都是ROS1的。我建议新手直接用Ubuntu 20.04加Noetic省去大量版本兼容的麻烦。装ROS的时候国内网络环境是个现实问题。官方源速度慢经常超时。换国内镜像源是标准操作具体换哪个源看你所在网络环境一般选延迟低的就行。装完之后用roscore测试一下能正常启动说明基础环境没问题。有个细节ROS安装会往~/.bashrc里写环境变量如果你同时装了多个ROS版本环境变量会互相覆盖。我一般会在.bashrc里根据当前终端手动source对应的setup.bash而不是让它自动source避免版本混乱。3.2 依赖库安装Cerces、Eigen、OpenCV的版本坑VINS-Fusion依赖几个核心库Cerces Solver、Eigen、OpenCV。这三个库的版本兼容性是编译阶段最大的坑。Cerces Solver是优化库VINS-Fusion用它做非线性优化。Ubuntu 20.04自带的Cerces版本是2.0VINS-Fusion需要2.0以上一般没问题。但如果你之前装过其他版本可能会冲突。我建议用apt装系统自带的不要自己编译除非你有特殊需求。Eigen是线性代数库VINS-Fusion大量使用。Eigen 3.3和3.4在API上有细微差别某些写法在3.3能编译、3.4报错。Ubuntu 20.04自带3.3够用。如果你手动升级到3.4可能会遇到编译错误需要改代码。OpenCV是最麻烦的。VINS-Fusion的代码里用了不少OpenCV 3.x的API在OpenCV 4.x上会报错。Ubuntu 20.04自带OpenCV 4.2直接编译VINS-Fusion会有一堆CV_LOAD_IMAGE之类的报错。解决办法有两个一是装OpenCV 3.4二是改代码适配4.x。我一般选前者装一个独立的OpenCV 3.4到/usr/local编译VINS-Fusion时指定用它。装OpenCV 3.4的时候要注意不要覆盖系统自带的4.2否则其他依赖4.2的软件会出问题。用cmake指定安装路径到/usr/local/opencv3.4然后在VINS-Fusion的CMakeLists里手动指定OpenCV_DIR。3.3 编译VINS-Fusion报错排查实录编译VINS-Fusion的流程是标准的ROS工作空间流程建catkin_ws把源码放到src下catkin_make。但实际编译的时候报错五花八门。我整理了几个最常见的第一个是找不到OpenCV。报错信息一般是Could not find a configuration file for package OpenCV。原因是CMake在系统路径里找到了OpenCV 4.2但VINS-Fusion需要3.x。解决办法是在CMakeLists里加set(OpenCV_DIR /usr/local/opencv3.4/share/OpenCV)强制指定路径。第二个是Cerces头文件找不到。报错是fatal error: ceres/ceres.h: No such file or directory。这通常是Cerces没装或者装的位置不对。用apt install libceres-dev装系统自带的一般能解决。第三个是Eigen对齐问题。报错是error: static assertion failed: YOU_MIXED_MATRICES_OF_DIFFERENT_SIZES或者跟EIGEN_MAKE_ALIGNED_OPERATOR_NEW相关的。这是Eigen的内存对齐要求在C17下的兼容问题。解决办法是在CMakeLists里加add_definitions(-DEIGEN_MAKE_ALIGNED_OPERATOR_NEW)或者把C标准降到14。第四个是Python版本冲突。ROS Noetic默认用Python3但某些依赖可能还在找Python2。报错是ImportError: No module named ...。检查/usr/bin/python指向哪个版本确保是Python3。编译通过之后先跑官方数据集验证。VINS-Fusion的repo里提供了EuRoC数据集的bag文件用rosbag play播放然后启动VINS节点看RViz里有没有轨迹和点云输出。这一步能跑通说明环境没问题再上实机。实操心得编译的时候把catkin_make的输出重定向到文件比如catkin_make 21 | tee build.log报错的时候方便回溯。报错信息往往很长终端里翻页找关键行很费劲存成文件用grep搜error更快。4. 相机IMU标定精度决定成败4.1 为什么要标定不标定会怎样标定的目的是建立相机和IMU之间的几何关系以及各自的内部参数。具体来说包括相机内参焦距、主点、畸变系数IMU内参噪声密度、随机游走、零偏相机到IMU的外参旋转和平移不标定或者标定不准后果很直接。相机内参错了特征点的三维坐标就错了重投影误差大优化会往错误方向收敛。外参错了IMU预积分的位移和相机观测的位移对不上系统会持续输出漂移的轨迹严重时直接发散。我见过有人跳过标定直接用默认参数跑短时间悬停看着还行一飞长距离轨迹就歪得离谱。标定这一步省不得。4.2 相机标定棋盘格和Kalibr怎么用相机标定最常用的工具是Kalibr支持单目、双目、相机加IMU的联合标定。标定前要准备一块标定板。棋盘格最常用但Kalibr也支持AprilTag。棋盘格的优点是打印方便缺点是检测角点的时候对光照和角度敏感。AprilTag检测更鲁棒但需要专门的生成工具。标定的时候拿着标定板在相机视野里缓慢移动覆盖画面的各个区域中心、四角、远近、不同倾斜角度。移动要慢避免运动模糊。采集的数据要保证标定板在每个区域都出现过否则该区域的畸变系数估不准。Kalibr的命令大概是这样的rosrun kalibr kalibr_calibrate_cameras \ --bag camera.bag \ --topics /cam0/image_raw \ --models pinhole-radtan \ --target checkerboard.yamlcheckerboard.yaml里填棋盘格的格子大小和行列数。标定完成后会输出一个yaml文件里面是内参和畸变系数。标定结果怎么判断好坏看重投影误差。Kalibr会输出每张图的误差一般要求在0.5像素以内。如果某张图误差特别大说明那张图的角点检测有问题可以手动剔除。4.3 相机IMU联合标定时间偏移是隐藏杀手相机和IMU的联合标定比单独标相机复杂得多因为多了一个时间偏移参数。相机和IMU各自有自己的时钟两个时钟之间有固定偏移。这个偏移可能来自硬件触发延迟、驱动缓冲、ROS时间戳处理等多个环节。偏移量一般几毫秒到几十毫秒听起来不大但在快速旋转时几十毫秒的偏移会导致IMU积分出来的旋转和相机观测的旋转对不上优化直接崩。Kalibr的联合标定会同时估计外参和时间偏移。命令大概是rosrun kalibr kalibr_calibrate_imu_camera \ --bag imu_cam.bag \ --cam camchain.yaml \ --imu imu.yaml \ --target checkerboard.yamlimu.yaml里填IMU的噪声参数camchain.yaml是上一步相机标定的输出。标定的时候要做充分的激励运动三个轴向上都要有旋转和平移速度要有快有慢让IMU的各个轴都被激励到。如果只在一个平面内移动某些轴的零偏估不出来。标定结果里会有一个time offset单位是秒。这个值一般在正负0.05秒以内。如果标出来超过0.1秒要么是数据采集有问题要么是硬件触发没配好需要检查。注意标定时的IMU数据必须是原始数据不能经过任何滤波或积分。有些飞控会输出已经融合过的姿态那个不能用必须拿原始陀螺仪和加速度计读数。4.4 标定结果验证用已知轨迹检验标定完了怎么知道准不准最直接的办法是拿一个已知长度的轨迹跑一遍看VINS输出的轨迹长度和实际长度差多少。比如在走廊里走一段直线用卷尺量出实际距离然后看VINS估计的位移。误差在百分之一以内算合格超过百分之五说明标定有问题。另一个办法是看闭环误差。走一个矩形回到起点看VINS估计的终点和起点差多少。如果闭环误差大可能是外参或者时间偏移没标好。我一般两个办法都用。直线测尺度闭环测一致性。两个都过了才上实机飞。5. 配置文件详解每个参数背后的逻辑5.1 相机参数配置内参、外参、畸变模型VINS-Fusion的配置文件是yaml格式相机部分大概长这样cam0: camera_model: pinhole intrinsics: [fx, fy, cx, cy] distortion_model: radtan distortion_coeffs: [k1, k2, r1, r2] resolution: [width, height] rostopic: /cam0/image_rawintrinsics是焦距和主点从标定结果里抄。distortion_coeffs是畸变系数radtan模型对应径向畸变k1、k2和切向畸变r1、r2。如果用的是鱼眼镜头畸变模型要改成equidistant系数个数也不同。rostopic要和实际发布的话题名一致。我见过有人话题名写错节点启动了但收不到图排查半天以为是标定问题。双目的话会有cam0和cam1两段还要加一个cam1/T_cn_cnm1表示两个相机之间的外参。这个外参也是标定出来的不能随便填。5.2 IMU参数配置噪声和随机游走怎么填IMU部分大概长这样imu0: model: calibrated noise_density: [gyro_noise, acc_noise] random_walk: [gyro_rw, acc_rw] rostopic: /imu0/data update_rate: 200noise_density和random_walk就是前面说的四个参数。单位要注意陀螺仪一般是度每秒或弧度每秒加速度计是米每二次方秒。配置文件里用的单位要和标定输出一致否则数值差几个数量级。update_rate是IMU的采样率要和实际一致。如果实际是200Hz但配置里写100HzVINS会按100Hz做预积分时间对不上。model一般填calibrated表示用配置文件里的噪声参数。如果填imu_modelVINS会在线估计零偏但收敛需要时间启动阶段精度差一些。5.3 外参配置T_imu_cam的物理含义外参T_imu_cam表示从相机坐标系到IMU坐标系的变换包括旋转和平移。这个矩阵的物理含义是相机看到的一个点经过这个变换就转换到IMU坐标系下了。旋转部分一般是四元数或者旋转矩阵平移部分是三维向量。标定输出的一般是T_cam_imu也就是从IMU到相机的变换填配置的时候要注意方向别搞反了。搞反了系统也能跑但轨迹会完全错误而且不容易发现。我一般会用一个已知点验证在相机视野里放一个标记手动量出它在IMU坐标系下的位置然后用配置里的外参算一遍看对不对得上。对不上就说明方向反了或者数值抄错了。5.4 优化参数滑动窗口大小和关键帧策略VINS-Fusion的优化部分有几个关键参数max_solver_time单次优化的最大时间单位秒。设太小优化不充分设太大实时性差。一般0.05到0.1秒。max_num_iterations最大迭代次数。一般8到12次。keyframe_parallax关键帧选择的视差阈值。视差超过这个值就选为新关键帧。一般10到20像素。window_size滑动窗口大小。窗口越大精度越高但算力消耗越大。一般10到20。这些参数没有绝对最优值要根据机载算力和场景调整。算力紧张就减小窗口、增大视差阈值牺牲一点精度换实时性。场景纹理弱就减小视差阈值让更多帧进入优化。我一般先用默认值跑看CPU占用和轨迹质量再针对性调。调参的时候一次只改一个改完记录效果避免多个参数同时改导致无法归因。6. 实机飞行从悬停到轨迹跟踪6.1 起飞前的地面测试实机飞行前必须做地面测试。把无人机拿在手里模拟飞行时的运动前后左右移动、旋转、倾斜。同时看RViz里的轨迹和点云判断系统是否正常。地面测试要检查几件事特征点数量是否足够、轨迹是否平滑、有没有突然跳变、点云是否和实际环境一致。如果特征点很少可能是光照太暗或者纹理太弱。如果轨迹跳变可能是时间同步或者标定有问题。我一般会在地面测试阶段跑至少十分钟各种运动都做一遍确认系统稳定再起飞。地面测试发现问题排查成本远低于空中炸机。6.2 悬停测试验证尺度和漂移第一次飞行建议只做悬停。起飞到一米左右高度保持悬停三十秒到一分钟看VINS输出的位置漂移多少。理想情况下悬停时位置应该基本不变漂移在几厘米以内。如果漂移几十厘米甚至更多说明尺度估计有问题或者IMU零偏没收敛。悬停测试还能验证振动对IMU的影响。无人机悬停时电机振动会传到IMU上如果减震没做好IMU读数里会有高频噪声VINS的预积分会累积误差。我一般会在IMU下面垫减震棉效果很明显。6.3 轨迹飞行圆形和八字形测试悬停没问题之后可以飞简单轨迹。圆形和八字形是最常用的测试轨迹因为它们能激励各个轴向的运动暴露标定和配置的问题。圆形轨迹主要看闭环误差飞完一圈回到起点看VINS估计的终点和起点差多少。差得少说明尺度准、漂移小。八字形轨迹主要看旋转估计八字形有大量的偏航旋转能检验IMU的陀螺仪零偏和相机IMU外参。飞轨迹的时候要记录数据飞完回放分析。我一般用rosbag record把相机、IMU、VINS输出都录下来事后用脚本算误差。实时看RViz只能看个大概精确分析还得靠数据。6.4 飞行中的常见故障和处理飞行中VINS出问题表现一般是轨迹突然跳变、点云消失、RViz里无人机模型不动了。这时候要冷静判断是VINS的问题还是飞控的问题。如果VINS输出跳变但飞控还稳说明飞控没在用VINS的位置或者用了但滤波做得好。这时候可以切回手动模式降落检查。如果飞控也在用VINS的位置VINS跳变会导致飞控跟着跳无人机可能突然加速或倾斜。这种情况很危险所以第一次飞的时候我建议飞控不要直接信任VINS输出而是把VINS位置作为一个观测源和光流、气压计等融合单个源出问题不至于失控。我遇到过一次VINS在强光下跟丢原因是相机自动曝光导致图像亮度突变特征跟踪失败。后来把相机曝光设成手动固定一个适合当前光照的值就没再出现。这个坑很典型自动曝光对航拍友好对SLAM是灾难。7. 常见问题速查与避坑经验7.1 编译和启动阶段的问题问题现象可能原因解决办法编译报OpenCV找不到系统OpenCV版本不匹配指定OpenCV_DIR到3.x路径启动节点报找不到配置文件路径写错或文件没source检查launch文件里的路径RViz里没有点云话题名不匹配或数据没进来用rostopic list确认话题节点启动后立即退出配置文件格式错误用yaml解析工具检查格式编译阶段的问题大多和依赖版本有关启动阶段的问题大多和路径、话题名有关。排查的时候先用roscd确认包路径再用rostopic echo确认数据流基本能定位大部分问题。7.2 运行阶段轨迹异常的问题轨迹异常分几种漂移、跳变、发散。漂移一般是标定不准或者IMU零偏没收敛。解决办法是重新标定或者让系统先静止一段时间让零偏收敛。跳变一般是特征跟踪失败后重定位导致的。检查图像质量、光照、纹理必要时调整相机参数。发散一般是时间同步或外参严重错误。检查时间偏移标定结果确认外参方向没搞反。我整理了一个排查顺序先看图像再看IMU再看时间戳最后看配置。大部分问题在前三步就能定位。7.3 性能优化让帧率跑满VINS-Fusion在机载电脑上跑性能瓶颈一般在特征提取和优化两步。特征提取可以调参数减少每帧提取的特征点数量、降低图像分辨率、用更快的特征类型。但特征点太少会影响精度需要平衡。优化部分可以减小滑动窗口、减少迭代次数、增大关键帧视差阈值。这些都会牺牲精度换速度。硬件上给机载电脑加散热、用更快的存储、优化ROS通信比如用共享内存传输图像都能提升性能。我用共享内存传输图像之后图像传输延迟降了一半。实操心得跑VINS的时候用htop看CPU占用如果某个核跑满而其他核空闲说明代码没有充分利用多核。VINS-Fusion的部分模块可以并行化但需要改代码。不想改代码的话可以把特征提取和优化分到不同进程用ROS通信也能利用多核。7.4 我踩过的三个典型坑第一个坑是时间同步。早期我用USB相机时间戳是驱动收到图像的时间不是曝光时间。IMU时间戳是采样时间。两者之间有几十毫秒的固定偏移加上USB传输的抖动VINS一直飘。后来换了硬件触发相机曝光和IMU采样由同一个信号触发时间戳对齐了问题解决。第二个坑是IMU安装位置。我把IMU装在飞控上相机装在机头两者距离三十厘米。悬停时没问题一旋转轨迹就画圈。原因是外参平移量大标定误差被放大。后来把IMU挪到相机旁边问题消失。第三个坑是光照突变。在室内飞的时候从暗走廊飞到亮大厅相机自动曝光调整图像亮度突变特征跟踪大量丢失VINS跟丢。后来把曝光设成手动根据场景提前调好再没出现。这三个坑的共同点是都不是算法问题而是工程问题。VINS-Fusion的算法本身很成熟但工程细节没做好照样跑不起来。这也是为什么我一直在强调标定、时间同步、安装位置这些看起来“不算法”的东西。8. 后续扩展方向8.1 加闭环检测和全局优化VINS-Fusion本身是里程计长时间飞行会有累积漂移。要消除漂移需要加闭环检测和全局优化。闭环检测可以用DBoW之类的词袋模型识别出曾经到过的地方然后加一个闭环约束到优化里。VINS-Fusion的代码里有闭环检测的接口但需要自己配置词袋文件和调整参数。全局优化可以用Cerces或者g2o把所有的关键帧位姿和地图点放在一起优化。计算量大一般离线做或者用增量式优化在线做。8.2 和飞控深度集成现在VINS输出的是ROS话题飞控要通过MAVROS或者自定义协议订阅。集成深度决定了无人机能做什么。浅集成VINS位置作为飞控的一个观测源和光流、气压计融合用于定点悬停和低速飞行。深集成VINS位置直接作为飞控的位置环输入用于高速轨迹跟踪和自主导航。深集成对VINS的延迟和可靠性要求更高需要做延迟补偿和故障检测。我一般从浅集成开始跑稳了再逐步加深。直接上深集成一旦VINS出问题就是炸机。8.3 多传感器融合VINS加IMU是基础配置还可以加其他传感器提升鲁棒性。加激光雷达激光雷达提供深度信息和视觉互补。视觉在纹理弱的地方失效激光雷达不受影响。激光雷达在结构相似的地方失效视觉能提供纹理约束。加超声波或TOF低空定高用和VINS的位置融合提升起降阶段的稳定性。加GPS室外飞行时GPS提供全局位置VINS提供局部高精度位置两者融合能兼顾全局一致性和局部精度。多传感器融合的难点是时间同步和外参标定传感器越多标定越复杂。我建议先把VINS加IMU跑稳再逐个加其他传感器每加一个都重新标定和测试。8.4 从里程计到完整SLAMVINS-Fusion是里程计输出的是局部一致的轨迹。完整SLAM还需要建图、回环、重定位。建图可以用VINS输出的点云加上深度估计生成稠密地图。稠密地图可以用于避障和路径规划。回环和重定位需要维护一个全局地图新来的帧和全局地图匹配找到自己在全局地图中的位置。这是自主导航的基础。从里程计到完整SLAM工作量不小但每一步都有开源工具可用。我一般建议先跑通里程计再根据实际需求决定要不要做完整SLAM。如果只是定点悬停和简单轨迹飞行里程计就够了。如果要自主探索和长期运行才需要完整SLAM。最后分享一个我在实际项目中的体会VINS-Fusion的调参和标定占了整个项目百分之七十的时间算法本身反而最简单。很多人卡在编译和标定阶段就放弃了其实只要把环境搭好、标定做准后面的飞行测试反而顺利。我建议新手不要急着飞先把地面测试做扎实把各种异常情况都模拟一遍空中出问题的概率会小很多。
返回列表