步态控制之ZMP

news2024/11/28 0:42:57

零力矩点(Zero Moment Point,ZMP)概述

  • ZMP步态控制是人形机器人步态控制中的一个关键概念,旨在确保机器人在行走或站立过程中保持平衡。ZMP是指机器人接触面上力矩为零的点,确保在该点上机器人不会倾倒。
  • 这个示例展示了ZMP步态控制的基本原理和实现方法。实际应用中,机器人动力学模型会更加复杂,通常需要更高级的控制算法和优化技术来实现稳定和高效的步态控制
    以下是ZMP步态控制的原理和基本步骤。

ZMP 步态控制原理

1、ZMP 定义:

ZMP 是机器人在支撑面上的一个点,在这个点上,支撑面的所有水平力矩为零。换句话说,ZMP 是重力中心投影点在支撑面上的位置。

2、质心轨迹规划:

在步态规划过程中,首先需要确定机器人质心(Center of Mass,CoM)的轨迹。CoM 轨迹通常是平滑的曲线,用来确保机器人行走的平稳性。

3、ZMP 轨迹规划:

确定目标的 ZMP 轨迹,使其在机器人支撑面内移动,以确保在行走过程中机器人保持平衡。

4、逆运动学:

基于 CoM 和 ZMP 轨迹,使用逆运动学计算每个关节的期望角度和角速度,确保机器人身体的各部分按照规划轨迹移动。

5、前馈控制和反馈控制:

使用前馈控制基于规划好的轨迹产生关节力矩,并结合反馈控制来纠正由于模型误差和外界扰动导致的轨迹偏差。

数学原理

ZMP 的计算基于质心的运动和重力的作用。假设机器人只有两个关节,一个在髋部,一个在膝部,分别用角度 q1和 q2表示。其质心位置 x𝑐和 y𝑐
​以及质心加速度可以表示为:
在这里插入图片描述
其中 x1,y1和 x2,y2分别是各个链节的质心位置。

  • ZMP 位置可以表示为:
    在这里插入图片描述
    其中z𝑐是质心的高度,¨x𝑐和 ¨y𝑐分别是质心在水平和垂直方向上的加速度,g 是重力加速度。

ZMP 步态控制的基本步骤

1、规划质心轨迹:

设定机器人的质心轨迹,确保其在行走过程中保持稳定。质心轨迹通常在支撑面上方。

2、规划 ZMP 轨迹:

确保 ZMP 轨迹始终在支撑面内,以避免机器人倾倒。ZMP 轨迹可以是质心轨迹的投影。

3、逆运动学计算:

基于质心和 ZMP 轨迹,计算机器人各关节的期望角度和角速度。

4、生成关节力矩:

使用前馈控制和反馈控制生成关节力矩,以确保各关节按照规划的轨迹移动。

5、实时控制:

实时监控机器人的实际运动,使用传感器数据进行反馈控制,调整关节力矩,纠正轨迹偏差。

示例代码

import numpy as np
import matplotlib.pyplot as plt

# 定义机器人参数
mass = 50  # 机器人的总质量
g = 9.81  # 重力加速度
z_c = 0.9  # 质心高度

# 定义步态参数
step_length = 0.3  # 步长
step_time = 1.0  # 每步时间
num_steps = 10  # 步数

# 规划质心轨迹
time = np.linspace(0, step_time * num_steps, num_steps * 100)
x_c = np.linspace(0, step_length * num_steps, num_steps * 100)
y_c = np.zeros_like(x_c)  # 假设质心在y方向没有移动

# 计算质心加速度
x_c_dot = np.gradient(x_c, time)
x_c_ddot = np.gradient(x_c_dot, time)

# 计算 ZMP 轨迹
zmp_x = x_c - (z_c * x_c_ddot / g)
zmp_y = y_c

# 绘制质心轨迹和 ZMP 轨迹
plt.figure(figsize=(10, 6))
plt.plot(time, x_c, label='CoM Trajectory')
plt.plot(time, zmp_x, label='ZMP Trajectory')
plt.xlabel('Time [s]')
plt.ylabel('Position [m]')
plt.title('CoM and ZMP Trajectories')
plt.legend()
plt.grid(True)
plt.show()

代码解释

  • 规划质心轨迹:
    使用线性函数规划质心在行走过程中的轨迹。
  • 计算质心加速度:
    使用 np.gradient 计算质心位置的速度和加速度。
  • 计算 ZMP 轨迹:
    使用 ZMP 公式计算 ZMP 位置。
  • 绘制轨迹:
    使用 Matplotlib 绘制质心和 ZMP 的轨迹。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1802771.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python的登录注册界面跳转汽车主页面

1.登录注册界面的代码: import tkinter as tk from tkinter import messagebox,ttk from tkinter import simpledialog from ui.car_ui import start_car_ui# 设置主题风格 style ttk.Style() style.theme_use("default") # 可以根据需要选择不同的主题…

竞拍商城系统源码后端PHP+前端UNIAPP

下载地址:竞拍商城系统源码后端PHP前端UNIAPP

Live800:深度解析,客户服务如何塑造品牌形象

在当今竞争激烈的市场环境中,品牌形象对于企业的成功至关重要。而客户服务作为品牌与消费者之间最直接的互动方式,不仅影响着消费者的购买决策,更在塑造品牌形象方面发挥着不可替代的作用。本文将深度解析客户服务如何塑造品牌形象&#xff0…

1074 宇宙无敌加法器(测试点5)

solution 每位权值不同的高精度加法测试点5&#xff1a;结果为0的情况 #include<iostream> #include<string> using namespace std; int main(){string rule, a, b, ans "";int carry 0, temp, cnt, power;cin >> rule >> a >> b;…

【Python】FastAPI返回不带双引号的字符串

昨天为获取代理ip写的一个接口&#xff0c;但返回的数据是带有双引号&#xff0c;终究不适合一些应用场景&#xff0c;带引号的是这样的&#xff1a; 说实在话&#xff0c;一时我也愣住了&#xff0c;竟然不知道要咋去掉这个双引号。因为是api接口&#xff0c;直接显示结果&…

HW面试常见知识点2——研判分析(蓝队中级版)

&#x1f340;文章简介&#xff1a;又到了一年一度的HW时刻&#xff0c;本文写给新手想快速进阶HW蓝中的网安爱好者们&#xff0c; 通读熟练掌握本文面试定个蓝中还是没问题的&#xff01;大家也要灵活随机应变&#xff0c;不要太刻板的回答&#xff09; &#x1f341;个人主页…

计算机网络 期末复习(谢希仁版本)第8章

元文件就是一种非常小的文件&#xff0c;它描述或指明其他文件的一些重要信息。这里的元文件保存了有关这个音频/视频文件的信息。 10. 流式&#xff1a;TCP&#xff1b;流式实况&#xff1a;UDP。

零基础入门学用Arduino 第二部分(一)

重要的内容写在前面&#xff1a; 该系列是以up主太极创客的零基础入门学用Arduino教程为基础制作的学习笔记。个人把这个教程学完之后&#xff0c;整体感觉是很好的&#xff0c;如果有条件的可以先学习一些相关课程&#xff0c;学起来会更加轻松&#xff0c;相关课程有数字电路…

在windows下使用本地AI模型提供翻译、对话、文生图服务

文章目录 在windows下使用本地AI模型提供翻译、对话、文生图服务ollama简介下载安装配置环境变量模型安装目录服务监听地址跨域配置我的配置注意事项 开机自启 使用运行模型对话时的命令 查看本地已安装模型删除模型 查看ollama支持的模型 Docker Desktop简介下载安装配置开机自…

Linux驱动应用编程(四)IIC(获取BMP180温度/压力数据)

本文目录 一、基础1. 查看开发板手册&#xff0c;获取可用IIC总线2. 挂载从机&#xff0c;查看从机地址。3. 查看BMP180手册&#xff0c;使用命令读/写某寄存器值。4. 查看BMP180手册通信流程。 二、IIC常用API1. iic数据包/报2. ioctl函数 三、数据包如何被处理四、代码编写流…

(2024,Vision-LSTM,ViL,xLSTM,ViT,ViM,双向扫描)xLSTM 作为通用视觉骨干

Vision-LSTM: xLSTM as Generic Vision Backbone 公和众与号&#xff1a;EDPJ&#xff08;进 Q 交流群&#xff1a;922230617 或加 VX&#xff1a;CV_EDPJ 进 V 交流群&#xff09; 目录 0. 摘要 2 方法 3 实验 3.1 分类设计 4 结论 0. 摘要 Transformer 被广泛用作计算…

FM148R,FM147A和利时卡件

FM148R,FM147A和利时卡件。软件组成及各部分功能软件组成---各组件功能注意事项&#xff1a;仿真功能&#xff1a;仿真系统可以用于在单机上对组态完成的工程内容进行模拟运行。FM148R,FM147A和利时卡件。便于对这些组态内容的正确性和合理性进行初步调试。二、FM148R,FM147A和…

【Vue】面经基础版-案例效果分析

面经效果演示 功能分析 通过演示效果发现&#xff0c;主要的功能页面有两个&#xff0c;一个是列表页&#xff0c;一个是详情页&#xff0c;并且在列表页点击时可以跳转到详情页底部导航可以来回切换&#xff0c;并且切换时&#xff0c;只有上面的主题内容在动态渲染 实现思路…

C++基础四:C++模板编程

目录 一:函数模板 二:类模板 空间配置器allocator 一:函数模板 模板代码只能同一实现,不能先声明,再在另一文件实现,模板代码都是放在头文件当中的,在头文件中直接实现 二:类模板 template<typename T=int> class SeqStack // 模板名称+类型参数列表 = 类名称…

8.3 Go 包的组织结构

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

list模拟与实现(附源码)

文章目录 声明list的简单介绍list的简单使用list中sort效率测试list的简单模拟封装迭代器insert模拟erase模拟头插、尾插、头删、尾删模拟自定义类型迭代器遍历const迭代器clear和析构函数拷贝构造&#xff08;传统写法&#xff09;拷贝构造&#xff08;现代写法&#xff09; 源…

LabVIEW控制PLC的实现方式

LabVIEW与PLC的结合可以充分发挥两者的优点&#xff0c;实现更高效、灵活和可靠的自动化控制系统。本文将详细介绍LabVIEW控制PLC的实现方式&#xff0c;包括通信接口、数据交换、编程方法及实际应用案例&#xff0c;帮助用户理解并应用这一技术。 通信接口 常见通信协议 La…

Swift 序列(Sequence)排序面面俱到 - 从过去到现在(二)

概览 在上篇 Swift 序列(Sequence)排序面面俱到 - 从过去到现在(一)博文中,我们讨论了 Swift 语言中序列和集合元素排序的一些基本知识,我们还给出了以自定义类型中任意属性排序的“康庄大道”。 不过在实际的撸码场景中,我们往往需要的是“多属性”同时参与到排序的考…

Unity HDRP水系统

1.开启水系统 Script Interactions启用后&#xff0c;HDRP会为CPU上的水模拟分配内存。这允许您在水面上启用CPU模拟来查询高度信息。 2.Sky and Fog Volume中添加Water Rendering并勾选State 3.点击GameObject选择WaterSurface&#xff0c;选择要添加的水类型&#xff08;海…

【Vue】vuex 的使用 - 创建仓库

通用的地方我们一般会称之为仓库 1.安装 vuex 安装vuex与vue-router类似&#xff0c;vuex是一个独立存在的插件&#xff0c;如果脚手架初始化没有选 vuex&#xff0c;就需要额外安装。 yarn add vuex3 或者 npm i vuex32.新建 store/index.js 专门存放 vuex ​ 为了维护项目…