腿足机器人之十- SLAM地图如何用于运动控制
腿足机器人之十- 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=1∑Nzk,σi,j2=N1k=1∑N(zk−hi,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((∂x∂h)2+(∂y∂h)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} ∂x∂h≈2△xhi+1,j−hi−1,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} ∂y∂h≈2△yhi,j+1−hi,j−1
然后结合坡度、粗糙度、障碍物高度判断是否适合踩踏:
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=ω1⋅e−k1⋅slope+ω2⋅e−k2⋅roughness
其中: ω 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(u→v)=α⋅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)=(xgoal−xn)2+(ygoal−yn)2+kh⋅(hgoal−hn)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=1∑N(Costterrain(pk)+λ⋅∣∣pk−pk−1∣∣)
其中 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} ∣∣pf−pcurrent∣∣≤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=1Nlegsfi−mgΣ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:N−1mink=0∑N−1(∣∣xk−xref∣∣Q2+∣∣uk∣∣R2)+∣∣xN−xref∣∣P2
- 状态 x k x_k xk包括质心位置、速度、关节角度。
- 输入控制 u k u_k uk包括关节力矩或落脚点位置。
- 实时调整:根据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=xCoM−gx¨CoM⋅zCoM
稳定性约束:
x Z M P ∈ S u p p o r t P o l y g o n x_{ZMP} \in \mathbf{Support Polygon} xZMP∈SupportPolygon
Boston Dynamics Atlas机器人的SLAM导航
- 硬件与传感器配置
- 激光雷达:Velodyne VLP-16,生成3D点云。
- IMU:测量本体角速度与加速度。
- 关节编码器:提供腿部运动学信息。
2.SLAM与运动控制流程
地图构建:
- 使用Google Cartographer融合激光雷达与IMU数据,构建3D栅格地图。
- 提取高程图与可通行区域(坡度<30°, 粗糙度<0.1m)。
- 全局路径规划:
- 在可通行区域上运行改进A*算法,避开陡坡与障碍物。
- 路径平滑化处理,确保步态序列的连贯性。
- 局部步态调整:
- 检测到动态障碍物(如移动箱子)时,MPC重新规划未来3步落脚点。
- 计算新落脚点的ZMP轨迹,调整质心运动以保持平衡。
- 控制执行:
- 逆运动学求解关节角度,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(qdes−q)+Kd(q˙des−q˙) - 触地阶段力控:根据地面反作用力调整关节力矩。
相关文章:
腿足机器人之十- SLAM地图如何用于运动控制
腿足机器人之十- SLAM地图如何用于运动控制 腿足机器人SLAM地图的表示与处理全局路径规划:地形感知的路径搜索基于A*的三维路径规划基于RRT*的可行步态序列生成 局部运动规划:实时步态调整与避障动态窗口法的腿足适配模型预测控制(MPC&#x…...
毕业项目推荐:基于yolov8/yolov5/yolo11的果蔬检测识别系统(python+卷积神经网络)
文章目录 概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式)功能6 支持切换检测到的目标查看 二、数据集三、算法介绍1. YO…...
pyside6学习专栏(二):程序图像资源的加载方式
pyside6中的QLabel控件可以加载图像和gif动画,可以直接从外部文件加载,也可以从QRC类型的文件(实际是一脚本文件)经编绎生成对应的资源.PY模块文件(就是将qrc文本中指定的资源文件的16制内容写入.py文件)来使用,本文对两种方式作了一简单的示…...
vue2和vue3的按需引入的详细对比通俗易懂
以下是 Vue2 与 Vue3 按需引入的对比详解,用最简单的语言和场景说明差异: 一、按需引入的本质 目标:只打包项目中实际用到的代码(组件、API),减少最终文件体积。类比:去餐厅点餐,只…...
JAVA:Gson:序列化和反序列化
Gson 是 Google 提供的一个用于在 Java 中方便地进行 JSON 与对象互相转换的库。 Gson 并不是 Android Studio(AS)专用的库,它是一个 通用的 Java JSON 解析库,可以在 任何 Java 项目 中使用。基本用法如下: 1. 把 Ja…...
如何在 VS Code 中快速使用 Copilot 来辅助开发
在日常开发中,编写代码往往是最耗时的环节之一。而 GitHub Copilot,作为一款 AI 编码助手,可以帮助开发者 自动补全代码、生成代码片段,甚至直接编写完整的函数,大幅提升编码效率。那么,如何在 VS Code 中快…...
PyCharm 中的 %reset -f 功能:一键重置控制台变量
在 PyCharm 的日常使用中,我们经常需要在控制台中测试和运行各种代码片段。随着时间的推移,控制台中会积累大量的变量和输出,这可能会使得环境变得混乱,影响我们的开发效率。为了解决这个问题,IPython 提供了一个非常有…...
DeepSeek-R1论文阅读及本地调用
前言 DeepSeek已经火了一段时间了,对于这项“国运级”的技术成果,即便研究的不是这个方向,也不免好奇前来看看。本文将先解析一下DeepSeek-R1这篇论文,再对DeepSeek的本地部署使用进行研究配置。 论文标题:DeepSeek-…...
自然语言处理:第九十二章 chatBI 经验(转载)
本人项目地址大全:Victor94-king/NLP__ManVictor: CSDN of ManVictor 原文连接: 一文分享 ChatBI 实践经验 写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!! 写在前面: 笔者更新不易,希望走过路过点个关注和赞&#x…...
体验用ai做了个python小游戏
体验用ai做了个python小游戏 写在前面使用的工具2.增加功能1.要求增加视频作为背景。2.我让增加了一个欢迎页面。3.我发现中文显示有问题。4.我提出了背景修改意见,欢迎页面和结束页面背景是视频,游戏页面背景是静态图片。5.提出增加更多游戏元素。 总结…...
sql server 从库创建的用户名登录后访问提示数据库无权限
在主副本库创建登录名并且用户映射赋权指定的数据库权限,副副本库也创建登录名,主副本有权限访问数据库的权限,但是副副本没有权限访问数据库。 解决方案: 检查数据库用户是否映射到登录名 如果数据库用户已存在,但…...
懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制)
1.合集懒人精灵本地离线卡密验证系统教程(不联网、安全稳定、省钱、永久免费、无任何限制):https://www.bilibili.com/video/BV1M6rdYEEog/ 备注: 1.本地离线卡密采用最安全的非对称加解密技术,设备id采用最安全多重混合加密不可逆技术生成&…...
Git LFS介绍(Large File Storage)大文件扩展,将大文件存储在外部存储,仓库中只记录文件的元数据(大文件的指针,类似一个小的占位符文件)
文章目录 LFS的功能?如何使用LFS?将大文件存储在外部系统是什么意思?具体是如何运作的?为什么要这样做? 对开发者的影响?1. **性能和效率**2. **协作体验**3. **版本管理差异**4. **额外的工具和配置** LFS…...
前后端项目部署服务器(传统部署和Docker部署)
内外网 开发环境连外网(8.140.26.187),测试/生产环境连内网(172.20.59.17) 内外网地址不同,但指定的库是同一个 内网IP地址范围包括: 10.0.0.0 到 10.255.255.255172.16.0.0 到 172.31.2551…...
python-leetcode 39.二叉树的直径
题目: 给定一棵二叉树的根节点,返回该树的直径。 二叉树的直径是指中间任意两个节点之间最长路径的长度。这条路径可能经过也可能不经过根节点root 两节点之间路径的长度由他们之间的边数表示 方法一:深度优先搜索 一条路径的长度为该路…...
Webpack的持久化缓存机制具体是如何实现的?
Webpack 的持久化缓存机制是 Webpack 5 引入的一项重要特性,旨在提高构建速度和性能。通过将构建结果缓存到磁盘上,Webpack 可以在后续构建中重用先前的结果,减少不必要的重新计算。以下是持久化缓存机制的具体实现和工作原理。 一、持久化缓…...
开题报告——基于Spring Boot的垃圾分类预约回收系统
关于本科毕业设计(论文)开题报告的规定 为切实做好本科毕业设计(论文)的开题报告工作,保证论文质量,特作如下规定: 一、开题报告是本科毕业设计(论文)的必经过程,所有本科生在写作毕业设计(论文)之前都必须作开题报告。 二、开题报告主要检验学生对专业知识的驾驭能…...
【分布式理论11】分布式协同之分布式事务(一个应用操作多个资源):从刚性事务到柔性事务的演进
文章目录 一. 什么是分布式事务?二. 分布式事务的挑战三. 事务的ACID特性四. CAP理论与BASE理论1. CAP理论1.1. 三大特性1.2. 三者不能兼得 2. BASE理论 五. 分布式事务解决方案1. 两阶段提交(2PC)2. TCC(Try-Confirm-Cancel&…...
配置Api自动生成
我的飞书:https://rvg7rs2jk1g.feishu.cn/docx/TVlJdMgYLoDJrsxAwMgcCE14nxt 使用Springfox Swagger生成API,并导入Postman,完成API单元测试 Swagger: 是一套API定义的规范,按照这套规范的要求去定义接口及接口相关信息,再通过可…...
适用于复杂背景的YOLOv8改进:基于DCN的特征提取能力提升研究
文章目录 1. YOLOv8的性能瓶颈与改进需求1.1 YOLOv8的优势与局限性1.2 可变形卷积(DCN)的优势 2. DCN在YOLOv8中的应用2.1 DCN的演变与YOLOv8的结合2.2 将DCN嵌入YOLOv8的结构中2.2.1 DCNv1在YOLOv8中的应用2.2.2 DCNv2与DCNv3的优化 2.3 实验与性能对比…...
Redis_基础
Redis 命令启动、配置密码 Redis是绿色软件,所以直接解压就能使用 配置文件为:redis.windows.conf 启动redis 服务: redis-server.exe redis.windows.conf启动客户端: redis-cli.exe默认没有给Redis配置密码,所以在…...
linux查看程序占用的本地端口
ss是Socket Statistics的缩写,用来替代旧的netstat工具,功能更强大,执行更快。它用于查看系统的网络连接情况,包括TCP、UDP等协议的信息。 一. 命令解析: sudo ss -tulwnpss (Socket Statistics):替代 ne…...
Linux阿里云服务器安装RocketMQ教程
本文为个人云服务器上搭建RocketMQ教程,用于帮助大家降低安装学习成本,提高学习效率。本人在服务器上(我用的是阿里云服务器)安装MQ时遇到了大大小小的问题,因此在最终完成部署后,希望能总结一个教程&#…...
【JavaEE进阶】MyBatis入门
目录 🌴前言 🌲什么是MyBatis? 🌳准备工作 🚩创建工程 🚩配置数据库连接字符串 🚩数据准备 🚩编写持久层代码 🍃单元测试 🌴前言 在应⽤分层学习时,我们了解到…...
Docker 镜像加速器配置指南
Docker 镜像加速器配置指南 2025-02-17 23:00 Linux : Aliyun ECS 服务器 背景问题 在国内,由于网络环境的不稳定,直接从 Docker Hub 拉取镜像的速度可能会很慢,有时甚至会失败。即使配置了官方的阿里云镜像加速器,也可能因为…...
LeetCode-524. 通过删除字母匹配到字典里最长单词
1、题目描述: 给你一个字符串 s 和一个字符串数组 dictionary ,找出并返回 dictionary 中最长的字符串,该字符串可以通过删除 s 中的某些字符得到。 如果答案不止一个,返回长度最长且字母序最小的字符串。如果答案不存在&#x…...
工作-述职笔记
文章目录 述职报告量化指标比较好的想法角色的基本要求项目不好做?减少人员介入的内容知识库 wiki 博客等(公司不一定允许) 点评培训的重要性 很少写关于工作的笔记,但是接触的东西越多,发现有很多知识点以及需要学习的内容。 所以整理下吧。 述职不是小…...
前端VUE+后端uwsgi 环境搭建
1整体架构 请求流程the web clinet--the web server->the socket->uwsgi--django 第一级的nginx并不是必须的,uwsgi完全可以完成整个的和浏览器交互的流程;在nginx上加上安全性或其他的限制,可以达到保护程序的作用;uWSGI本…...
2025软件测试面试题大全(78题含答案解析)
1、什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台、软件平台上是否可以正常的运行,即是通常说的软件的可移植性。 兼容的类型,如果细分的话,有平台的兼容…...
微信小程序地图map全方位解析
微信小程序地图map全方位解析 微信小程序的 <map> 组件是一个功能强大的工具,可以实现地图展示、定位、标注、路径规划等多种功能。以下是全方位解析微信小程序地图组件的知识点: 一、地图组件基础 1. 引入 <map> 组件 在页面的 .wxml 文…...
