问题标签 [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.
robotics - 用于距离的四轴飞行器 PID 控制器
我正在尝试使用 PID 控制器在水平行进时将四轴飞行器停在特定位置,但是目前它根据最大速度过冲/下冲。我曾尝试手动调整 P、I 和 D 增益,但效果有限。本质上,速度需要在飞行路径的尽头从 maxSpeed 变为 0。
我运行一个每 0.1 秒执行一次的循环。四轴飞行器的俯仰输入以 m/s 为单位,我在每次迭代时重新计算到目标的距离。
一些伪代码
有没有办法可靠地将这个 PID 控制器调整到适用于不同最大速度的系统,和/或我需要考虑其他因素?
c++ - PID 控制:在下一个循环之前添加延迟是个好主意吗?
我正在用 C++ 实现 PID 控制,以使差动驱动机器人转动准确的度数,但我遇到了很多问题。
由于快速循环运行时间而提前退出控制循环
如果机器人测量其误差小于 0.5 度,它会退出控制循环并认为转弯“完成”(0.5 是我可能会在某个时候更改的随机值)。看起来控制回路运行得如此之快,以至于机器人可以以非常高的速度转动,转过设定点,然后退出回路/切断电机功率,因为它是在设定点短时间。我知道这是 PID 控制的全部目的,即准确地达到设定值而不会超调,但这个问题使得调整 PID 常数变得非常困难。例如,我试图找到一个 kp 的值,使得有稳定的振荡,但从来没有任何振荡,因为机器人认为它一旦通过设定点就“完成”了。为了解决这个问题,我实现了一个系统,机器人在退出之前必须处于设定点一段时间,这很有效,允许发生振荡,但提前退出循环的问题似乎很不寻常问题,我的解决方案可能不正确。
由于运行时间快,D 项没有影响
一旦我让机器人仅使用 P 以受控方式振荡,我就尝试添加 D 以防止过冲。但是,这在大多数情况下都没有效果,因为控制循环运行得如此之快,以至于 20 个循环中有 19 个循环,误差变化率为 0:机器人没有移动或移动不足到那个时候去衡量。我打印了每个循环的误差变化和导数项来确认这一点,我可以看到在取一个合理的值之前,它们在大约 20 个循环周期内都为 0,然后在另外 20 个循环内回到 0。就像我说的那样,我认为这是因为循环周期太快了,以至于机器人实际上没有足够的移动来产生任何明显的错误变化。
注意:我还对静态摩擦系数使用了一个小的前馈,我称这个前馈为“f”
我应该添加延迟吗?
我意识到我认为这两个问题的根源是循环运行得非常快,所以我想到的是在循环结束时添加一个等待语句。但是,故意减慢循环似乎是一个整体糟糕的解决方案。这是一个好主意吗?
matlab - 如何用正弦波输入模拟系统输出?
我希望模拟我拥有的某个齿轮系统的输出。齿轮系统的外观对这个问题并不特别重要,我设法从机械系统中获得了所需的微分方程。这是我的代码
这应该可以生成一个图表,该图表显示了 Heaviside/step 输入的位置、我的输出。我的问题是,我将如何为正弦波输入执行此操作。我想我应该有sin(w*t)
而不是(t>=0)
,其中 w 是我的脉冲频率。不过,我似乎无法完成这项工作。任何帮助将非常感激!:)
openmdao - 如何使用 OpenMDAO 在不反转 A 矩阵的情况下求解线性方程组?
我有一个方程组,其形式为:
轴 = b
其中 A 和 b 是已知状态和从早期组件派生的状态速率的混合,x 是四个未知状态速率的向量。我已经使用 Matlab 将问题线性化,我现在需要做的就是创建一些组件来找到 x。但是,就每个索引中的变量数量而言,A 的倒数很大,所以我不能将它们变成一个简单的线性方程。有人可以建议一条路线吗?
scilab - xcos中如何使用exp(x)?
我正在尝试模拟 K e^(-θ s)/(*s + 1),但 xcos 不允许我在 CLR 块中使用 exp(s)。有什么办法吗?另外,如何在没有变量值的情况下创建 xcos 模型,然后通过编辑器分配值?
谢谢!
python-3.x - 关于正确实现带矢量输出端口的 LeafSystem 的困惑
我是一名自学 Drake 的学生,特别是 pydrake 和 Russ Tedrake 博士出色的欠驱动机器人课程。我正在尝试编写一个组合的能量整形和 lqr 控制器来保持手推车系统平衡直立。我的图表基于欠驱动机器人技术 [http://underactuated.mit.edu/acrobot.html] 第 3 章中的购物车示例,以及第 2 章中的 SwingUpAndBalanceController:[http://underactuated.mit.edu/pend .html]。
我发现由于我cart_pole.sdf model
使用FramePoseVector
了cart_pole.get_output_port(0)
. 从那里我知道我必须创建一个 BasicVector 类型的控制信号输出,以在馈入手推车的驱动端口之前馈入饱和块。
我现在遇到的问题是,我不确定如何在DeclareVectorOutputPort
的回调函数中获取系统当前的状态数据。我假设我会LeafContext
在回调函数中使用参数OutputControlSignal
,获得BasicVector
连续状态向量。但是,这个结果向量x_bar
总是NaN
。出于绝望(并进行测试以确保我的程序的其余部分正常工作),我设置x_bar
为控制器的初始化cart_pole_context
,并发现模拟以 0.0 的控制信号运行(如预期的那样)。我也可以设置output
为 100,然后手推车模拟就飞入无尽的空间(如预期的那样)。
LeafSystem
TL;DR:在扩展的自定义控制器中获取连续状态向量的正确方法是DeclareVectorOutputPort
什么?
感谢您的任何帮助!我真的很感激 :) 我一直在自学,所以有点辛苦哈哈。
math - Unscented Kalman 滤波器线性非自变量
理论问题:
我有一个扩展卡尔曼滤波器,其中我的状态向量变量是线性独立的(例如,具有滚动-俯仰-偏航角的传统位置跟踪)。然后,在计算系统的雅可比行列时,过程非常简单(例如有限差分)。
但是,对于四元数,雅可比行列式需要一些特殊处理(参见:http ://www.iri.upc.edu/people/jsola/JoanSola/objectes/notes/kinematics.pdf ,第 4.2 章,第 38 页。)。
据我了解,这背后的主要原因是,四元数变量(至少在单位四元数旋转的情况下)不是线性独立的(?)(https://quaternions.online/见这里,如果你改变一个四元数参数,其他参数也会改变)。
现在我的问题是,Unscented Kalman Filter (UKF) 的情况如何?很明显雅可比在这种情况下是不必要的,但我仍然觉得这很重要。我可以使用常规方法计算sigma,还是必须将 4 个四元数参数视为我想要映射的“sigma 点”?
通常如何影响问题的不正确表述(状态向量元素的线性相关性)结果?
convex-optimization - 使用 LMI 约束执行凸优化
我怀疑是否有可能做这样的事情。假设我有一个类似这样的优化问题,目标函数的形式为 (xT)M(x),其中 xT 表示向量 x 的转置。现在我们必须最小化这个目标函数,并且 M 是要优化的矩阵变量,但是,我想通过将所有特征值设置为某个值来限制问题,因此只在矩阵 M 的特征向量上运行优化器。是这可能吗?有什么文件或其他我可以参考的吗?如果这个问题是微不足道的或完全愚蠢的,请原谅我,我是这个领域的新手。谢谢 :)
matlab - 如何离散非线性系统
我如何离散以下非线性系统。我使用 Matlab 和 Casadi 进行模型预测控制。常数 C 介于 0 和 1 之间。
感谢您的时间和帮助。