一、方案选择
对于某种场景应该选择那些传感器、使用那种算法框架、传感器的安装方式,有人根据自己的经验给出了一些建议。
0. 其它
- d3vo:用深度学习估计位姿的不确定性
- 单线的可能不适合fast lio2。
- Apriltag对机器人定位,把相机放在天花板上,离地面大概3m,标签大小大概7*7cm,放在机器人上,机器人移动时,相机能看到就能定位
- gps融合lidar有必要做紧融合吗?没必要,gps很容易掉,即使在室外
1. 获取轨迹真值
现有一个大疆云台,可以避免摄像头抖动。需要走一个矩形来测试SLAM的精度。真值至少要比你自己的位姿高1个数量级以上.
- 造价低的导轨
- 起点运动到终点的闭环运动,计算闭合差
- 用RTK组合导航测试精度
- 室内也可以用动作捕捉, 动捕设备Vicon(https://www.vicon.com/)
- 便宜的方案是天花板贴二维码,用pnp二维码的作为真值
2. 经典框架
- 视觉+IMU+轮速计的slam算法: https://github.com/TouchDeeper/VIW-Fusion
- vins紧耦合gps或者2Dlidar: https://bittly.sigechen.com/
- VIO: https://zhuanlan.zhihu.com/p/497942945
- :
1. 2d激光雷达的多传感器融合
- rf2o,cartographer
2. IMU+轮式
- https://mp.weixin.qq.com/s/GlxOfxjicOzt3KRx-QQiKg
3. 数据集
- 搭载激光雷达和imu的公园、树林一类的数据集: liosam提供了一个park数据集,树林环境
10.
- 跑cartographer用2D 3D激光雷达。英特尔深度相机,直接跑orbslam3不用cartographer。
二、设备选型
不同的场景、性能需求、算法、价格等因素都会影响传感器设备的选择。如果有别人的经验,可以降低选择和尝试的成本。
1. imu
- 阿路比lpms nav3;Stim 300
- 国产的几百块钱的,输出频率100hz多一点的IMU能跑起来lio-sam吗?试过hi229,可以跑
-
2. 扫地机器激光雷达
单线激光雷达,用cartographer,有的带有视觉融合。carto建图,基于高精地图使用amcl定位,carto实时定位比较消耗资源。cartographer,建图可以,走的时候,经常会遇到问题。还有就是断电后,激光的好像很难恢复。
3.
5. RGB-D相机
- 第一代kinect用的结构光,第二代用的飞行时间tof
7. 带imu的相机
如果是做rgbdslam的话,azure kinect没得跑了;zed2,realsensed435i,都带。 我目前室外d435i,内置IMU感觉不咋样,这相机应该不错,很多家产品已经搭载了,d435i的模组。 realsense的视野比较窄,旋转太多就没有鱼眼相机稳定。d435i都快3000了。银牛好像可以作为realsense的平替产品。
9. 红外相机
11. innovusion激光雷达(图达通)
合作方:蔚来无人矿卡
12. 华测定位设备
组合导航:610、410、220松耦合,630紧耦合。接入轮速计可把误差从5‰减小到2‰.断开查分一段时间后会变为浮点解,进入遮挡后立即变为浮点解。PPS授时。
矿场边坡监测、形变监测。使用GNSS+太阳能板,定时发送数据判断是否警报,可达毫米级精度。
16. 其它产品
- 华为的cpe总会自动升级,关闭升级也不行,而且升级后不会保留配置。中兴的不会自动更新软件,更新也不会修改配置。
三、工具使用
仿真
1. 轨迹仿真
用excel表格弄出主车和目标车的位置信息和速度、相对速度信息,用Vissim仿真出两辆车的行驶轨迹动态图像。
精度评估
2. evo
- 默认计算平移,也可以加入 -r full 参数选项,同时计算平移+旋转的误差。使用的参考连接。
- 用evo评估orb-slam轨迹,使用命令行,不是在ros里面。
100.
可以用hexo搭建博客。放弃使用hexo,因为会在md文件中插入大量hexo语法,降低了md文件的通用性。
框架优化
1. VO实时性优化
考虑速度的话,一秒钟30张图片太多,所以一开始有必要特征点匹配求出位姿和三维地图点,后面就没必要每帧都花费算力去求三维地图点了。只用去前面帧上匹配三维地图点就行了。当后面的帧距离太远了,三维点不够用的话,就再求一些三维地图点。每次求三维地图点这些帧,就是关键帧了。地图就是用关键帧求的三维点构成的,没有地图就没办法局部优化,回环优化。特别是回环优化,对精度影响比较大.
四、工程化中的问题
1. g2o版本
error: no matching function for call to ‘g2o::BlockSolver<g2o::BlockSolverTraits<-1, -1> >::BlockSolver(LinearSolver*&)’
是版本问题,你看看你这个代码对g2o版本的要求吧
2. 激光雷达使用经验
- 激光雷达底座的水平旋转,相当于标定错误,会导致识别结果的位置错误
- 雷达点云周围出现圆环,可能是雷达周围近距离处的物体的反射,例如车体、保护结构等
- 安装位置较高时,大视场角可水平放置,小视场角应向下倾斜
- 灰尘附着对雷达有影响但不大
- 翻滚角导致激光雷达把路径外障碍物误报为路径内障碍物
3. 毫米波雷达
- 毫米波纵向测速准,侧向靠近或离开的障碍物检测不准
- 毫米波的挡板材料会影响感知效果
- 毫米波雷达有正负信号等四根线,接错后不会导致雷达损坏,但效果等同于雷达未连接电源
4. rtk
- rtk出现固定的向左侧或向右侧的偏差,可通过修改标定值解决
- rtk的传输:天线 –> 线缆 –> 设备 –> 线缆 –> 工控机
6
利用ros构建过大型的八叉树地图,用200张图片构成的点云图转换八叉树地图,但是rviz直接内存炸了。200帧,按640*480分辨率应该也就1个多G吧,八叉树内存炸不了,rviz处理这些点云的显示需要更大量级的内存和计算,所以炸了。也可能是八叉树启动时没有设置好分辨率,导致节点过多,然后导致炸了。
7
如果发现处理后的激光雷达点云明显缺少较低处的点云,有可能是64线的激光雷达当作32线处理了。
8
RANSAC算法需要迭代的次数期望值N与待估计模型的自由度K的关系。自由度越大,模型越复杂,所需迭代次数越多。(1-p^k)^N<0.05
10
闭环检测模块优化的是整个回环内所有的位姿。实践中看到的是距离当前帧比较近的关键帧位姿发生了明显变化。
11
Cartigrapher没有轮速计的情况,就建图来说差不多。不过需要先去畸变
五、数据集
STF数据集
两个通用的点云特征数据集,尤其是雨雾天气 STF