问题标签 [control-theory]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
pid - 缩放 PID(比例积分微分)输出
我已经使用公式实现了一个 PID 函数,
我应该怎么做才能将输出保持在一定范围内?说 0-255 如果我忽略不介于 0 到 255 之间的任何值,它会产生不稳定的行为吗?
c# - 导致极端不稳定的 PID 控制器积分项
我有一个在机器人上运行的 PID 控制器,旨在使机器人转向指南针方向。PID 校正以 20Hz 的速率重新计算/应用。
尽管 PID 控制器在 PD 模式下运行良好(即积分项为零),但即使是最少量的积分也会迫使输出不稳定,从而将转向执行器推到左侧或右侧极端。
代码:
有谁知道为什么会发生这种情况或如何解决?
c# - 在导航应用程序中调整指南针环绕
我有一个应用程序,我在指南针方向上引导车辆,并且当车辆从 360 度穿越到 0 度时遇到问题。
在这种情况下,控制回路中没有智能来计算转弯以跟随航向的最近方式。
例如,如果指示车辆跟随 360 度的航向,它将不可避免地向以太侧漂移几度。如果它漂移到 0+ 度,控制回路将发疯并尝试将车辆一直转向以使其再次达到 360 度。
有没有优雅的方法来处理这个问题?
导航函数的编写方式,我使用外部 PID 控制器类,我计算标题如下:
谢谢!
java - 使用 PID 控制器管理程序中的资源
我想知道是否有使用 PID 控制器类型机制来管理计算资源的先例(请参阅http://en.wikipedia.org/wiki/PID_controller)。
我所说的计算资源是指:备用线程、备用进程、队列长度等。
例如,在 apache.conf 中,您可以指定备用服务器的数量、最小服务器数量等。
我的问题是你如何控制新服务器的产生或资源池的收缩。
如果您的负载增加超过某个级别,那么同样可以应用于在 Amazon Grid 上看到生成节点。
作为对这个问题的回答,我感兴趣的是:
如果有一个 Yes, No, Maybe 回答这个问题
如果有在开源世界中使用它的可访问示例
如果有为此目的在java、python等中实现PID控制的库。
谢谢。
c - 将电路转换为 C
有没有人知道如何将前馈运算放大器 PID 循环转换为 C 代码?我正在尝试进行这样的转换,老实说,不知道从哪里开始。我可以通过 ADC 获得所有输入值、电压、电流等,但编码前馈 PID 对我来说有点新鲜。有任何想法吗?
controller - 我不明白 PID 控制器的积分部分
我不了解 PID 控制器的组成部分。让我们假设这个来自维基百科的伪代码:
积分在开始时设置为零。然后在循环中,它会随着时间的推移整合错误。当我对测量值或设定点进行(正)更改时,误差将变为正,并且积分将随着时间的推移(从一开始)“吃掉”这些值。但是我不明白的是,当误差稳定回零时,积分部分仍然会有一些值(随着时间的推移积分误差)并且仍然会有助于控制器的输出值,但它不应该。
有人可以解释一下吗?
matlab - 创建 MIMO(多输入多输出)传递函数系统,无需硬编码输入和输出的数量
简介
作为更大系统的一部分,我正在尝试创建一个多输入多输出传递函数,该函数仅将输入链接到前导对角线上的输出*。即它在输入 1 和输出 1、输入 2 和输出 2 等之间具有非零传递函数。
*您是否真的认为 MIMO 系统是一个公平的评论,我希望它采用这种格式,因为它链接到一个真正是 MIMO 的更大系统。
硬编码
我可以通过连接传递函数来实现这一点
效果很好,但是(a)对输入/输出的数量进行硬编码,并且(b)您拥有的输入和输出越多,就会变得越来越可怕。
Diag 函数
这个问题对于 diag 函数来说似乎是完美的,但是 diag 似乎没有为类型 'tf' 定义
手动矩阵操作
我也尝试手动操作矩阵(并不是我真的希望它能够工作)
tf 的直接到 MIMO 格式
tf 还有一种格式,其中所有的分子和分母都分别表示,直接创建了一个 MIMO 系统。我试图以非硬编码格式使用它
这几乎起作用了,不幸的是,分子和分母在非对角线上是空的,而不是 0;导致错误
问题
是否可以在不“硬编码”输入和输出数量的情况下从传递函数创建 MIMO 系统
matlab - '在调用期间未分配输出参数“arraydata”(可能还有其他参数)'使用 sysic 时收到错误
当使用 sysic 命令创建互连系统时,如下代码所示;
其中 scaledPlant、WControl 和 WError 都是 4 输入 4 输出模型
我收到以下错误
是什么导致了这个错误?
robotics - 四轴飞行器 PID 控制器
语境
我的任务是为微型四轴飞行器设计和构建速度 PID 控制器,而不是在室内飞行。四轴飞行器所在的房间配备了基于摄像头的高精度室内跟踪系统,可以为四轴飞行器提供速度和位置数据。生成的系统应该能够接受每个轴 (x, y, z) 的目标速度并以该速度驱动四轴飞行器。
四轴飞行器的控制输入是滚动/俯仰/偏航角和高度的推力百分比。
我的想法是为每个轴实现一个 PID 控制器,其中 SP 是该方向上的所需速度,测量值是跟踪系统提供的速度,输出值是滚动/俯仰/偏航角和推力百分比。
不幸的是,因为这是我第一次接触控制理论,我不确定我是否朝着正确的方向前进。
问题
我了解基本的 PID 控制器原理,但我仍然不清楚它如何通过仅对误差求和并乘以常数将速度(米/秒)转换为滚动/俯仰/偏航(弧度)?是的,速度和横滚/俯仰成正比,这是否意味着乘以正确的常数会产生正确的结果?
对于垂直速度控制器的情况,如果速度设置为 0,则四轴飞行器实际上应该只是保持其高度而不上升或下降。这如何与 PID 控制器集成,使得当误差实际上为 0 时推力值不为 0(应该保持悬停,而不是下降)?我应该在输出中添加一个常数项吗?
系统实施后,调整 PID 增益参数的好方法是什么?手动试错?
系统开发的下一步是附加一层位置 PID 控制器,它将所需位置 (x,y,z) 作为设定点,测量位置由室内跟踪系统提供,输出为 x/y /z 速度。这是一个好方法吗?分离这些 PID 控制层的原因是该项目是促进可重用性的更大框架的一部分。仅使用单层 PID 控制器会更好吗?直接将位置坐标作为设定点并输出横滚/俯仰/偏航/推力值?