我有一个给定结的6 DOF机械手的给定路径。路径(自由度,结)
path_f=[-0.5131 -0.6587 -1.0058 -1.4202 -1.7674 -1.9130
-0.8696 -0.6711 -0.1980 0.3667 0.8399 1.0383
-0.8961 -0.7433 -0.3789 0.0560 0.4205 0.5733
1.1714 0.9639 0.4691 -0.1215 -0.6163 -0.8238
-3.1000 -2.5800 -1.3400 0.1400 1.3800 1.9000
-1.1514 -0.9439 -0.4491 0.1415 0.6363 0.8438]
我在每个关节之间生成了三次样条,每个时间间隔定义为h(i),我试图找到最小的h值h(1)+h(2)+h(3)+h(4)+h(5)
。
解决了这个问题,我写了一个代码:
options=optimset('Algorithm','sqp','Display','iter','DiffMinChange',1e-16,'DiffMaxChange',1e-4,'TolFun',1e-14,'TolX',1e-20,'MaxFunEvals',60000,'MaxIter',1000);
h0=[0.001; 0.001; 0.001; 0.001; 0.001]
h=fmincon(@(h)objecfun(h,path), h0, [], [], [], [], [0; 0; 0; 0; 0] , [], @(h) nonlconstraint(h,Robot,path_f,dof), options);
当我运行代码时,它说:
Solver过早地停了下来。 fmincon停止了,因为它超过了迭代限制, options.MaxIter = 1000(所选值)。
第5次迭代后,f(x)值不会改变,结果如下:
Norm of First-order
Iter F-count f(x) Feasibility Steplength step optimality
0 6 2.500000e-01 2.001e+01 1.000e+00
1 12 3.903637e-01 8.013e+00 1.000e+00 6.374e-02 6.077e-01
2 18 5.115308e-01 2.485e+00 1.000e+00 5.914e-02 3.255e-01
3 24 5.519283e-01 4.258e-01 1.000e+00 2.941e-02 1.712e-01
4 30 5.528961e-01 1.288e-02 1.000e+00 5.382e-03 3.098e-02
5 36 5.530002e-01 4.399e-06 1.000e+00 2.153e-04 2.442e-02
6 42 5.530000e-01 3.403e-12 1.000e+00 1.305e-07 1.828e-06
7 48 5.530000e-01 8.704e-14 1.000e+00 1.050e-13 3.103e-07
8 54 5.530000e-01 8.349e-14 1.000e+00 3.211e-15 1.465e-07
9 65 5.530000e-01 6.573e-14 1.681e-01 2.713e-16 1.319e-07
10 72 5.530000e-01 3.020e-14 7.000e-01 9.286e-16 3.740e-08
我不知道背后的原因是什么。你能帮我吗?
答案 0 :(得分:0)
您的f(x)可能正在改变,但您在此决议中没有看到它。查看步长的大小。尝试扩展您的问题或(如果情况合理)增加DiffMinChange。