概述
尝试为场加入PD控制
在之前的模拟中,需要最小化一个能量函数H。
这样做的原因是,由理想约束的特性(约束反力垂直于虚位移),对于不含体积蒙皮的情况,可以推出
对于表面点,有
J^T * Σfs = 0
对于内部点,有
Σfn = 0
而对于体积蒙皮的情况,
对于表面点,仍有
J^T * Σfs = 0
对于内部点,有
J^T * W^T * fn = 0
其中W为蒙皮权重矩阵
综合两种情况,可以发现,这些力平衡情况都同H函数对内部点n、对参数p的导数等于零是等价的。
不含体积蒙皮的情况,dH/dp =
J^T * Σfs
含体积蒙皮的情况, dH/dp = J^T * (Σfs + W^T * Σfn)
等式后一项有一个专门的名称,叫广义力,实际上就是普通力在参数空间的投影
现在控制的方法十分简单,就是加一项广义控制力fc
fc = kp*(p' - p) + kd*(dp'/dt - dp/dt), 其中p'是期望的参数值,p为实际参数值,kp,kd为控制增益,都为对角矩阵
于是新的总广义力为
dH1/dp = dH/dp + fc
H1 = H + fc^T * p
现时有两种施加控制的方法,一种是在每一帧求解之前预先算出控制力,且在求解过程中保持控制力不变,称为显式控制;另一种是把控制力表示成求解状态的函数,在求解过程中不断更新,称为隐式控制。
隐式控制的稳定性比显式控制好。
使用隐式控制时,令
dp/dt = (pn+1-pn)/h,其中pn+1是待求解的本帧参数值,pn为上一帧参数值
需要求出fc对位置的导数
dfc/dpn+1 = -(kp + kd/h)
把这一项加入Hessian的计算即可
以下是当前对一条棍子的控制结果
目标控制曲线如下:
实际控制曲线如下。曲线逐渐变形的原因是控制增益被逐步降低了。
来自为知笔记(Wiz)
附件列表
- rodCtrl.gif
转载于:https://www.cnblogs.com/dydx/p/4374722.html
最后
以上就是友好饼干为你收集整理的实现PD控制的全部内容,希望文章能够帮你解决实现PD控制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复