当前位置: 首页 > news >正文

TASK01【datawhale组队学习】地瓜机器人具身智能概述

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.dtcms.com/a/284563.html

相关文章:

  • Jmeter系列(八)-定时器(待更新)
  • 电缆安全双保险:不止防盗,更能防触电的塔能智慧照明守护方案
  • 【推荐100个unity插件】使用C#或者unity实现爬虫爬取静态网页数据——Html Agility Pack (HAP)库和XPath 语法的使用
  • 腾讯位置商业授权鸿蒙地图SDK
  • 【中等】题解力扣22:括号生成
  • 【专题十二】栈
  • 调用接口报错,使用postman调用就没问题如何解决
  • Redis 生产实战 7×24:容量规划、性能调优、故障演练与成本治理 40 条军规
  • Apollo10.0学习——control模块(2)之纵向控制器参数说明
  • Redisson布隆过滤器原理以及解决Redis缓存穿透方案
  • 单片机(STM32-时钟系统)
  • js是实现记住密码自动填充功能
  • PyCharm 高效入门指南:从安装到进阶,解锁 Python 开发全流程
  • EXCEL VBA合并当前工作簿的所有工作表sheet
  • 切比雪夫不等式的理解以及推导【超详细笔记】
  • C语言---动态内存管理
  • 李宏毅《生成式人工智能导论》 | 第15讲-第18讲:生成的策略-影像有关的生成式AI
  • Google(谷歌)搜索引擎蜘蛛IP地址段
  • ubuntu--curl
  • 《Java Web 核心:Servlet、会话与过滤器笔记》
  • AndroidStudio环境搭建
  • vue svg实现一个环形进度条组件
  • 石子入水波纹效果:顶点扰动着色器实现
  • 【44】MFC入门到精通——MFC 通过Button按钮添加控件变量实现:按下 按钮变色 (比如开关 打开关闭状态) MFC更改button控颜色
  • Git简介与特点:从Linux到分布式版本控制的革命
  • 找不到或无法加载主类 org.gradle.wrapper.GradleWrapperMain
  • Linux Swap区深度解析:为何禁用?何时需要?
  • 【Java EE初阶 --- 网络原理】网络编程
  • Vue3 + WebSocket
  • 基于现代R语言【Tidyverse、Tidymodel】的机器学习方法