腿足机器人之九- 腿足机器人运动控制与SLAM地图的结合
机器人运动控制的核心目标是让机器人在环境中安全、高效地移动,前面的博客中主要阐述的是腿足机器人高效的移动(关节结构、高层运动规划、中层运动、逆运动学以及底层的PD电机驱动控制),而SLAM(Simultaneous Localization and Mapping,即时定位与地图构建) 是机器人实现自主导航的基石。没有SLAM地图,机器人就像“盲人摸象”:
- 未知环境:无法提前预知障碍物、路径和地形。
- 动态环境:无法实时更新地图(如移动的障碍物)。
- 定位依赖:无法确定自身位置,导致路径规划失效。
因此,SLAM为运动控制提供了环境感知和定位信息,两者结合才能实现真正的自主导航。
SLAM基础知识
SLAM指的是机器人在未知环境中,一边构建地图(Mapping),一边确定自身位置(Localization)。这离不开传感器数据、精细处理前端数据、强力后端优化以及闭环检测等环节。
对于腿足式机器人,SLAM的实现在某些方面与常规车轮式或飞行型机器人有所不同。这是因为腿足机器人的运动模式较为复杂,它们可以在非常不规则的地形上行走,如岩石、瓦砾或者是台阶等,这些环境为SLAM系统的实现提出了新的挑战。
Boston Dynamics的Spot机器人:这是一种四足行走机器人,配备有多种传感器,包括LiDAR和摄像头等,能够在各种复杂地形中进行探索和监测任务。Spot机器人利用高级SLAM技术进行环境感知、障碍物避免和路径规划,已经被应用于工业检查、数据收集等多个领域。
ANYmal:由苏黎世联邦理工学院开发的四足机器人,同样装备了先进的视觉和IMU传感器。ANYmal通过专门为四足机器人设计的SLAM算法能够在复杂、动态且未知的環境中稳定行走。
传感器数据采集
由于腿足式机器人需要在各种复杂地形上行走,因此相较于车轮式机器人,它们通常需要更多种类的传感器来获得足够的环境信息。常见的传感器配置包括:
- 激光雷达(LiDAR):用于进行高精度的距离测量(目前成本较高),直接生成2D/3D点云,能帮助机器人进行障碍物检测和避障。
- 摄像头(单目或立体):便宜且能提供丰富的视觉信息(缺点是对光照敏感),通过特征点(如ORB、SIFT)构建稀疏/稠密地图。
- IMU(惯性测量单元):由于腿足机器人在行走时可能会产生较大的震动,IMU 可以提供实时连续的运动状态信息(缺点是长时间使用会有积累误差),帮助机器人更准确地估计自身的姿态和加速度,辅助定位。
- 触觉传感器:腿足机器人的足部可能安装有触觉传感器,用于感知地面属性,如硬度、滑腻等,这对于机器人的步态规划和稳定行走非常关键。
前端处理
腿足式机器人在复杂地形上的行走要求SLAM系统能够实时且准确地处理大量的传感器信息,SLAM的前端处理主要包含特征提取和数据关联。特征提取是指从不同传感器(尤其是视觉传感器)中提取稳定可靠的特征点,如边缘、角点等,这些特征需具备易于跟踪和重复识别的特性。在数据关联步骤是指SLAM系统需要将当前帧数据中提取的特征与之前的帧进行比对,实现帧间的匹配,这要求算法必须具有高效和鲁棒性,以应对机器人动态运动带来的影响。
后端优化
定位与地图构建过程中会积累误差,后端优化的主要任务是对这些误差进行修正,确保地图和器人轨迹的全局一致性。常见的后端优化方法包括图优化技术和机器人的状态估计。对于图优化技术,可以利用因子图(factor graph)和非线性最小二乘方法求解优化问题:
x ∗ = arg min x Σ ( i , j ) ∈ c ρ ( ∣ ∣ f ( x i , x j , z i j ∣ ∣ 2 ) x^*=\arg \min_x \Sigma_{(i,j)\in c}\rho (||f(x_i, x_j, z_{ij}||^2) x∗=argxminΣ(i,j)∈cρ(∣∣f(xi,xj,zij∣∣2)
其中 x x x表示所有位姿的集合, z i j z_{ij} zij是从位姿 x i x_i xi到 x j x_j xj的测量值, ρ \rho ρ是一个鲁棒核函数,用于减轻离群值的影响。
对于状态估计是指实时更新机器人的状态估计,包括位置、姿态和速度等,这对于机器人动态平衡和路径规划至关重要。
闭环检测
在长时间的导航过程中,机器人可能会再次进入之前已经探索过的区域。闭环检测的任务是识别这种情况,即检测机器人是否回到了先前的位置。这对于减少全局定位误差和增强地图的一致性至关重要。通过闭环检测,系统可以在地图中加入一个新的约束,从而优化整个地图的精度和质量。
闭环经常通过寻找数据库中与当前帧相似的图像或激光雷达扫描数据实现。这可以通过不同的图像描述符或者特征匹配算法来完成,例如ORB、SIFT特征匹配。
SLAM算法分类
对于腿足式机器人而言,选择合适的SLAM算法至关重要,因为它们面临的环境比较复杂,比如不均匀的地形、不稳定的支撑面等。下面是几种常见的SLAM算法及其在腿足机器人上的应用情况。
在介绍具体算法之前,先用数学化公式描述SLAM问题:
- 机器人控制命令 u i u_i ui(如前进、转向等),控制命令是一个连续过程 u 1 : T = { u 1 , u 2 , u 3 , ⋯ u T } u_{1:T}=\{u_1,u_2,u_3, \cdots u_T\} u1:T={ u1,u2,u3,⋯uT}
- 机器人位姿(如位置和方向)定义: x i x_i xi表示 i i i时刻位姿, x 0 : T = { x 0 , x 1 , x 2 , ⋯ , x T } x_{0:T}=\{x_0, x_1, x_2, \cdots , x_T\} x0:T={
x0,x1,x2,⋯,xT}表示位姿从0时刻到 T T T的过程。其运动建模可为:
x i + 1 = g ( x i , u i ) + v i x_{i+1} = g(x_i, u_i) + v_i xi+1=g(xi,ui)+vi
其中g是运动函数(对应于前面系列博客,正运动学、逆运动学等), v i v_i vi是与运动相关的噪声,通常假设是高斯分布的。 - 整个环境的地图:m表示
- 观测值 z i z_i zi,该数据通常是传感器(如激光雷达、摄像头)获取, z 1 : T = { z 1 , z 2 , z 3 , ⋯ , z T } z_{1:T}=\{z_1, z_2, z_3, \cdots , z_T\} z1:T={
z1,z2,z3,⋯,zT}, i i i时刻观测值依赖于 z i z_i zi由当前机器人的位姿和地图,其数学关系可建模为:
z i = h ( x i , m ) + ω i z_i=h(x_i,m)+\omega_i zi=h(xi