机器人依据自由度的可控性(controllable)划分为nonholonomic
或者holonomic robot
holonomic robot: 在所有的自由度上都可控的,比如基于万向轮的机器人(robot built on Omni-wheels)
nonholonomic robot: 差速车或阿克曼车。可控的自由度维数小于机器人自身的自由度,比如car自身有3个自由度(x,y,theta),即平面坐标和车身朝向,但car可控的自由度是2(加减速度,转动方向盘,不能随意的漂移运动)
从另一个直观通俗的角度可以理解为:如果机器人可以在N维空间中朝任意方向移动,则对于N维空间是完整性的。机器人在N维空间中不能朝任意方向移动,则认为是非完整性约束。
传感器
IMU:
- 直接测量角速度和线加速度
- 角速度的测量精度高
轮式里程计:
- 直接测量机器人的位移和角度
- 较高的局部角度和位置测量精度
- 更新速度高
(100Hz~200Hz)
传感器辅助(odom+IMU)
- 极高的位姿更新频率,可以比较准确反应运动情况
- 高精度的局部位姿估计
- 跟状态估计解耦,所有信息都来自传感器,不需要匹配
数据预处理:
- 轮式里程计的标定:轮式里程计的机械标称值并不代表真实值,实际误差可能较大
- 激光雷达运动畸变去除:每一帧激光数据的采集需要时间,在采集期间如果机器人运动会使测量值产生畸变。运动产生的畸变会让数据严重失真,影响匹配精度。
- 不同系统之间时间同步(不同CPU)
实际环境中的问题:
- 大尺度的动态环境,即有高动态(行走的人和移动前后的物体)
环境变化
几何结构相似的环境,比如长走廊
全局定位:信息量小
地面材质的变化
- 地面凹凸不平
- 机器人载重改变(与前两条一起影响里程计)
后面几条为传感器融合可以解决的问题
激光slam的问题:
- 退化环境: 对于2D激光雷达来说是hallway走廊; 对于3D激光雷达来说,很空旷的环境
- 地图的动态更新
- 全局地位
- 动态环境定位:动态物体检测与跟踪解决
实际问题
环境中的透明玻璃和网状结构,怎么解决
玻璃也有一定的反射率,大约10%。建图之后,可以直接把玻璃漏光部分直接编辑为黑线。多线激光常见方案:NDT-mapping和LOAM。3D激光SLAM一般与视觉融合,这是常用方法。LOAM不适合2D激光
主流的激光SLAM可以在普通ARM CPU上实时运行。激光雷达主动发射,在较多机器人时可能产生干扰。尤其是固态激光雷达的大量使用,可能使得场景中充满了信号污染,从而影响激光SLAM的效果。
非结构化环境:不存在特定的平面,比如马路(特定的平面和标志)。
开发农作物网面的识别和采集地图,需要用激光雷达好还是用3D摄像头来开发(采集环境信息然后写识别算法去识别需要找的农作物目的)好?
因为农作物的环境比较复杂,准确度要求也比较高,所以使用Realsense,16线雷达的数据不够,32线又太贵了
机器人绑架问题
机器人定位分为三大问题:全局定位、位姿跟踪 和 绑架劫持
全局定位:初始位置未知,机器人靠自身运动确定自己在地图中的位姿。
位姿跟踪:已知自身位姿或者已经通过全局定位得到了一个较好的位姿估计初值,在后续运动时补偿精度较差的运动控制误差
绑架劫持:机器人在已知自身位姿的情况下,得到了一个错误的位姿或者外界将其放到另外一个位姿,而里程计信息给出了错误的信息甚至没有给出控制信息。
最典型的粒子就是人把机器人搬走,机器人就找不到自己位置。这时用激光和里程计都不起作用了,可以用视觉辅助定位。用摄像头建一个特征地图,视觉SLAM和激光SLAM并行使用,激光SLAM失效时换视觉。比如使用二维码全局定位。
另外在绑架发生之前,保存当前状态,则可以使用除视觉传感器之外的传感器,比如反光板