https://github.com/datawhalechina/ai-hardware-robotics
参考资料地址

具身智能(Embodied AI) 具身智能 = 智能的大脑 + 行动的身体。
比例(Proportional)、积分(Integral)、微分(Derivative)

目录

  • 具身智能概述
    • 重要三要素 身体 、大脑 、环境
    • 发展的脉络
    • 面临的挑战
  • PID_control
    • 工作原理
      • c语言示例代码
      • 举例分析 matlab-simulink

具身智能,指的是能够通过 物理身体(如机器人、自动驾驶汽车等)在真实世界中进行感知、交互和学习的智能系统。它强调智能体必须拥有一个“身体”(Body),并通过这个身体与环境互动,从而获得对世界更深层次、更符合物理规律的理解。

具身智能概述

重要三要素 身体 、大脑 、环境

  • 身体(Body):智能体的物理形态,包括各种传感器(如摄像头、激光雷达、触觉传感器)用于感知,以及执行器(如电机、机械臂、轮子)用于行动。
  • 大脑(Brain):即智能算法的核心,负责处理来自传感器的数据,进行思考、决策,并向执行器发出指令。这通常涉及到深度学习、强化学习、大语言模型等前沿AI技术。
  • 环境(Environment):智能体所处的物理世界。它是智能体学习和实践的舞台,充满着不确定性、动态变化和复杂的物理规律。

发展的脉络

第一阶段(20 世纪中叶 - 20 世纪末)

  • 理论构想的提出与早期实体机器人的尝试。控制论创始人等率先提出机器与环境交互的理念,为具身智能奠定理论基础。
  • 标志性成果是世界首台移动机器人 Shakey 的诞生,它首次实现了感知、推理和行动的系统整合,虽行动迟缓,但开启了具身智能从概念到实体的探索。
    第二阶段(21 世纪初 - 2020 年)
  • 深度学习技术推动机器人感知与学习能力的跃升。算力提升让计算机视觉技术成熟,赋予机器人更敏锐的 “视觉”;强化学习使机器人能通过试错自主学习复杂技能。
  • 突出成果体现在运动控制与平衡能力的飞跃,以波士顿动力为代表,其大狗机器人、Atlas 人形机器人等展现了具身智能在动态运动上的惊人水平。
    第三阶段(2021 年 - 至今)
  • 大语言模型(LLM)成为具身智能的 “大脑”,带来范式转移。LLM 的通用理解和推理能力,让机器人能理解复杂指令并分解为具体行动步骤。
  • 代表性突破包括谷歌 RT-2 模型实现 “视觉 - 语言 - 行动” 端到端控制、特斯拉 Optimus 依托自动驾驶技术打造通用人形机器人、Figure AI 与 OpenAI 合作整合对话推理能力,推动具身智能向通用化迈进。

面临的挑战

  • 核心挑战:
    “Sim-to-Real”的鸿沟: 在模拟器中训练好的模型,转移到现实世界时往往会“水土不服”,因为现实世界充满了模拟器无法穷尽的细节和意外。

  • 泛化能力: 如何让机器人在面对从未见过的物体和环境时,依然能做出正确的决策和行动,这是实现“通用”的关键。

  • 数据稀缺: 与互联网上取之不尽的文本和图片数据不同,高质量的机器人交互数据既昂贵又难以获取。

  • 安全性与伦理: 一个拥有强大物理能力的AI系统,如何确保其行为的安全、可控和符合人类伦理,是一个必须严肃对待的问题。

PID_control

  1. 首先学习 PID控制算法 掌握基础控制原理
  2. 了解不同控制参数对系统响应的影响
  3. 尝试调整PID参数以获得最佳控制效果
  4. 进阶学习高级控制算法(待更新)
  • PID控制算法是工业自动化中最常用的控制算法之一。
  • 什么是PID算法:PID通过计算当前输出与期望输出之间的误差,并根据该误差的比例(P)、积分(I)和微分(D)来调整控制输入,从而实现对系统的精确控制。

工作原理

PID控制器通过以下三个基本组件来计算控制输入:

  • 比例(P):【快速相应误差】直接对误差进行比例放大,可以迅速减少误差,但可能导致系统不稳定。
    • 举例:如果当前温度 20℃(误差 5℃),P 环节会让空调加大制热功率(比如开 50% 功率);如果误差减小到 1℃,功率就降低到 10%。
    • 特点:能快速缩小误差,但单独使用时,可能因为 “惯性” 导致系统在目标值附近波动(比如温度超过 25℃后,空调才开始减小功率),难以完全消除误差(称为 “稳态误差”)。
  • 积分(I):【消除累积误差】对误差进行积分,可以消除系统的静态误差,但可能导致系统响应变慢。根据误差的 “累积时间” 调整 —— 如果误差长期存在(比如温度一直差 1℃),积分环节会逐渐加大控制力度,直到误差彻底消除。
    • 举例:如果温度稳定在 24℃(误差 1℃),P 环节可能认为误差小而停止调整,但 I 环节会累计这个 1℃的误差(比如累计 10 分钟后),驱动空调略微加大功率,最终让温度达到 25℃。
    • 特点:解决 P 环节的 “稳态误差”,但响应较慢,单独使用可能导致系统超调(比如温度超过 25℃后还在加热)。
  • 微分(D):【预测误差变化趋势】对误差的导数进行预测,可以预测误差的变化趋势,从而提前进行调整,提高系统的响应速度和稳定性。
    • 举例:如果温度从 20℃快速升到 24℃(1 分钟内升了 4℃),D 环节会预测 “可能很快超过 25℃”,提前让空调减小制热功率,避免温度过高。
    • 作用:根据误差的 “变化速度” 调整 —— 如果误差突然变大(或变小),D 环节会提前输出反向控制信号,抑制系统的剧烈变化。

e(t)e(t)e(t) 是当前误差,即期望输出与实际输出之间的差值。

  • KpK_pKp 是比例系数。
  • KiK_iKi 是积分系数。
  • KdK_dKd 是微分系数。

实现步骤

  • 计算误差:计算当前输出与期望输出之间的误差。
    • 比例项:根据比例系数和误差计算比例项。
    • 积分项:对误差进行积分,并根据积分系数计算积分项。
    • 微分项:计算误差的导数,并根据微分系数计算微分项。
  • 计算控制输入:将比例项、积分项和微分项相加,得到控制输入。
  • 应用控制输入:将控制输入应用于被控系统。

整体公式:
u(t)=Kp⋅e(t)+Ki∫0te(τ)dτ+Kd⋅de(t)dtu(t) = K_p \cdot e(t) + K_i \int_{0}^{t} e(\tau) \, d\tau + K_d \cdot \frac{de(t)}{dt}u(t)=Kpe(t)+Ki0te(τ)dτ+Kddtde(t)

  • 一般情况下,我们是通过波形图的稳定以及响应来判定PID算法的效果的。
  • 一般情况下,我们可以先设置一个较大的比例系数,然后逐渐减小比例系数,直到系统的响应变得平滑。
  • 积分项的作用是消除系统的静态误差,但是积分项的引入会使系统的响应变慢。
  • 微分项的作用是预测误差的变化趋势,从而提前进行调整,提高系统的响应速度和稳定性。

一般来说,位置PID控制算法可以稳定大部分的控制,但是根据不同的应用情景,也有不同的优化算法

  1. 积分分离PID
    u(k)=KPe(k)+βKI∑i=0ke(i)+KD[e(k)−e(k−1)]u(k) = K_P e(k) + \beta K_I \sum_{i=0}^{k} e(i) + K_D \left[ e(k) - e(k - 1) \right]u(k)=KPe(k)+βKIi=0ke(i)+KD[e(k)e(k1)]
  2. 变速积分的PID控制
    u(k)=KPe(k)+KI∑i=0kαe(i)+KD[e(k)−e(k−1)]u(k) = K_P e(k) + K_I \sum_{i=0}^{k} \alpha e(i) + K_D \left[ e(k) - e(k - 1) \right]u(k)=KPe(k)+KIi=0kαe(i)+KD[e(k)e(k1)]
  3. 不完全微分PID控制
    uD(k)=KD(1−α)[e(k)−e(k−1)]+αuD(k−1)u_D (k) = K_D (1 - \alpha) \left[ e(k) - e(k - 1) \right] + \alpha u_D (k - 1)uD(k)=KD(1α)[e(k)e(k1)]+αuD(k1)
    示例代码:
class PID:# pid的初始化赋值def __init__(self, Kp, Ki, Kd, setpoint=0, sample_time=0.01):self.Kp = Kpself.Ki = Kiself.Kd = Kdself.setpoint = setpointself.sample_time = sample_timeself.prev_error = 0self.integral = 0# pid的cal_processdef update(self, measured_value):error = self.setpoint - measured_value # 计算误差self.integral += error * self.sample_time # 积分derivative = (error - self.prev_error) / self. sample_time # 微分output = self.Kp * error + self.Ki * self.integral + self.Kd * derivative # 计算控制输入self.prev_error = error # 保存误差return outputpid = PID(Kp=1.0, Ki=0.1, Kd=0.01, setpoint=100)
measured_value = 90  # 假设的当前测量值
control_input = pid.update(measured_value)print(f"Control Input: {control_input}")

c语言示例代码

void pid_init(pid_type_def *pid,uint8_t mode,float max_output,float max_iout,const float PID[3])
{pid->mode=mode;pid->max_output=max_output;pid->max_ioutput=max_iout;pid->Dbuf[0]=pid->Dbuf[1]=pid->Dbuf[2];pid->error[0]=pid->error[1]=pid->error[2]=pid->pout=pid->iout=pid->dout=0.0f;
}float PID_calc(pid_type_def *pid,float ref,float set,float PID[3])
{pid->kp=PID[0];pid->ki=PID[1];pid->kd=PID[2];pid->error[2]=pid->error[1];pid->error[1]=pid->error[0];pid->set=set;pid->cur=ref;pid->error[0]=set-ref;if (pid->mode ==PID_POSITION){pid->pout=pid->kp*pid->error[0];pid->iout+=pid->ki*pid->error[0];pid->Dbuf[2]=pid->Dbuf[1];pid->Dbuf[1]=pid->Dbuf[0];pid->Dbuf[0]=pid->error[0]-pid->error[1];if (pid->iout>pid->max_ioutput){pid->iout=pid->max_ioutput;}else if (pid->iout<-pid->max_ioutput){pid->iout=-pid->max_ioutput;}if (pid->iout*pid->error[0]<0){pid->iout=0;}if (pid->cur>0.707*pid->set || pid->cur<0.707*pid->set){pid->dout=pid->kd*pid->Dbuf[0];}else{pid->dout=0;}pid->output=pid->pout+pid->iout+pid->dout;if (pid->output>pid->max_output){pid->output=pid->max_output;}}else if (pid->mode==PID_DELTA){pid->pout=pid->kp*(pid->error[0]-pid->error[1]);pid->iout=pid->ki*pid->error[0];if (pid->iout>pid->max_ioutput){pid->iout=pid->max_ioutput;}		else if (pid->iout<-pid->max_ioutput){pid->iout=-pid->max_ioutput;}if (pid->iout*pid->error[0]<0){pid->iout=0;}pid->Dbuf[2]=pid->Dbuf[1];pid->Dbuf[1]=pid->Dbuf[0];pid->Dbuf[0]=pid->error[0]-2.0f*pid->error[1]+pid->error[2];if (pid->cur>0.707*pid->set || pid->cur<0.707*pid->set){pid->dout=pid->kd*pid->Dbuf[0];}else{pid->dout=0;}pid->output+=pid->pout+pid->iout+pid->dout;if (pid->output>pid->max_output){pid->output=pid->max_output;}}return pid->output;
}

举例分析 matlab-simulink

这是当P是10,I是0.001,D是0.01的时候matlab的simulink仿真图以及他的效果图,采样周期T是200.
在这里插入图片描述
说明存在稳态误差,这个时候要增加i,使得不存在稳态误差
在这里插入图片描述
增加I的数值以后,发现超调,准备增加D

在这里插入图片描述
最好的效果如下
在这里插入图片描述
优化以及其他情况的PID计算:

            参数整定找最佳, 从小到大顺序查。先是比例后积分, 最后再把微分加。曲线振荡很频繁, 比例度盘要放大。曲线漂浮绕大弯, 比例度盘往小扳。曲线偏离回复慢, 积分时间往下降。曲线波动周期长, 积分时间再加长。曲线振荡频率快, 先把微分降下来。动差大来波动慢, 微分时间应加长。理想曲线两个波, 前高后低四比一。一看二调多分析, 调节质量不会低。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app 配置华为离线推送流程

1、首先需要创建一个华为开发者账号&#xff0c;我这个是个人开发账号 申请开发者账号 2、去AppGallery Connect登陆我们刚刚创建好的账号&#xff0c;点击页面的APP进入到如下3 AppGallery Connect ‎‎‎‎‎ ‎3、在AppGallery Connect 网站中创建一个 Android应用、点击…

当下主流摄像头及其核心参数详解

&#x1f4d6; 推荐阅读&#xff1a;《Yocto项目实战教程:高效定制嵌入式Linux系统》 &#x1f3a5; 更多学习视频请关注 B 站&#xff1a;嵌入式Jerry 当下主流摄像头及其核心参数详解 一、摄像头发展概述 摄像头作为现代智能设备&#xff08;如手机、安防、车载、工业等&am…

下载了docker但是VirtualBox突然启动不了了

今天下docker后发现 eNSP 路由器&#xff0c;防火墙启动不了了去virtualbox检查的时候发现无法启动&#xff1a;报错&#xff1a;不能为虚拟电脑 AR_Base 打开一个新任务.Raw-mode is unavailable courtesy of Hyper-V. (VERR_SUPDRV_NO_RAW_MODE_HYPER_V_ROOT).返回代码: E_F…

C++11之lambda表达式与包装器

lambda与包装器lambda语法捕捉列表lambda的应用lambda的原理包装器functionbindlambda语法 lambda 表达式本质是⼀个匿名函数对象&#xff0c;跟普通函数不同的是他可以定义在函数内部。 lambda 表达式语法使⽤层⽽⾔没有类型&#xff0c;所以我们⼀般是⽤auto或者模板参数定义…

有痛呻吟!!!

XiTuJueJin:YYDS 分盘 有些平台吃相太难看&#xff0c;同样的文章&#xff0c;我还先选择现在这里发布&#xff0c;TMD. 莫名其妙将我的文章设置为仅VIP可见&#xff0c;还是今天才发现&#xff0c;之前只是将一两篇设置为仅VIP可见&#xff0c;今天突然发现这种标识的都自动…

2025年7-9月高含金量数学建模竞赛清单

2025年7-9月高含金量数学建模竞赛 ——“高教社杯”国赛 & “华为杯”研赛作为过来人&#xff0c;真心觉得参加数学建模比赛是我本科阶段做的最值的事之一。 它锻炼的那种把实际问题转化成模型求解的思维&#xff0c;对做研究、写论文甚至以后工作都帮助很大。我当时就是靠…

SpringBoot为什么使用new RuntimeException() 来获取调用栈?

为什么不直接使用 Thread.currentThread().getStackTrace()&#xff1f;这确实看起来有点“奇怪”或者“绕”&#xff0c;但其实这是 Java 中一种非常常见、巧妙且合法的技巧&#xff0c;用于在运行时动态获取当前代码的调用栈信息。Spring 选择用 new RuntimeException().getS…

小白成长之路-haproxy负载均衡

文章目录一、概述1、HAProxy简介2、HAProxy特点和优点&#xff1a;3、HAProxy保持会话的三种解决方法4、HAProxy的balance 8种负载均衡算法1&#xff09;RR&#xff08;Round Robin&#xff09;2&#xff09;LC&#xff08;Least Connections&#xff09;3&#xff09;SH&#…

Kafka 与 RocketMQ 消息确认机制对比分析

目录 生产者消息确认机制 Kafka 生产者 ACK 机制 RocketMQ 生产者确认机制 消费者消息确认机制 Kafka 消费者确认机制 RocketMQ 消费者确认机制 核心差异对比 选型建议 消息确认机制是分布式消息中间件的核心功能之一&#xff0c;它直接关系到消息传递的可靠性和系统性能…

C/C++---rdbuf()函数

在C中&#xff0c;rdbuf() 是I/O流库中的一个核心成员函数&#xff0c;主要用于访问和操作流对象的缓冲区。这个函数在底层数据处理、流重定向以及自定义流操作等场景中应用广泛。下面将从多个方面详细解析 rdbuf() 函数。 基本概念与函数原型 rdbuf() 是 std::basic_ios 类的成…

【LLM】从零到一构建一个小型LLM--MiniGPT

从零到一构建一个小型LLM (Small Language Model)暂时起名为MiniGPT。这个模型将专注于因果语言建模 (Causal Language Modeling)&#xff0c;这是许多现代LLM&#xff08;如GPT系列&#xff09;的核心预训练任务。模型设计&#xff1a; 我们设计的模型是一个仅包含解码器 (Dec…

网络安全威胁下的企业困境与破局技术实践

前言&#xff1a;网络安全威胁下的企业困境 在数字化转型的浪潮中&#xff0c;企业对信息技术的依赖程度日益加深&#xff0c;但随之而来的网络安全威胁也愈发严峻。据统计&#xff0c;全球每年因网络安全事件造成的经济损失高达数万亿美元&#xff0c;其中中小企业更是成为了网…

[RAG system] 信息检索器 | BM25 Vector | Pickle格式 | HybridRetriever重排序

第六章&#xff1a;信息检索器 在上一章中&#xff0c;我们成功完成了知识库摄入流程。这是巨大的进步~ 我们精心准备了文档"块"&#xff08;类似独立的索引卡&#xff09;&#xff0c;并将其存储在两套智能归档系统中&#xff1a;向量数据库&#xff08;用于基于含…

Android 高通平台修改音频参数效果文件-优化音频效果

Android 高通平台如何音频效果 修改音频参数效果文件-优化音频效果 按如下方式修改。 开发云 - 一站式云服务平台 diff --git a/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdbdata//MTP/workspaceFile.qwsp b/vendor/qcom/proprietary/mm-audio/audcal/family-b/acdb…

Install Docker Engine on UbuntuMySQL

Install Docker Engine on Ubuntu&&MySQL安装docker安装mysql客户端连接数据库我真气鼠了&#xff0c;今天得到一个血泪的教训&#xff0c;以后一定看官方文档&#xff01;&#xff01;&#xff01;学的课用的centos&#xff0c;指令全是yum&#xff0c;我这边不通用&a…

智能人体感应模块HC-SR501应用指南---使用esp32

人体热释电探头红外感应模块 人体感应开关HC-SR501蓝板新款 绿板-淘宝网 HC-SR501 人体红外感应电子模块传感器热释电探头感应开关RD-624-tmall.com天猫 模块信息 HC-SR501人体感应开关是一种基于红外线技术的自动控制模块&#xff0c;广泛应用于安防、智能家居和自动控制等领…

加速度传感器方向校准方法

保持平板平放在桌面上&#xff0c;将后置摄像头保持在平板的左上后方&#xff0c;或者右上后方&#xff0c;此为机器的正方向 1、以一台重力方向正常的机器做测试&#xff0c;通过DeviceInfoHw这个软件的加速度测试功能【Accelerometer Test】我们可以知道 X方向数据测试&#…

【OpenHarmonyOS应用开发】

OpenHarmonyOS应用开发1.OpenHarmonyOS应用开发环境安装2.初始化项目3.连接润和软件的开发板套件1.OpenHarmonyOS应用开发环境安装 进入HarmonyOS下载鸿蒙应用开发工具DevEco Studio 5.0.7.200版本。 双击打开下载好的可执行文件&#xff0c;点击下一步。 如果已经安装过&am…

50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | AutoTextEffect(自动打字机)

&#x1f4c5; 我们继续 50 个小项目挑战&#xff01;—— AutoTextEffect组件 仓库地址&#xff1a;https://github.com/SunACong/50-vue-projects 项目预览地址&#xff1a;https://50-vue-projects.vercel.app/。 利用 Vue 3 的 Composition API 和一些简单的 CSS 动画来构…

[RAG] LLM 交互层 | 适配器模式 | 文档解析器(`docling`库, CNN, OCR, OpenCV)

第二章&#xff1a;LLM 交互层 在上一章中&#xff0c;我们学习了作为"项目总控"的管道协调器&#xff0c;它负责协调 RAG 系统中各个功能模块。 其中最重要的协调对象之一&#xff0c;便是负责与大型语言模型&#xff08;LLM&#xff09;进行智能交互的LLM 交互层…