问题标签 [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.

0 投票
1 回答
964 浏览

pid - 缩放 PID(比例积分微分)输出

我已经使用公式实现了一个 PID 函数,

我应该怎么做才能将输出保持在一定范围内?说 0-255 如果我忽略不介于 0 到 255 之间的任何值,它会产生不稳定的行为吗?

0 投票
4 回答
6256 浏览

c# - 导致极端不稳定的 PID 控制器积分项

我有一个在机器人上运行的 PID 控制器,旨在使机器人转向指南针方向。PID 校正以 20Hz 的速率重新计算/应用。

尽管 PID 控制器在 PD 模式下运行良好(即积分项为零),但即使是最少量的积分也会迫使输出不稳定,从而将转向执行器推到左侧或右侧极端。

代码:

有谁知道为什么会发生这种情况或如何解决?

0 投票
3 回答
2536 浏览

c# - 在导航应用程序中调整指南针环绕

我有一个应用程序,我在指南针方向上引导车辆,并且当车辆从 360 度穿越到 0 度时遇到问题。

在这种情况下,控制回路中没有智能来计算转弯以跟随航向的最近方式。

例如,如果指示车辆跟随 360 度的航向,它将不可避免地向以太侧漂移几度。如果它漂移到 0+ 度,控制回路将发疯并尝试将车辆一直转向以使其再次达到 360 度。

有没有优雅的方法来处理这个问题?

导航函数的编写方式,我使用外部 PID 控制器类,我计算标题如下:

谢谢!

0 投票
1 回答
930 浏览

wolfram-mathematica - 在 Mathematica 中定义一个线性时间延迟系统并绘制它的 Bode 和 Nyquist 图

我有一个时间延迟系统的特征方程,我无法在MathematicaStateSpaceModel中使用或TransferFunctionModel命令定义它;因为这些命令只适用于线性系统,没有延迟。

我的目的是在Mathematica 8.0.1中定义一个延时系统,并为这样的系统绘制波特奈奎斯特

0 投票
1 回答
1116 浏览

java - 使用 PID 控制器管理程序中的资源

我想知道是否有使用 PID 控制器类型机制来管理计算资源的先例(请参阅http://en.wikipedia.org/wiki/PID_controller)。

我所说的计算资源是指:备用线程、备用进程、队列长度等。

例如,在 apache.conf 中,您可以指定备用服务器的数量、最小服务器数量等。

我的问题是你如何控制新服务器的产生或资源池的收缩。

如果您的负载增加超过某个级别,那么同样可以应用于在 Amazon Grid 上看到生成节点。

作为对这个问题的回答,我感兴趣的是:

  1. 如果有一个 Yes, No, Maybe 回答这个问题

  2. 如果有在开源世界中使用它的可访问示例

  3. 如果有为此目的在java、python等中实现PID控制的库。

谢谢。

0 投票
2 回答
3137 浏览

c - 将电路转换为 C

有没有人知道如何将前馈运算放大器 PID 循环转换为 C 代码?我正在尝试进行这样的转换,老实说,不知道从哪里开始。我可以通过 ADC 获得所有输入值、电压、电流等,但编码前馈 PID 对我来说有点新鲜。有任何想法吗?

0 投票
6 回答
17020 浏览

controller - 我不明白 PID 控制器的积分部分

我不了解 PID 控制器的组成部分。让我们假设这个来自维基百科的伪代码:

积分在开始时设置为零。然后在循环中,它会随着时间的推移整合错误。当我对测量值或设定点进行(正)更改时,误差将变为正,并且积分将随着时间的推移(从一开始)“吃掉”这些值。但是我不明白的是,当误差稳定回零时,积分部分仍然会有一些值(随着时间的推移积分误差)并且仍然会有助于控制器的输出值,但它不应该。

有人可以解释一下吗?

0 投票
2 回答
3837 浏览

matlab - 创建 MIMO(多输入多输出)传递函数系统,无需硬编码输入和输出的数量

简介
作为更大系统的一部分,我正在尝试创建一个多输入多输出传递函数,该函数仅将输入链接到前导对角线上的输出*。即它在输入 1 和输出 1、输入 2 和输出 2 等之间具有非零传递函数。

*您是否真的认为 MIMO 系统是一个公平的评论,我希望它采用这种格式,因为它链接到一个真正是 MIMO 的更大系统。

硬编码
我可以通过连接传递函数来实现这一点

效果很好,但是(a)对输入/输出的数量进行硬编码,并且(b)您拥有的输入和输出越多,就会变得越来越可怕。

Diag 函数
这个问题对于 diag 函数来说似乎是完美的,但是 diag 似乎没有为类型 'tf' 定义

手动矩阵操作
我也尝试手动操作矩阵(并不是我真的希望它能够工作)

tf 的直接到 MIMO 格式
tf 还有一种格式,其中所有的分子和分母都分别表示,直接创建了一个 MIMO 系统。我试图以非硬编码格式使用它

几乎起作用了,不幸的是,分子和分母在非对角线上是空的,而不是 0;导致错误

问题
是否可以在不“硬编码”输入和输出数量的情况下从传递函数创建 MIMO 系统

0 投票
1 回答
765 浏览

matlab - '在调用期间未分配输出参数“arraydata”(可能还有其他参数)'使用 sysic 时收到错误

当使用 sysic 命令创建互连系统时,如下代码所示;

其中 scaledPlant、WControl 和 WError 都是 4 输入 4 输出模型

我收到以下错误

是什么导致了这个错误?

0 投票
3 回答
4308 浏览

robotics - 四轴飞行器 PID 控制器

语境

我的任务是为微型四轴飞行器设计和构建速度 PID 控制器,而不是在室内飞行。四轴飞行器所在的房间配备了基于摄像头的高精度室内跟踪系统,可以为四轴飞行器提供速度和位置数据。生成的系统应该能够接受每个轴 (x, y, z) 的目标速度并以该速度驱动四轴飞行器。

四轴飞行器的控制输入是滚动/俯仰/偏航角和高度的推力百分比。

我的想法是为每个轴实现一个 PID 控制器,其中 SP 是该方向上的所需速度,测量值是跟踪系统提供的速度,输出值是滚动/俯仰/偏航角和推力百分比。

不幸的是,因为这是我第一次接触控制理论,我不确定我是否朝着正确的方向前进。

问题

  • 我了解基本的 PID 控制器原理,但我仍然不清楚它如何通过仅对误差求和并乘以常数将速度(米/秒)转换为滚动/俯仰/偏航(弧度)?是的,速度和横滚/俯仰成正比,这是否意味着乘以正确的常数会产生正确的结果?

  • 对于垂直速度控制器的情况,如果速度设置为 0,则四轴飞行器实际上应该只是保持其高度而不上升或下降。这如何与 PID 控制器集成,使得当误差实际上为 0 时推力值不为 0(应该保持悬停,而不是下降)?我应该在输出中添加一个常数项吗?

  • 系统实施后,调整 PID 增益参数的好方法是什么?手动试错?

  • 系统开发的下一步是附加一层位置 PID 控制器,它将所需位置 (x,y,z) 作为设定点,测量位置由室内跟踪系统提供,输出为 x/y /z 速度。这是一个好方法吗?分离这些 PID 控制层的原因是该项目是促进可重用性的更大框架的一部分。仅使用单层 PID 控制器会更好吗?直接将位置坐标作为设定点并输出横滚/俯仰/偏航/推力值?