尝试为场加入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的计算即可

以下是当前对一条棍子的控制结果



目标控制曲线如下:

实际控制曲线如下。曲线逐渐变形的原因是控制增益被逐步降低了。

附件列表

实现PD控制的更多相关文章

  1. PID控制

    PID解释: 位置式:      可以看出,比例部分只与当前的偏差有关,而积分部分则是系统过去所有偏差的累积.位置式PI调节器的结构清晰,P和I两部分作用分明,参数调整简单明了.但直观上看,要计算第拍 ...

  2. 基于视觉反馈的步进电机X-Y平台控制

    关键词:步进电机.XY平台.视觉反馈 用途:工业自动化 文章类型:原理介绍.随笔纪念 @Author:VShawn(singlex@foxmail.com) @Date:2017-05-01 @Lab ...

  3. 经典PID控制及应用体会总结

    经典PID控制及应用体会总结 PID控制原理 PID是一种线性控制器,它根据给定值rin(t)与实际输出值yout(t)构成控制方案: 重点关注相关算法是如何对偏差进行处理的: PID控制器各校正环节 ...

  4. T12焊台控制器制作教程 | T12烙铁 | PID增量式算法恒温控制 | 运算放大器-热电偶电压采集 | OLED屏幕显示-SPI通信 | 旋转编码器EC11用户操作

    前言 购买T12烙铁的相关配件已经1年多了,期间也尝试了一些开源的T12控制器,但都没有成功,要么是配套资料少,要么是英文的,其中51和arduino的居多,STM32的较少.求人不如求己,索性自己开 ...

  5. PID教程

    PID教程 介绍 本教程将向您展示了比例每一个比例项 (P)的特点,积分项(I)和微分项 (D) 控制,以及怎样使用它们来获得所需的响应.在本教程中,我们会考虑下面单位反馈系统: Plant[被控对象 ...

  6. PID算法笔记2

    总所周知,PID算法是个很经典的东西.而做自平衡小车,飞行器PID是一个必须翻过的坎.因此本节我们来好好讲解一下PID,根据我在学习中的体会,力求通俗易懂.并举出PID的形象例子来帮助理解PID.一. ...

  7. CDR锁定方式

    每个通道的PMA包括一个通道PLL可以配置成接收器CDR.还可以把通道1和4的PLL配置成CMU PLL用于发送器. CDR有两种锁定方式 1.Lock-to-Reference Mode(LTR) ...

  8. PID control

    |—平滑化算法 |—PID控制—|—P控制器编程 |—PD控制编程 |—PID控制编程 |—参数优化 |—实验P.PD.PID对减小系统误差的作用 这里讨论怎么将路径转变成行动指令(生成平滑的路径), ...

  9. PID 通俗解释

    PID 控制原理3 个故事:看完您就明白了.1.: PID 的故事小明接到这样一个任务:有一个水缸点漏水(而且漏水的速度还不一定固定不变),要求水面高度维持在某个位置,一旦发现水面高度低于要求位置,就 ...

随机推荐

  1. 国内最全最详细的hadoop2.2.0集群的MapReduce的最简单配置

    简介 hadoop2的中的MapReduce不再是hadoop1中的结构已经没有了JobTracker,而是分解成ResourceManager和ApplicationMaster.这次大变革被称为M ...

  2. CALayer 易混淆的两个属性 - position和anchorPoint

    1.简单介绍 CALayer有2个非常重要的属性:position和anchorPoint @property CGPoint position;                           ...

  3. 开发者账号续期后,itunes停止付款了

    开发者账号过期后,没有及时续期,等再续期后,itunes停止付款到公司银行账户了.过了一个多月了还是没有收到itunes的付款.然后开始联系苹果客服和技术支持,他们都说只能通过itunes的“联系我们 ...

  4. CoreLocation 定位

    前言: 本章会使用OC和Swift分别进行实现,需要了解Swift的小伙伴可以翻一下之前的博文 LBS和SoloMo(索罗门) LBS:基于位置的服务,根据定位展示周边美食.景点等信息(全称:Loca ...

  5. OC点语法和变量作用域

    OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: #import <Foundation/Foundation.h> @interface Person : ...

  6. hypervisor与VMware共存方法

    bcdedit /set hypervisorlaunchtype offbcdedit /set hypervisorlaunchtype auto

  7. Linux 系统中用户切换

    1. Linux系统中用户切换的命令为su,语法为: su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]] 参 ...

  8. 简单看看这两个类 String和StringBuilder

    我记得以前在园子里面讨论这两个类的文章有很多很多,并且还拿出了很多的测试报告,在什么情况下,谁比谁快,在什么情况下,该用谁 不该用谁等等这些,我这里就不比较了,我就简单看看他们里面的内部实现,那就先看 ...

  9. memcache使用方法测试 # 转自 简单--生活 #

    <?php   //php操作memcache的使用测试总结--学习   //1 Memcache::connect;    //$memcache = new Memcache;    //$ ...

  10. 多年前写的DataTable与实体类的转换,已放github

    本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 阅读目录 介绍 起因 代码 UnitTest G ...