很多人会好奇Factor Perception SDK与开源的RTAB-Map是什么关系?有什么区别?简单来说,RTAB-Map最开始就是一个Appearance-Based的SLAM后端,具有极强的回环检测能力和内存管理能力。直到2015年,RTAB-Map才加入了基础的Visual Odometry实现(这套实现其实非常适合新手学习,甚至比视觉SLAM十四讲更适合入门)。后来又陆续加入了对其它VIO和LIO框架的支持,变成了一套通用的SLAM库。RTAB-Map至今没有提供自己的VIO实现,只有VO,因为这套框架的关注点并不在前端。因此要基于RTAB-Map打造一套最强的SLAM解决方案,我们就要补上其前端的短板。如果在RTAB-Map现有的VO基础上加入对IMU的融合,会受限于祖传代码的构造,没法提供最好的实现。因此我们另起炉灶,开发了这套Factor-VIO。Factor Perception SDK包含了闭源的Factor-VIO前端及开源的RTAB-Map后端,这样我们就同时有了SOTA的前端和后端!我们为RTAB-Map做了很多贡献和改进,但很多新特性需要Factor-VIO的支持。大家可以在RTAB-Map的仓库中浏览这些新特性的代码和配置,但如果没有前端提供专用的数据,也只能看看代码,而无法使用(也不是完全不能用,但你要自己搞定那些配套的模型)。Factor-VIO整合了我们这几年在VSLAM方面的众多技术积累,具有极高的精度和鲁棒性。尤其是鲁棒性,我们认为已经逼近了硬件的理论极限。对于双目相机数据的使用,我们使用了一种特殊的非对称方案,像人类一样具有主视眼。静止时算法可以承受长时间的视觉完全遮挡和干扰。运动时可以承受左目(主视眼)短时间的完全遮挡,在非退化轨迹中可以承受右目长时间的完全遮挡。Factor-VIO提供200 Hz的高帧率里程计输出,而且几乎干掉了延迟,以满足更广泛的应用需要,包括高速场景、无人机、AR/VR等。另外对于机器人开发,大家一般需要机器人本体(base_link)的位姿和速度,而不是传感器(camera_frame或imu_frame)的位姿和速度。我们的SDK里提供了自动的坐标转换,只需在URDF中配置OAK相机的安装位置,就可直接提供base_link的位姿和速度(当然还包括协方差)。那怕不是固定安装(比如相机装在机械手上),只要TF是可以实时获取的,同样可以提供自动坐标转换。