একটি সাধারণ দুলের জন্য অনুকূল নিয়ন্ত্রণ


15

আমি বিভিন্ন অনুকূল নিয়ন্ত্রণ পদ্ধতি অধ্যয়ন করছি (এবং মতলব এগুলি প্রয়োগ করে), এবং পরীক্ষার ক্ষেত্রে হিসাবে আমি (এখন জন্য) একটি সাধারণ দুল বেছে নিয়েছি (স্থলভাগে স্থির), যা আমি উপরের অবস্থানে নিয়ন্ত্রণ করতে চাই।

আমি "সহজ" প্রতিক্রিয়া পদ্ধতিটি ব্যবহার করে এটি নিয়ন্ত্রণ করতে পেরেছি (উচ্চতর অবস্থানের জন্য শক্তি নিয়ন্ত্রণের উপর ভিত্তি করে সুইং-আপ + এলকিউআর স্থিতিশীল), এবং রাষ্ট্রের ট্রাজেক্টোরি চিত্রটি দেখানো হয়েছে (আমি অক্ষের বিবরণটি ভুলে গেছি: এক্স থিটা, ওয়াই থিটা ডট।

সুইং-আপ + এলকিউআর নিয়ন্ত্রণ রাষ্ট্রের ট্রাজেক্টোরি

পুনরাবৃত্ত এলকিউআর পদ্ধতি (যা আমি এখানে 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

আইএলকিউআর অনুকূল ট্রাজেক্টোরি

নিয়ন্ত্রণ "বন্ধ" ... এটি লক্ষ্যে পৌঁছানোর চেষ্টাও করে না ... আমি কী ভুল করছি? (টোডোরভের অ্যালগোরিদমটি কাজ করছে বলে মনে হচ্ছে .. কমপক্ষে তার উদাহরণ সহ)

উত্তর:


2

আপনার সমস্ত কোডের মধ্য দিয়ে না গিয়ে (এটি সত্যিকারের কাজের মতো হবে), আমার অন্তর অনুভূতিটি হ'ল আপনি নিজের নিয়ন্ত্রণের প্রচেষ্টাকে এতটাই ভারী করেছেন যে সর্বনিম্ন ব্যয় করা জিনিসটি কিছু না করা এবং ত্রুটি নিয়ে বেঁচে থাকা।

হ্যাঁ, আমি জানি - আপনার সমস্ত স্পষ্ট ওজন একতা। তবে তবুও - নিয়ন্ত্রণের চেষ্টাটিকে কম ওজন দেওয়ার বা অবস্থানের ত্রুটি আরও বেশি দেওয়ার চেষ্টা করুন।

আবার আপনার কোডটিতে গভীরভাবে না গিয়ে, আপনার ইলরিক ফাংশনটি আপনি যে জিনিসটিকে নিয়ন্ত্রণ করছেন তার নৈখিক প্রকৃতি "বুঝতে" পারে না। এই হিসাবে, এটি দুলটি খাড়া অবস্থানে যাওয়ার কোনও উপায় দেখতে না পারে এবং আবারও এটি ব্যর্থ হতে পারে।

আপনি যে পদ্ধতিটি প্রথমে চেষ্টা করেছিলেন, দুলের মধ্যে ঠিক সঠিক পরিমাণে শক্তি স্থাপন করার জন্য, তারপর দুলটি খাড়া হওয়ার পরে যথাযথভাবে নিয়ন্ত্রণ করুন, সম্ভবত এটি সর্বোত্তম উপায়: আপনি জানেন যে ঘর্ষণের অভাবে, ঠিক পুরোপুরি সঠিক একটি সিস্টেম শক্তির পরিমাণ শীর্ষে স্থির হয়ে দাঁড়িয়েছে (তবে সংক্ষিপ্তভাবে), যাতে এটি সূচনা করার মতো একটি বোধগম্য জায়গা বলে মনে হয়।


আপনার মন্তব্যের জন্য ধন্যবাদ. যেমন আমি অন্য উত্তরে মন্তব্য করার সময় এই প্রশ্নটি বেশ পুরানো এবং সম্ভবত আমার এটি সরিয়ে দেওয়া উচিত .. সমস্যাটি হ'ল আমি এটিকে কখনও সমাধান করি নি, এমনকি আমি অন্যান্য অ্যালগরিদমে চলে যাওয়ার কারণেও। শক্তি সম্পর্কে আপনার মন্তব্য সম্পর্কে .. আসল লক্ষ্য হ'ল একটি উল্টানো দুলটি নিয়ন্ত্রণ করা নয়, তবে এটি অক্ট অ্যালগরিদমের পরীক্ষার বিছানা হিসাবে ব্যবহার করা। (নিম্ন মাত্রা তবে অ-রৈখিক এবং অস্থির সিস্টেম)
ফ্রান্সেসকো

1

আইএলকিউআর একটি পুনরাবৃত্তি পদ্ধতি তবে বাস্তবে আপনি পুনরাবৃত্তি বলে মনে হয় না। টডোরভ একটি পরীক্ষা স্ক্রিপ্ট সরবরাহ করে যা পদ্ধতির ব্যাখ্যা করতে হবে যদিও এটি আপনার সিস্টেমের জন্য কাস্টমাইজ করার প্রয়োজন হতে পারে।


আমি আইএলকিউজি পদ্ধতি প্রয়োগ করার সময় প্রথম জিনিসটি চেষ্টা করেছি তা হল টডোরভ পরীক্ষা এবং এটি কার্যকর হয়েছিল। এখন .. এই প্রশ্নটি জানুয়ারির শেষের দিকে .. সম্ভবত আমার এটি বন্ধ করা উচিত .. আমি এই পদ্ধতি থেকে এবং মাতলাব থেকে এনএলপি পদ্ধতিতে চলে এসেছি
ফ্রান্সেস্কো

আমি দুঃখিত আমি তাড়াতাড়ি দেখতে পেলাম না। পুনরায়: এটি বন্ধ করে দেওয়া, আমি এমনটি করার বিরুদ্ধে সুপারিশ করব কারণ অন্যরা এখনও এটির সহায়ক মনে করতে পারে।
ডেমনমেকার

1
@ ডিমনমেকার হ্যাঁ, এই কারণেই আমি এটি উন্মুক্ত রেখেছি ... :)
ফ্রান্সেসকো
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.