腿足机器人之十- SLAM地图如何用于运动控制

news/2025/2/22 21:16:28

腿足机器人之十- SLAM地图如何用于运动控制

  • 腿足机器人SLAM地图的表示与处理
  • 全局路径规划:地形感知的路径搜索
    • 基于A*的三维路径规划
    • 基于RRT*的可行步态序列生成
  • 局部运动规划:实时步态调整与避障
    • 动态窗口法的腿足适配
    • 模型预测控制(MPC)与步态优化
  • 稳定性控制与SLAM定位的协同
  • Boston Dynamics Atlas机器人的SLAM导航

相比于轮式机器人(如人形轮式机器,可以看成是扫地机器人之上加了一个人形上身,实际的导航还是扫地机器人那一套),腿足式机器人(如人形机器人、四足机器人狗)的运动控制复杂度远高于轮式机器人,需要解决以下核心问题:

  • 复杂地形适应:楼梯、碎石、斜坡、火车铁轨等非结构化环境
  • 动态平衡控制:保持运动中的稳定性(如ZMP判据)
  • 高自由度协调:多关节协同运动(如12~28个自由度),(天工机器人2024.4具有42个自由度,内置多个视觉感知传感器及六维力传感器,配备惯性测量单元(IMU)和3D视觉传感器,拥有每秒550万亿次的算力。)
    在这里插入图片描述

SLAM地图的核心作用:

  • 地形几何建模:提供地面高度、坡度、障碍物尺寸等信息
  • 语义理解:识别可通行区域(如草地、水泥地、台阶)
  • 运动规划基础:结合地形信息生成安全步态和路径

腿足机器人SLAM地图的表示与处理

和到底机器人相比,腿足机器人可以双脚离地(小跑、跳跃),SLAM地图需要包含高度信息,因此使用三维地图,这可以使用点云地图、高程地图以及体素地图。

  • 点云地图:通过RGB-D相机或激光雷达生成稠密3D点云
  • 高程地图(Elevation Map):将点云投影为2.5D网格,每个网格存储高度均值和方差:
    h i , j = 1 N ∑ k = 1 N z k , σ i , j 2 = 1 N ∑ k = 1 N ( z k − h i , j ) 2 h_{i,j}=\frac{1}{N}\sum \limits_{k=1}^Nz_k, \sigma_{i,j}^2=\frac{1}{N}\sum \limits_{k=1}^N(z_k-h_{i,j})^2 hi,j=N1k=1Nzk,σi,j2=N1k=1N(zkhi,j)2
    其中 z k z_k zk为网格内低 k k k个点的高度。
  • 体素地图(Voxel Map):将空间划分为立方体单元,标记占用状态(如OctoMap)。

以高程地图为例,可以通过下式提取关键地形特征(坡度,以便评估机器人是否可以通过该倾斜度):
其坡度计算如下:
s l o p e i , j = arctan ⁡ ( ( ∂ h ∂ x ) 2 + ( ∂ h ∂ y ) 2 ) \mathbf{slope}_{i,j}=\arctan \left({\sqrt{(\frac{\partial h}{\partial x})^2+ (\frac{\partial h}{\partial y})^2} }\right ) slopei,j=arctan((xh)2+(yh)2 )
其中: ∂ h ∂ x ≈ h i + 1 , j − h i − 1 , j 2 △ x \frac{\partial h}{\partial x} \approx \frac{h_{i+1,j }-h_{i-1,j}}{2 \triangle x} xh2△xhi+1,jhi1,j ∂ h ∂ y ≈ h i , j + 1 − h i , j − 1 2 △ y \frac{\partial h}{\partial y} \approx \frac{h_{i,j+1 }-h_{i,j-1}}{2 \triangle y} yh2△yhi,j+1hi,j1
然后结合坡度、粗糙度、障碍物高度判断是否适合踩踏:
T r a v e r s a b i l i t y = ω 1 ⋅ e − k 1 ⋅ s l o p e + ω 2 ⋅ e − k 2 ⋅ r o u g h n e s s \mathbf{Traversability} = \omega_1 \cdot e^{-k_1 \cdot \mathbf{slope}} + \omega_2 \cdot e^{-k_2 \cdot \mathbf{roughness}} Traversability=ω1ek1slope+ω2ek2roughness
其中: ω 1 \omega_1 ω1 ω 2 \omega_2 ω2为权重, k 1 k_1 k1 k 2 k_2 k2为衰减系数。

全局路径规划:地形感知的路径搜索

在有了地图之后,需要找到起点到目标点的最优路径(避开已知障碍物),首先进行全局路径规划(基于静态地图),常用的算法有A*、Dijkstra、RRT*等。然后再使用局部路径规划(避开动态障碍物,实时调整路径),常用的算法有动态窗口法(DWA)、人工势场法。

基于A*的三维路径规划

将高程地图转换为三维栅格,定义移动代价函数:
C o s t ( u → v ) = α ⋅ d i s t a n c e ( u , v ) + β ⋅ s l o p e ( v ) + γ ⋅ r o u g h n e s s ( v ) \mathbf{Cost}(u→v) = \alpha \cdot \mathbf{distance}(u,v) + \beta \cdot \mathbf{slope}(v)+\gamma \cdot \mathbf{roughness} (v) Cost(uv)=αdistance(u,v)+βslope(v)+γroughness(v)

  • α \alpha α β \beta β γ \gamma γ为权重系数,平衡路径长度与安全性。
    改进启发函数:考虑地形起伏的欧氏距离:
    h ( n ) = ( x g o a l − x n ) 2 + ( y g o a l − y n ) 2 + k h ⋅ ( h g o a l − h n ) 2 h(n) = \sqrt{(x_{goal}-x_n)^2 + (y_{goal}-y_n)^2 + k_h \cdot(h_{goal}-h_n)^2} h(n)=(xgoalxn)2+(ygoalyn)2+kh(hgoalhn)2
    其中 h k h_k hk为高度权重因子。

基于RRT*的可行步态序列生成

针对腿足机器人,路径需满足落脚点约束:

  • 采样落脚点:在可通行区域随机选择候选点。
  • 运动学可达性检查:验证机器人腿部能否触及该点(逆运动学求解)。
  • 稳定性评估:计算ZMP(零力矩点)是否在支撑多边形内,见腿足机器人之八-动力学
    优化目标函数:
    J = ∑ k = 1 N ( C o s t t e r r a i n ( p k ) + λ ⋅ ∣ ∣ p k − p k − 1 ∣ ∣ ) J= \sum \limits_{k=1}^N(Cost_{terrain}(p_k) + \lambda \cdot ||p_k - p_{k-1}||) J=k=1N(Costterrain(pk)+λ∣∣pkpk1∣∣)
    其中 p k p_k pk为第k步的落脚点, λ \lambda λ平衡步长与地形代价。

局部运动规划:实时步态调整与避障

动态窗口法的腿足适配

将速度空间扩展为 落脚点时序空间:

  • 决策变量:下一步落脚点位置 x f , y f , z f x_f, y_f, z_f xf,yf,zf和接触地时间 t f t_f tf
  • 约束条件:
    • 运动学极限: ∣ ∣ p f − p c u r r e n t ∣ ∣ ≤ l m a x ||p_f - p_{current}|| \le l_{max} ∣∣pfpcurrent∣∣lmax ,表示退长限制;
    • 动态平衡:ZMP轨迹在支撑多边形内。
    • 避障:落脚点不与障碍物区域重叠。
  • 评价函数:
    KaTeX parse error: Undefined control sequence: \codt at position 19: …re(p_f)=\alpha \̲c̲o̲d̲t̲ ̲dist_to_goal(p_…

模型预测控制(MPC)与步态优化

MPC框架步骤:
1.预测模型:建立腿足机器人动力学模型(如单刚体模型):
{ m r ¨ = Σ i = 1 N l e g s f i − m g I ω ˙ + ω × I ω = Σ i = 1 N l e g s ( r i × f i ) \left\{ \begin{aligned} m \ddot r & = & \Sigma_{i=1}^{N_{legs}}f_i -mg \\ I \dot \omega + \omega \times I \omega & = & \Sigma_{i=1}^{N_{legs}(r_i \times f_i)} \end{aligned} \right. mr¨Iω˙+ω×Iω==Σi=1NlegsfimgΣi=1Nlegs(ri×fi)
其中 f i f_i fi是第 i i i条腿的地面反作用力, r i r_i ri为力作用点位置。
2.滚动优化:在时间窗口 [ t , t + T ] [t, t+T] [t,t+T]内求解最优落脚点和关节轨迹:
min ⁡ u : 0 : N − 1 ∑ k = 0 N − 1 ( ∣ ∣ x k − x r e f ∣ ∣ Q 2 + ∣ ∣ u k ∣ ∣ R 2 ) + ∣ ∣ x N − x r e f ∣ ∣ P 2 \min_{u:0:N-1} \sum \limits_{k=0}^{N-1}(||x_k - x_{ref}||_Q^2 + ||u_k||_R^2) + ||x_N - x_{ref}||_P^2 u:0:N1mink=0N1(∣∣xkxrefQ2+∣∣ukR2)+∣∣xNxrefP2

  • 状态 x k x_k xk包括质心位置、速度、关节角度。
  • 输入控制 u k u_k uk包括关节力矩或落脚点位置。
  1. 实时调整:根据SLAM更新的障碍物信息修正优化约束。

稳定性控制与SLAM定位的协同

零力矩点(ZMP)稳定性判据
ZMP定义为地面反作用力的合力作用点,需落在支撑多边形内:
x Z M P = Σ i = 1 N ( m i x i ( g + z ¨ i ) − m i z i x ¨ i Σ i = 1 N m i ( g + z ¨ i x_{ZMP} = \frac{\Sigma_{i=1}^N(m_i x_i(g + \ddot z_i) - m_i z_i \ddot x_i}{\Sigma_{i=1}^N m_i(g+\ddot z_i} xZMP=Σi=1Nmi(g+z¨iΣi=1N(mixi(g+z¨i)mizix¨i
简化模型下(质心高度恒定):
x Z M P = x C o M − x ¨ C o M ⋅ z C o M g x_{ZMP} = x_{CoM}-\frac{\ddot x_{CoM} \cdot z_{CoM}}{g} xZMP=xCoMgx¨CoMzCoM
稳定性约束:
x Z M P ∈ S u p p o r t P o l y g o n x_{ZMP} \in \mathbf{Support Polygon} xZMPSupportPolygon

Boston Dynamics Atlas机器人的SLAM导航

  1. 硬件与传感器配置
  • 激光雷达:Velodyne VLP-16,生成3D点云。
  • IMU:测量本体角速度与加速度。
  • 关节编码器:提供腿部运动学信息。

2.SLAM与运动控制流程
地图构建:

  • 使用Google Cartographer融合激光雷达与IMU数据,构建3D栅格地图。
  • 提取高程图与可通行区域(坡度<30°, 粗糙度<0.1m)。
  1. 全局路径规划:
  • 在可通行区域上运行改进A*算法,避开陡坡与障碍物。
  • 路径平滑化处理,确保步态序列的连贯性。
  1. 局部步态调整:
  • 检测到动态障碍物(如移动箱子)时,MPC重新规划未来3步落脚点。
  • 计算新落脚点的ZMP轨迹,调整质心运动以保持平衡。
  1. 控制执行:
  • 逆运动学求解关节角度,PD控制器跟踪轨迹:
    τ = K p ( q d e s − q ) + K d ( q ˙ d e s − q ˙ ) \tau = K_p(q_{des}-q) + K_d(\dot q_{des}-\dot q) τ=Kp(qdesq)+Kd(q˙desq˙)
  • 触地阶段力控:根据地面反作用力调整关节力矩。

http://www.niftyadmin.cn/n/5862767.html

相关文章

CSS基础(浮动、相对定位、绝对定位、固定定位、粘性定位、版心、重置默认样式)

文章目录 1. 浮动&#xff08;float&#xff09;1.1 简介1.2 元素浮动后的特点1.3 脱离文档流示例图1.4 浮动产生的影响1.4.1 积极影响1.4.2 消极影响 1.5 解决浮动产生的影响1.5.1 清除浮动&#xff08;Clearfix&#xff09;1.5.2 创建新的块格式化上下文&#xff08;BFC&…

Blender小技巧和注意事项

1.雕刻模式如果没反应,需要将模式转换成编辑模式 2. 鼠标移到大纲 点击 小键盘的. / 大键盘句号 , 在大纲视图快速找到选中物体 3.打包图像等数据进Blender文件中,可以防止丢失

nginx配置:nginx.conf配置文件

nginx.conf配置文件说明 基本结构 全局块&#xff1a;位于最外层&#xff0c;定义影响整个Nginx服务器的设置。事件块&#xff1a;配置网络连接相关的设置。HTTP块&#xff1a;定义HTTP服务器以及反向代理、负载均衡等特性。Server块&#xff1a;定义虚拟主机&#xff0c;即响…

LeetCode 2595.奇偶位数:位运算

【LetMeFly】2595.奇偶位数&#xff1a;位运算 力扣题目链接&#xff1a;https://leetcode.cn/problems/number-of-even-and-odd-bits/ 给你一个 正 整数 n 。 用 even 表示在 n 的二进制形式&#xff08;下标从 0 开始&#xff09;中值为 1 的偶数下标的个数。 用 odd 表示…

Lua C API:深入理解 lua_pushnumber 函数 — 将数字压入 Lua 栈中

在使用 Lua 与 C 进行交互时&#xff0c;Lua 提供了一套强大的 C API 来管理 Lua 状态机、操作栈上的数据。lua_pushnumber 是其中一个非常常用的函数&#xff0c;用于将一个数字值从 C 推送到 Lua 栈上。接下来&#xff0c;我们将详细讲解这个函数的用法&#xff0c;原理&…

人工智能之自动驾驶技术体系

自动驾驶技术体系 自动驾驶技术是人工智能在交通领域的重要应用&#xff0c;旨在通过计算机视觉、传感器融合、路径规划等技术实现车辆的自主驾驶。自动驾驶不仅能够提高交通效率&#xff0c;还能减少交通事故和环境污染。本文将深入探讨自动驾驶的技术体系&#xff0c;包括感…

文本分类与情感分析算法

引言 自然语言处理(NLP)作为人工智能的重要分支,致力于让计算机理解和处理人类语言。在这一领域中,文本分类和情感分析是两项基础且至关重要的任务。文本分类旨在将文本划分到预定义的类别中,而情感分析则关注于识别和提取文本中的情感倾向。本文将深入探讨文本分类和情感…

关于YApi接口操作

YApi有 接口集合 和 测试集合 两个概念。 接口集合 将接口进行分类&#xff0c;使接口结构更清晰&#xff0c;一个接口只能属于一个集合&#xff0c;且不允许与其他接口重名。测试集合 为了方便我们测试接口&#xff0c;测试集合 将若干接口组合在一起&#xff0c;在这里一个接…