问题标签 [pid-controller]

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 投票
0 回答
3402 浏览

algorithm - 四轴飞行器稳定性pid代码

我正在使用加速度计和陀螺仪构建四轴飞行器。表格如下所示:

图像

我的音高由前后电机控制。我的滚动由左右电机控制。

我使用了 PID和伺服库。

这是我的音高稳定性代码:

如您所见,我还没有真正的算法来稳定四边形。我将不胜感激。我已经尝试了一些样品。它并不顺利。即使不使用我的PID库的帮助也将不胜感激。

0 投票
1 回答
218 浏览

arrays - 使用“fminunc”最小化数组返回函数

我正在使用 MATLAB 构建一个自动调整三个 PID 控制器增益的代码。我的想法是最小化系统的误差(期望状态和获得状态之间的差异),为此,我编写了一个函数,该函数接受 PID 增益作为输入参数并返回计算出的误差,即:

因为我有三个设定点(输入命令),所以输出的维度errors_vector是 3*N,其中 N 是我拥有的时间样本数(在我的例子中是 1000)。这就是我想要最小化的功能,为此,我尝试使用fminunc命令,即:

但是,当我运行最后一段代码时,出现此错误:

这显然是因为这errors_vector是一个 3*1000 数组而不是标量。

我的问题是,从编程的角度来看,有没有一种方法可以使fminunc返回数组的函数最小化?

另一方面,从控制理论的角度来看,是否有另一种方法可以自动优化 PID 增益?

我希望我说得够清楚。

谢谢

0 投票
1 回答
315 浏览

c# - 将入站消息的等待延迟限制为每秒消息数

我正在尝试将循环(正在发送消息)限制为每秒特定数量的消息。_throttle是每秒的消息数。

我的初始算法如下所示,但延迟并不平滑。
我可以做哪些改进来消除相当颠簸的延迟和消息突发。

我玩过滴答声和最大间隔,但入站计数如此之大,难以弥补。在我的实现中关闭油门可以达到的最大速率约为 15000/秒。我正在测试每秒 300 到 1000 之间的速率,所以我试图减慢它的速度。

使用它的代码每次迭代都会调用它。

0 投票
0 回答
597 浏览

matlab - simulink中PID自整定算法

Simulink中PID模块的自整定采用什么算法?是 Zeigler-Nicholson 或 Cohen-Coon 调音方法还是其他方法?

0 投票
1 回答
1712 浏览

algorithm - 在线跟随机器人中实现PID算法

我正在做一个带有 NXT 头脑风暴的小项目。我的目的是制造一个机器人,它可以非常流畅地沿着一条线走,并且尽可能快。因此,经过小小的研究,我发现了 PID 算法,我能够理解该算法并将其实现到 NXC 代码中。机器人刚刚根据算法做了所有正确的事情,但是当线路中断(间隙)时,机器人会失去线路并且无法回到线路。问题是,当差距达到 9 厘米时,他可以回来,但在 10 厘米时他只是失去了线。我正在使用一个光传感器。有什么方法可以调整 PID 代码来解决这个问题?

我的代码:

0 投票
0 回答
447 浏览

matlab - MATLAB 中 MIMO 系统的 PID 增益优化

我正在编写代码以在 MATLAB 中使用最小二乘法优化 MIMO 系统的 PID 增益。我正在为其设计 PID 控制器的工厂有 3 个输入和 3 个输出,对于每个输入,我正在设计一个 PID 控制器。整个系统如下所示:

我的问题是优化逻辑总是返回非常接近初始值的优化增益,显然它总是落在局部最小值。

如何将 9 增益全局最小化?

这是状态空间模型文件:

这是我指定要最小化的函数和成本函数的代码:

最后是优化函数:

当我运行优化代码时,我在工作区中得到了这个:

0 投票
1 回答
1055 浏览

arduino - 使用 Arduino 平衡四轴飞行器

我正在做一个关于具有自主控制的自平衡四轴飞行器的项目。我正在使用 Arduino Mega 2560 和 MPU6050。我在没有 DMP 帮助的情况下从 MPU6050 获得了横滚角和俯仰角,并应用了复杂的滤波器来忽略振动引起的噪声。

在 Arduino 中断的帮助下,还配置并能够使用 Flysky 发射器和接收器运行 BLDC 电机。现在为了平衡,我只关注一个轴(即滚动)。我还构建了一个平衡支架,用于电机自由移动滚动轴。

对于控制部分,我正在实现 PID 算法。我尝试只使用 kp 值,以便以某种方式平衡,然后继续使用 ki 和 kd 术语。但不幸的是,对于 Kp 本身,四轴飞行器正在剧烈振荡,根本没有稳定下来。

我的一些疑问是:

  • 一个 PID 回路是否足够,或者我们必须添加另一个?
  • 除了反复试验,我可以实施什么类型的调整方法来找到 kp、ki、kd?
  • 我将我的 ESC 编程为 1000 到 2000 微秒。我的 PID 输入角度将在 +/- 180 范围内。我是否可以直接将 PID 输出限制设置为范围 -1000 到 1000 或 -180 到 180 或任何其他值?

代码可以从 URL https://github.com/antonkewin/quadcopter/blob/master/quadpid.ino读取

0 投票
2 回答
5649 浏览

arduino - Arduino PID 直流电机位置控制

我正在做一个控制工程项目,为自动天线跟踪系统实施 PID 电机位置控制。该系统包含一个直流电机、绝对编码器和一个电机驱动器。

一切都按预期工作,但只有一件事。电机无法在接近 0 度(350 - 359、0 - 10 度)的设定值处停止。使用的代码:

当设定值介于 10 - 350 之间时,系统运行良好。但是当它不是时,电机永远不会停止旋转。

我知道这个问题是由于一点位置超调导致编码器读取一个非常大的错误。

例如,如果设定点为 0 度,则电机旋转以达到它。电机旋转在其“现在”位置接近 0 度时减慢,但系统并非无过冲。因此,即使 1 度的超调也会导致误差值为 -359(设定点 - 现在位置),并且电机再次旋转以达到所需位置。

需要帮助如何克服这个问题。抱歉英语不好。

0 投票
1 回答
408 浏览

pid-controller - PID 调节方法可实现高稳定性和最小到无超调

我正在尝试使用 PID 来控制温度,但我有两个问题:系统无法振荡 +/- 0.005C;我几乎不需要超调。我正在测试/学习尝试使用灯泡和 pt-100 类来控制温度,因为我要控制的系统有点慢,我想了解一种方法。目前,我正在使用 Ziegler-Nichols 方法,但它有一些超调。

0 投票
1 回答
49 浏览

robotics - 通过慢速总线控制电机/位置

我似乎把自己编入了一个角落,遇到了以下问题:我试图通过基于 RS485 的慢速总线连接来控制机器人上的电机。不幸的是,我无法访问电机上的固件,所以我坚持使用当前设置。

最大的问题是我只能控制电机的目标速度。虽然我可以通过内置编码器检索其绝对位置,但电机本身的固件中没有内置定位功能。

第二个问题是总线连接真的很慢,有点尴尬的协议需要 25 毫秒才能完成一个完整的周期——通过速度调整来控制位置是否可行?

我尝试了一种简单的方法,即估计前方 25 毫秒的位置,减去当前位置并除以 25 毫秒来计算下一个所需位置所需的速度。然而,当瞄准一个固定位置时,这在某些速度下会严重振荡,我认为这是由于高循环时间会产生大量超调。

也许 PID 控制器可以提供帮助,但我不确定目标值是多少——到目前为止我使用的每个 PID 都使用一个固定目标。一个完全移动的目标(即位置)很难想象,至少对我来说是这样。

处理这种情况的通常方法是什么?也许结合天真的方法并仅为额外的偏移项添加 PID 控制?还是我需要购买不同的电机?