我设法使用“简单”的反馈方法(基于能量控制的摆动+上部位置的LQR稳定)对其进行控制,并且状态轨迹如图所示(我忘记了轴的描述:x为theta ,y是theta点。
现在,我想尝试一种“完全”的最佳控制方法,从迭代LQR方法开始(我在这里找到了实现方法,网址为http: //homes.cs.washington.edu/~todorov/software/ilqg_det.m)
该方法需要一个动态函数和一个成本函数(
x = [theta; theta_dot], u
是电动机转矩(仅一个电动机)): function [xdot, xdot_x, xdot_u] = ilqr_fnDyn(x, u)
xdot = [x(2);
-g/l * sin(x(1)) - d/(m*l^2)* x(2) + 1/(m*l^2) * u];
if nargout > 1
xdot_x = [ 0, 1;
-g/l*cos(x(1)), -d/(m*l^2)];
xdot_u = [0; 1/(m*l^2)];
end
end
function [l, l_x, l_xx, l_u, l_uu, l_ux] = ilqr_fnCost(x, u, t)
%trying J = x_f' Qf x_f + int(dt*[ u^2 ])
Qf = 10000000 * eye(2);
R = 1;
wt = 1;
x_diff = [wrapToPi(x(1) - reference(1)); x(2)-reference(2)];
if isnan(t)
l = x_diff'* Qf * x_diff;
else
l = u'*R*u;
end
if nargout > 1
l_x = zeros(2,1);
l_xx = zeros(2,2);
l_u = 2*R*u;
l_uu = 2 * R;
l_ux = zeros(1,2);
if isnan(t)
l_x = Qf * x_diff;
l_xx = Qf;
end
end
end
关于摆锤的一些信息:我的系统的原点是摆锤固定在地面上的位置。在稳定位置(和pi,角度θ为零)在不稳定/目标p中
m
是摆锤质量,l
是杆长,d
是阻尼因子(为简单起见,我将m=1
,l=1
和d=0.3
)我的成本很简单:对控制+最终错误。
这就是我调用ilqr函数的方式。
>
时间从0到10。初始条件:(0.785398,0.000000)。目标:(-3.141593,0.000000)
长度:1.000000,质量:1.000000,阻尼:0.300000
使用迭代LQR控制
迭代次数= 5;成本= 88230673.8003
标称轨迹(即控件找到的最佳轨迹)为
控件为“关闭” ...它甚至都没有尝试达到目标...
我在做什么错? (Todorov的算法似乎可以正常工作。至少在他的示例中有效)
#1 楼
无需遍历所有代码(这太像真实的工作了),我的直觉是您已经对控制工作进行了足够的加权,以至于成本最低的事情是什么也不做,并忍受错误。 />是的,我知道-您所有明确的权重都是统一的。但是,仍然-尝试降低控制权重,或者提高位置误差。
同样,如果不深入代码,ilrq函数可能不会“理解”控件的非线性性质。您正在控制的事情。因此,它可能无法找到直立摆的方法,而且可能会失败。
您首次尝试的方法是将适量的能量投入摆中,然后在摆锤竖起后进行最佳调节,这可能是最好的方法:您知道,在没有摩擦的情况下,能量恰到好处的系统最终将停留在顶部(但是短暂地),因此这似乎是一个明智的起点。
#2 楼
iLQR是一种迭代方法,但实际上您似乎并没有在迭代。 Todorov提供了一个测试脚本,该脚本应阐明该方法,尽管可能需要针对您的系统进行自定义。评论
$ \ begingroup $
实现iLQG方法时,我尝试的第一件事是todorov测试,它可以正常工作。现在..这个问题是在一月底..也许我应该关闭它..我从这种方法,从matlab转移到了NLP方法
$ \ endgroup $
– Francesco
2013年6月27日14:23
$ \ begingroup $
对不起,我没有尽快看到它。回复:关闭它,我建议不要这样做,因为其他人可能仍然认为它很有帮助。
$ \ endgroup $
– DaemonMaker
2013年6月27日15:38
$ \ begingroup $
@DeamonMaker是..这就是我将其保持打开状态的原因... :)
$ \ endgroup $
– Francesco
13年6月28日在8:03
评论
$ \ begingroup $
感谢您的评论。正如我在评论其他答案时所说的那样,这个问题已经很久了,也许我应该删除它。问题是我从未解决过这个问题,即使我改用其他算法也是如此。关于您对能量的评论。真正的目标不是控制倒立摆,而是将其用作ocp算法的测试平台。 (低尺寸但非线性和不稳定的系统)
$ \ endgroup $
– Francesco
2013年6月27日14:26