简单直白讲解PID

本文只简单讲解了 PID 的原理,具体实现项目会在近期发出

目录

前言

一、PID是什么?

(1)含义

(2) 目标值,测量值

(3)数学公式

二、比例(P算法)

(1)数学公式

(2)含义

(3)示例

三、微分(D算法)

(1)数学公式

(2)含义

(3)示例

四、积分(I算法)

(1)数学公式

(2)含义

(3)示例

总结


 


前言

PID是一种常用的控制算法。可以控制目标物体保持在某一状态。例如用于平衡车和无人机,使其保持在平衡状态。或者用于温控系统,使其保持在某一温度。


一、PID是什么?

(1)含义

PID的全称为比例(proportion)-积分(integral)-微分(derivative)控制器。是由比例算法、积分算法、微分算法三部分组成。

(2) 目标值,测量值

在 pid 算法中,期望目标物体所保持的值为目标值,实际反馈得到的值为测量值,通过不断计算使测量值趋近目标值。

(3)数学公式

其中的 K 是根据现场和项目需求自行设置的比例系数,e 则是测量值与目标值的误差,e旁边的小k是计算的第几次误差的意思。

二、比例(P算法)

(1)数学公式

(2)含义

当测量值与目标值存在误差时,比例会施加一个力使测量值趋近于目标值。这个力的大小与比例系数和误差有关。在比例系数不变的情况下,当误差越小时,施加力就越小,反之,误差越大则力越大。

(3)示例

拿一辆此时时速20km/h的小车举例,若想将车速保持在80km/h,则需要立即提速,随着误差(车速与80km/h的差值)的减小,P算法的输出也会逐渐变小。

三、微分(D算法)

(1)数学公式

(2)含义

当测量值逐渐接近目标值时,微分会给予一股阻力,防止测量值过冲。微分的阻力,由比例系数和本次误差与上一次误差的差值有关(本次误差 — 上次误差)有关。当误差的差值逐渐变小时,说明加速度在减小,比例施加的力逐渐平稳下降,那么微分的阻力也会下降。

(3)示例

拿一辆此时时速20km/h的小车举例,若想将车速保持在80km/h,提速之后很有可能会超过80km/h,造成数值过冲,但如果在 P算法 的基础上增加D算法,那么在小车接近 80km/h 时,会受到微分的阻力,则不会造成数值过冲,而是平稳到达80km/h。

四、积分(I算法)

(1)数学公式

(2)含义

当误差接近于0的时候,P算法的输出会很小,导致出现误差无法被消除的现象。此时需要用到 I 算法,I 算法的计算为比例系数 * 误差和,误差和趋近于0时,I 算法会使有效值控制得更加精准,接近目标值。

(3)示例

拿一辆小车举例,此时若想将车速精准保持在80km/h,没有I算法是很难实现的,因为当误差接近于0的时候,P算法的输出会很小,导致出现误差无法被消除的现象。但 I 算法的控制会使车速无限趋近于80km/h。


总结

大多数情况下只会用到 P算法和 D算法的组合,只有在追求特高精度,才会用PID三种算法的组合。

### 关于FaceFusion简易教程 对于希望了解并使用FaceFusion工具的用户而言,简易教程应当提供清晰的操作指南以及必要的背景信息。虽然未直接提及FaceFusion的具体实现细节[^1],可以借鉴其他开源项目文档结构来构建此教程。 #### 准备工作 确保安装了Python环境,因为大多数现代面部融合软件依赖于此编程语言。通常情况下,还需要安装特定版本的库文件,比如`face_recognition`, `opencv-python`等。这些可以通过pip命令轻松完成: ```bash pip install face_recognition opencv-python numpy ``` #### 创建基础工程 创建一个新的CMakeLists.txt文件作为项目的起点,尽管这不是严格意义上的FaceFusion配置,但对于管理复杂度较高的项目来说是一个良好的实践方式: ```cmake cmake_minimum_required(VERSION 3.10) project(FaceFusion) add_executable(${PROJECT_NAME} main.cpp) ``` 请注意上述例子假设读者熟悉C++开发;然而,实际操作中可能更多涉及Python脚本而非编译型语言。 #### 加载图像与处理 编写简单的Python程序加载两张图片——源图和目标图,并执行基本预处理步骤。这里展示了一个简化版框架: ```python import cv2 from facenet_pytorch import MTCNN, InceptionResnetV1 def load_image(file_path): img = cv2.imread(file_path) return cv2.cvtColor(img, cv2.COLOR_BGR2RGB) source_img = load_image('path_to_source_image.jpg') target_img = load_image('path_to_target_image.jpg') mtcnn = MTCNN(image_size=244, margin=0, min_face_size=20, thresholds=[0.6, 0.7, 0.7], factor=0.709, post_process=True) # 进一步处理... ``` 这段代码片段展示了如何利用facenet_pytorch库中的MTCNN模型检测人脸位置,这是后续进行脸部特征提取的基础。 #### 实现核心功能 具体到FaceFusion的核心算法部分,则涉及到更复杂的计算机视觉技术,如深度学习网络的应用。这部分内容超出了当前描述范围,建议查阅专门针对该主题的研究论文或官方API文档获取更多信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值