আমি বিভিন্ন অনুকূল নিয়ন্ত্রণ পদ্ধতি অধ্যয়ন করছি (এবং মতলব এগুলি প্রয়োগ করে), এবং পরীক্ষার ক্ষেত্রে হিসাবে আমি (এখন জন্য) একটি সাধারণ দুল বেছে নিয়েছি (স্থলভাগে স্থির), যা আমি উপরের অবস্থানে নিয়ন্ত্রণ করতে চাই।
আমি "সহজ" প্রতিক্রিয়া পদ্ধতিটি ব্যবহার করে এটি নিয়ন্ত্রণ করতে পেরেছি (উচ্চতর অবস্থানের জন্য শক্তি নিয়ন্ত্রণের উপর ভিত্তি করে সুইং-আপ + এলকিউআর স্থিতিশীল), এবং রাষ্ট্রের ট্রাজেক্টোরি চিত্রটি দেখানো হয়েছে (আমি অক্ষের বিবরণটি ভুলে গেছি: এক্স থিটা, ওয়াই থিটা ডট।
পুনরাবৃত্ত এলকিউআর পদ্ধতি (যা আমি এখানে 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
দুল সম্পর্কে কিছু তথ্য: আমার সিস্টেমের সূত্রপাত যেখানে দুলটি মাটিতে স্থির করা হয়েছে। স্থির অবস্থানের কোণ কোণটি শূন্য (এবং অস্থির / লক্ষ্য অবস্থানে পাই)।
m
বব ভর, হয় l
হয় যষ্টি দৈর্ঘ্য, d
একটি স্যাঁতসেঁতে ফ্যাক্টর (সরলীকরণের জন্য আমি করা m=1
, l=1
, d=0.3
)
আমার ব্যয়টি সহজ: নিয়ন্ত্রণটি + চূড়ান্ত ত্রুটি।
এইভাবেই আমি ilqr ফাংশন বলি
tspan = [0 10];
dt = 0.01;
steps = floor(tspan(2)/dt);
x0 = [pi/4; 0];
umin = -3; umax = 3;
[x_, u_, L, J_opt ] = ilqg_det(@ilqr_fnDyn, @ilqr_fnCost, dt, steps, x0, 0, umin, umax);
এটি আউটপুট
0 থেকে 10 অবধি প্রাথমিক অবস্থা: (0.785398,0.000000)। লক্ষ্য: (-3.141593,0.000000) দৈর্ঘ্য: 1.000000, ভর: 1.000000, স্যাঁতসেঁতে: 0.300000
Iterative LQR নিয়ন্ত্রণ ব্যবহার করে
আইট্রেশনস = 5; খরচ = 88230673.8003
নামমাত্র ট্রাজেক্টোরি (এটি নিয়ন্ত্রণের সর্বাধিক ট্র্যাজেক্টোরি) is
নিয়ন্ত্রণ "বন্ধ" ... এটি লক্ষ্যে পৌঁছানোর চেষ্টাও করে না ... আমি কী ভুল করছি? (টোডোরভের অ্যালগোরিদমটি কাজ করছে বলে মনে হচ্ছে .. কমপক্ষে তার উদাহরণ সহ)