问题标签 [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.
controls - 带压力超控的 PID 泵控制器 - 如何处理负增益?
我有一个自定义 HMI 设置,带有一个流量/压力传感器输入和一个 4-20mA 输出到一个小泵。我目前正在尝试在流量达到设定点(大约为 1500 mL/min)的情况下实施超控控制,同时还限制管道中的压力(最大约 15 psi)。
问题是,我只能将泵速设置为 4(0 rpm)到 20(~2000 rpm)mA,而“负”PID 回路输出基本上只是“停止泵”。在试图限制压力的情况下,当需要采取行动时,PID 误差将始终为负。
我已经尝试过使用带有结束限制的覆盖过程输出切换,但这似乎只是到目前为止。
此外,任何获得某种压力输出比例比的好方法,因为压力的“最大值”或多或少是无限的。
python - 卡尔曼滤波器无法纠正不良加速度测量。这是卡尔曼滤波器的预期行为吗?
我正在尝试使用 Python 编写卡尔曼滤波器,最终用 C++ 编写一个卡尔曼滤波器,并在 Arduino 中使用它来进行气压和惯性高度估计(一维位置)。
现在,我正在使用线性函数(速度 = 1)“模拟”真实位置和测量位置,同时在模拟位置测量中插入人工噪声。
虽然卡尔曼仅使用测量位置返回明显良好的结果,但它无法纠正错误的加速度测量值(例如恒定的 1.0 测量加速度输入)。
位置向加速度方向倾斜,并且滤波后的加速度不会通过位置测量得到校正。
这是卡尔曼滤波器的预期行为,还是我应该如何修改我的代码和/或滤波器以使卡尔曼对这些行为正确?
主要.py:
卡尔曼.py:
scilab - Scilab 中 MATLAB 的 ss() 状态空间模型函数
我正在尝试遵循本教程,已实现
返回
这与 MATLAB 产生的不同:
现在我的问题是:
- 我是否
tf()
正确实现了最小功能,或者有更完整/规范的版本可用/可能? - 是
tf2ss()
MATLAB 的等价物ss()
还是有另一个可用的内置函数? - 如果没有
ss()
可用的等效项,那么提供与上述 MATLAB 教程相同的结果的最小实现是什么?
matlab - 机电系统的模型预测控制 (MPC)
所以我想为我的跷跷板系统创建一个MPC控制器。所有“繁重的工作”(获取运动方程、状态空间表示等)都已完成,所以我开始在 MATLAB 中进行编码。以下是:
基本上,当我运行它时,模拟开始,当我得到一个“NaN”时它很快就失败了。只有当我把我的初始值都设为 0 时,我才能真正得到一些东西。请记住,我需要在我的系统中设置一些系统中普遍存在的约束(最大电机扭矩,推车可以在跷跷板上移动多远......)。这就是我在连续时间内使用状态空间表示时的全部情况,当我尝试通过“c2d”命令使用离散时间并据此更改其余代码时,模拟甚至无法正常启动。在这种特定情况下,我真的不知道该怎么做。是否有其他方法可以为该系统创建 MPC 调节器?注意:我将 YALMIP 用于 MPC 的优化部分。
math - 加速项是如何在 PID 控制器中实现的?
我知道基本 PID 是如何工作的,但是我需要更高级的东西来解决更复杂的运动。我已经看到通常会在 PID 中添加一个加速项,但无法在网上找到任何可以向我介绍其工作原理(以及所涉及的数学)的基本理论的内容。我可以猜测它涉及运动学方程,但宁愿在重新发明轮子之前先看看已经开发的东西(而且它可能不会是一个很棒的轮子)。有人可以向我解释一下,或者给我一些文件吗?