Բովանդակություն:

Matlab- ի վրա հիմնված ROS Robotic Controller: 9 քայլ
Matlab- ի վրա հիմնված ROS Robotic Controller: 9 քայլ

Video: Matlab- ի վրա հիմնված ROS Robotic Controller: 9 քայլ

Video: Matlab- ի վրա հիմնված ROS Robotic Controller: 9 քայլ
Video: Մադրիդյան սկզբունքներ | Արցախի ի՞նչ կարգավիճակ է առաջարկվել բանակցությունների ընթացքում 2024, Նոյեմբեր
Anonim
Image
Image
Matlab- ի վրա հիմնված ROS ռոբոտային վերահսկիչ
Matlab- ի վրա հիմնված ROS ռոբոտային վերահսկիչ

Դեռ մանկուց ես միշտ երազել եմ լինել Երկաթե մարդ և դեռ դա անում եմ: Երկաթե մարդն այն կերպարներից է, որն իրատեսորեն հնարավոր է, և պարզապես ես ձգտում եմ մի օր դառնալ Երկաթե մարդ, նույնիսկ եթե մարդիկ ծիծաղեն ինձ վրա կամ ասեն, որ դա անհնար է, քանի որ «դա անհնար է, մինչև որ ինչ-որ մեկը դա չանի»: Առնոլդ Շվարցենեգեր

ROS- ը զարգացող շրջանակ է, որն օգտագործվում է ռոբոտաշինության բարդ համակարգերի մշակման համար: Նրա ծրագրերը ներառում են. Ավտոմատ հավաքման համակարգ, հեռագործողություն, պրոթեզավորման զենք և արդյունաբերական հատվածի ծանր տեխնիկա:

Հետազոտողները և ինժեներները ROS- ը օգտագործում են նախատիպերը մշակելու համար, մինչդեռ տարբեր վաճառողներ այն օգտագործում են իրենց արտադրանքը ստեղծելու համար: Այն ունի բարդ ճարտարապետություն, որը դժվարացնում է կաղ մարդու կառավարումը: RAT- ի հետ ինտերֆեյսի կապ ստեղծելու համար MATLAB- ի օգտագործումը նոր մոտեցում է, որը կարող է օգնել հետազոտողներին, ինժեներներին և վաճառողներին ավելի հզոր լուծումներ մշակելիս:

Այսպիսով, սա ուսանելի է այն մասին, թե ինչպես պատրաստել Matlab- ի վրա հիմնված ROS ռոբոտային վերահսկիչ, սա լինելու է դրա մասին շատ քիչ ձեռնարկներից մեկը և այն մի քանի ROS հրահանգների շարքում: Այս նախագծի նպատակն է մշակել վերահսկիչ, որը կարող է կառավարել ձեր ցանցին միացված ցանկացած ROS- ռոբոտ: Այսպիսով, եկեք սկսենք:

տեսամոնտաժի կրեդիտներ ՝ Ամմար Ախեր, [email protected] հասցեով

Պարագաներ

Նախագծի համար պահանջվում են հետևյալ բաղադրիչները.

(1) ROS համակարգիչ/ռոբոտ

(2) երթուղիչ

(3) համակարգիչ MATLAB- ով (տարբերակ ՝ 2014 կամ ավելի բարձր)

Քայլ 1: Ստացեք ամեն ինչ կարգաբերված

Ամեն ինչ կարգավորվում է
Ամեն ինչ կարգավորվում է

Այս ուսանելի համար ես օգտագործում եմ Ubuntu 16.04-ը իմ linux համակարգչի և ros-kinetic- ի համար, ուստի շփոթությունից խուսափելու համար խորհուրդ եմ տալիս օգտագործել ros kinetic և ubuntu 16.04, քանի որ այն ունի լավագույն աջակցությունը ros-kinetic- ի համար: Ros kinetic- ի տեղադրման վերաբերյալ լրացուցիչ տեղեկությունների համար այցելեք https://wiki.ros.org/kinetic/Installation/Ubuntu: MATLAB- ի համար դուք կամ լիցենզիա եք գնում, կամ այստեղից ներբեռնում եք հետքի տարբերակ:

Քայլ 2. Հասկանալ, թե ինչպես է աշխատում վերահսկիչը

Հասկանալով, թե ինչպես է աշխատում վերահսկիչը
Հասկանալով, թե ինչպես է աշխատում վերահսկիչը

Համակարգիչը գործարկում է ռոբոտային վերահսկիչը MATLAB- ով: Հսկիչը վերցնում է IP հասցեն և ros pc/robot- ի նավահանգիստը:

Ռոս-թեման օգտագործվում է վերահսկիչի և ros pc/robot- ի միջև հաղորդակցվելու համար, որը նույնպես որպես մուտքագրվում է վերահսկիչի կողմից: Մոդեմը պահանջվում է LAN (տեղական ցանց) ստեղծելու համար և այն է, ինչ Ip հասցեները վերագրում է իր ցանցին միացված բոլոր սարքերին: Հետևաբար, ros համակարգիչը/ռոբոտը և վերահսկիչը աշխատող համակարգիչը պետք է միացված լինեն միևնույն ցանցին (այսինքն `մոդեմի ցանցին): Այսպիսով, այժմ, երբ գիտեք «ինչպես է այն աշխատում», եկեք հասնենք «ինչպես է այն կառուցված» …

Քայլ 3. ROS-MATLAB ինտերֆեյսի ստեղծում

ROS-MATLAB ինտերֆեյսի ստեղծում
ROS-MATLAB ինտերֆեյսի ստեղծում
ROS-MATLAB ինտերֆեյսի ստեղծում
ROS-MATLAB ինտերֆեյսի ստեղծում
ROS-MATLAB ինտերֆեյսի ստեղծում
ROS-MATLAB ինտերֆեյսի ստեղծում

ROS-MATLABInterface- ը օգտակար միջերես է հետազոտողների և ուսանողների համար MATLAB- ում իրենց ռոբոտների ալգորիթմները նախատիպավորելու և ROS- ի հետ համատեղ ռոբոտների վրա փորձարկելու համար: Այս ինտերֆեյսը կարող է ստեղծվել matlab- ի ռոբոտաշինության համակարգի տուփի միջոցով, և մենք կարող ենք նախատիպավորել մեր ալգորիթմը և փորձարկել այն ROS- ով միացված ռոբոտ կամ ռոբոտների սիմուլյատորներում, ինչպիսիք են Gazebo- ն և V-REP- ը:

Ձեր MATLAB- ում ռոբոտաշինության համակարգի գործիքատուփ տեղադրելու համար պարզապես գնացեք Գործիքադարակի Լրացուցիչ տարբերակ և լրացուցիչ ռադիոտեղորոշիչ գործիքախցիկ փնտրեք հավելյալ հետազոտողի մեջ: Օգտագործելով ռոբոտային գործիքների տուփը, մենք կարող ենք հրապարակել կամ բաժանորդագրվել մի թեմայի, ինչպիսին է ROS հանգույցը, և այն կարող ենք դարձնել ROS վարպետ: MATLAB-ROS ինտերֆեյսը ունի ROS գործառույթների մեծ մասը, որոնք կարող եք պահանջել ձեր նախագծերի համար:

Քայլ 4: IP հասցեի ստացում

IP հասցե ստանալը
IP հասցե ստանալը
IP հասցե ստանալը
IP հասցե ստանալը

Որպեսզի վերահսկիչը աշխատի, անհրաժեշտ է իմանալ ձեր ROS ռոբոտի/համակարգչի ip հասցեն և համակարգիչը, որն աշխատում է վերահսկիչով MATLAB- ով:

Ձեր համակարգչի IP- ն ստանալու համար.

Windows- ում.

Բացեք հրամանի տողը և մուտքագրեք ipconfig հրամանը և նշեք IPv4 հասցեն

Linux- ի համար.

Մուտքագրեք ifconfig հրամանը և նշեք մուտքագրված հասցեն: Այժմ, երբ ունեք ip հասցեն, ժամանակն է կառուցել GUI…

Քայլ 5: Ստեղծեք GUI վերահսկիչի համար

Ստեղծեք GUI վերահսկիչի համար
Ստեղծեք GUI վերահսկիչի համար
Ստեղծեք GUI վերահսկիչի համար
Ստեղծեք GUI վերահսկիչի համար
Ստեղծեք GUI վերահսկիչի համար
Ստեղծեք GUI վերահսկիչի համար

GUI ստեղծելու համար բացեք MATLAB և հրամանի պատուհանում մուտքագրեք ուղեցույց: Սա կբացի ուղեցույցի ծրագիրը, չնայած որ մենք ստեղծելու ենք մեր GUI- ն: Դուք կարող եք նաև օգտագործել ծրագրի դիզայները MATLAB- ում ՝ ձեր GUI- ն նախագծելու համար:

Մենք կստեղծենք ընդհանուր առմամբ 9 կոճակ (ինչպես ցույց է տրված նկարում).

6 կոճակ ՝ հետընթաց, հետընթաց, ձախ, աջ, միացում ռոբոտին, անջատում

3 Խմբագրելի կոճակներ ՝ Ros pc ip, նավահանգիստ և թեմայի անվանում:

Խմբագրելի կոճակները այն կոճակներն են, որոնք ROS համակարգչի ip- ն, դրա նավահանգիստը և թեմայի անվանումը կներառեն: Թեմայի անունն այն է, ինչի միջոցով շփվում են MATLAB վերահսկիչն ու ROS ռոբոտը/համակարգիչը: Խմբագրելի կոճակի տողը խմբագրելու համար աջ սեղմեք կոճակի վրա >> գնացեք Տեսուչի հատկություններ >> Լար և խմբագրեք կոճակի տեքստը:

Երբ ձեր GUI- ն ավարտված է, կարող եք ծրագրավորել կոճակները: Այստեղից է սկսվում իսկական զվարճանքը…

Քայլ 6: GUI խմբագրելի կոճակների ծրագրավորում

GUI խմբագրելի կոճակների ծրագրավորում
GUI խմբագրելի կոճակների ծրագրավորում
GUI խմբագրելի կոճակների ծրագրավորում
GUI խմբագրելի կոճակների ծրագրավորում
GUI խմբագրելի կոճակների ծրագրավորում
GUI խմբագրելի կոճակների ծրագրավորում
GUI խմբագրելի կոճակների ծրագրավորում
GUI խմբագրելի կոճակների ծրագրավորում

GUI- ն պահվում է որպես.fig ֆայլ, բայց կոդը/հետադարձ գործառույթները պահվում են.m ձևաչափով:.m ֆայլը պարունակում է ձեր բոլոր կոճակների ծածկագիրը: Ձեր կոճակներին հետադարձ գործառույթներ ավելացնելու համար աջ սեղմեք կոճակի վրա> > Դիտել հետադարձ կապեր >> հետադարձ կապ: Սա կբացի.m ֆայլը ձեր GUI- ի համար, որտեղ սահմանված է տվյալ կոճակը:

Առաջին զանգը, որը մենք պատրաստվում ենք ծածկագրել, վերաբերում է ROS IP խմբագրելի կոճակին: Edit1_Callback գործառույթի ներքո գրեք հետևյալ ծածկագիրը.

գործառույթ edit1_Callback (hObject, eventdata, բռնակներ)

գլոբալ ros_master_ip

ros_master_ip = ստանալ (hObject, 'String')

Այստեղ գործառույթը սահմանվում է որպես edit1_Callback, որը վերաբերում է առաջին խմբագրելի կոճակին: Երբ այս խմբագրելի կոճակում մուտքագրենք IP հասցե ROS ցանցից, այն կպահի IP հասցեն որպես տող գլոբալ փոփոխականի մեջ, որը կոչվում է ros_master_ip:

Այնուհետև հենց _OpeningFcn (hObject, eventdata, handles, varargin) տակ սահմանեք հետևյալը (տես նկ.).

գլոբալ ros_master_ip

գլոբալ ros_master_port

գլոբալ teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Դուք պարզապես գլոբալ առումով կոշտ կոդավորեցիք ros-pc ip (ros_master_ip), port (ros_master_port) և Teleop թեմայի անվանումը: Այն, ինչ անում է, այն է, որ եթե խմբագրելի կոճակները դատարկ եք թողնում, միանալիս կօգտագործվեն այս նախապես սահմանված արժեքները:

Հաջորդ հետադարձ կապը, որը մենք պատրաստվում ենք ծածկագրել, Port- ի խմբագրելի կոճակի համար է:

Edit2_Callback գործառույթի ներքո գրեք հետևյալ ծածկագիրը.

գործառույթ edit2_Callback (hObject, eventdata, բռնակներ)

գլոբալ ros_master_port

ros_master_port = ստանալ (hObject, 'String')

Այստեղ գործառույթը սահմանվում է որպես edit2_Callback, որը վերաբերում է երկրորդ խմբագրելի կոճակին: Երբ մենք մուտքագրում ենք ros pc/robot- ի նավահանգիստը ROS ցանցից այս խմբագրելի կոճակում, այն կպահի նավահանգիստը որպես տող գլոբալ փոփոխականի մեջ, որը կոչվում է ros_master_port:

Նմանապես, հաջորդ զանգը, որը մենք պատրաստվում ենք ծածկագրել, Թեմայի անվան խմբագրելի կոճակի համար է:

Edit3_Callback գործառույթի ներքո գրեք հետևյալ ծածկագիրը.

խմբագրել գործառույթը3_Callback (hObject, eventdata, բռնակներ)

գլոբալ teleop_topic_name

teleop_topic_name = ստանալ (hObject, 'String')

Նմանապես ros_master_port- ին, այն նույնպես պահվում է որպես տող գլոբալ փոփոխականի մեջ:

Հաջորդը մենք կանդրադառնանք սեղմման կոճակների հետ կանչման գործառույթներին…

Քայլ 7: GUI կոճակների ծրագրավորում

GUI կոճակների ծրագրավորում
GUI կոճակների ծրագրավորում
GUI կոճակների ծրագրավորում
GUI կոճակների ծրագրավորում

Նախկինում ստեղծած կոճակները այն կոճակներն են, որոնք մենք կօգտագործենք ռոբոտին վերահսկիչից տեղափոխելու, միացնելու և անջատելու համար: Կոճակի հետադարձ կապերը սահմանվում են հետևյալ կերպ.

օր. գործառույթ pushbutton6_Callback (hObject, eventdata, բռնակներ)

Նշում. Կախված այն կարգից, որով դուք ստեղծել եք ձեր կոճակները, դրանք համարակալվելու են համապատասխանաբար: Հետևաբար, իմ.m ֆայլում pushbutton6 գործառույթը կարող է լինել Forward- ի համար, մինչդեռ ձեր.m ֆայլում այն կարող է լինել Backwards- ի համար, ուստի դա նկատի ունեցեք: Ձեր կոճակի ճշգրիտ գործառույթը իմանալու համար պարզապես աջ սեղմեք >> Դիտել հետադարձ կապ >> հետադարձ կապը և այն կբացի գործառույթը ձեր կոճակի համար, բայց այս ուսանելիի համար ես ենթադրում եմ, որ դա նույնն է, ինչ իմը:

Ռոբոտին միանալու կոճակի համար.

Գործողության ներքո pushbutton6_Callback (hObject, eventdata, բռնակներ).

գործառույթ pushbutton6_Callback (hObject, eventdata, բռնակներ) գլոբալ ros_master_ip

գլոբալ ros_master_port

գլոբալ teleop_topic_name

գլոբալ ռոբոտ

գլոբալ velmsg

ros_master_uri = strcat ('https://', ros_master_ip, ':', ros_master_port)

setenv ('ROS_MASTER_URI', ros_master_uri)

ռոսինիտ

ռոբոտ = rospublisher (teleop_topic_name, 'geometry_msgs/Twist');

velmsg = rosmessage (ռոբոտ);

Այս հետադարձ կապը կկարգավորի ROS_MASTER_URI փոփոխականը `միացնելով ros_master_ip- ը և նավահանգիստը: Այնուհետև rosinit հրամանը կսկսի կապը: Միանալուց հետո այն կստեղծի geometry_msgs/Twist հրատարակիչ, որը կօգտագործվի հրամանի արագությունը ուղարկելու համար: Թեմայի անունն այն անունն է, որը տալիս ենք խմբագրման դաշտում: Երբ կապը հաջողվի, մենք կկարողանանք գործել առաջ, հետ, ձախ, աջ կոճակները:

Նախքան Forward, Backward push buttoins- ին հետադարձ կապ ավելացնելը, մենք պետք է նախաստորագրենք գծային և անկյունային արագության արագությունները:

Հետևաբար, ներքևի _OpeningFcn (hObject, eventdata, handles, varargin) սահմանեք հետևյալը (տես նկ.).

գլոբալ left_spinVelocity գլոբալ right_spinVelocity

գլոբալ առաջընթաց արագություն

գլոբալ հետամնաց արագություն

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

հետընթաց արագություն = -3;

Նշում. Բոլոր արագությունները գտնվում են ռադ/վ -ում

Այժմ, երբ սահմանվում են գլոբալ փոփոխականները, ծրագրավորենք շարժման կոճակները:

Forward կոճակի համար.

գործառույթը pushbutton4_Callback (hObject, eventdata, handles) գլոբալ velmsg

գլոբալ ռոբոտ

գլոբալ teleop_topic_name

գլոբալ առաջընթաց արագություն

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

ուղարկել (ռոբոտ, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Նմանապես Backward կոճակի համար.

գործառույթ pushbutton5_Callback (hObject, eventdata, բռնակներ)

գլոբալ velmsg

գլոբալ ռոբոտ

գլոբալ հետամնաց արագություն

գլոբալ teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = հետընթաց արագություն;

ուղարկել (ռոբոտ, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Նմանապես Ձախ կոճակի համար. Գործառույթ pushbutton3_Callback (hObject, eventdata, բռնակներ)

գլոբալ velmsgglobal ռոբոտ գլոբալ left_spinVelocity

գլոբալ teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

ուղարկել (ռոբոտ, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Նմանապես աջ կոճակի համար.

գլոբալ velmsgglobal ռոբոտ

գլոբալ right_spinVelocity

գլոբալ teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

ուղարկել (ռոբոտ, velmsg);

latchpub = rospublisher (teleop_topic_name, 'IsLatching', true);

Հետադարձ կապի բոլոր գործառույթներն ավելացվելուց և ֆայլերը պահվելուց հետո մենք կարող ենք ստուգել մեր վերահսկիչը:

Քայլ 8: Networkանցի կոնֆիգուրացիայի տեղադրում ROS համակարգչի վրա (Linux)

Networkանցի կոնֆիգուրացիայի տեղադրում ROS համակարգչի վրա (Linux)
Networkանցի կոնֆիգուրացիայի տեղադրում ROS համակարգչի վրա (Linux)
Networkանցի կոնֆիգուրացիայի տեղադրում ROS համակարգչի վրա (Linux)
Networkանցի կոնֆիգուրացիայի տեղադրում ROS համակարգչի վրա (Linux)

Մենք փորձարկելու ենք վերահսկիչը ros pc (Linux) համակարգում, որը կպահանջի կարգավորել ցանցի կազմաձևումը: Եթե դուք նաև վերահսկիչն աշխատում եք linux համակարգչի վրա, ապա այնտեղ նույնպես պետք է կարգավորեք ցանցի կազմաձևը:

Networkանցի կազմաձևում

Բացեք ձեր տերմինալի պատուհանը և մուտքագրեք gedit.bashrc

Երբ ֆայլը բաց է, ավելացրեք հետևյալը.

#Robot մեքենայի կազմաձևում

արտահանել ROS_MASTER_URI = https:// localhost: 11311

ROS հիմնական հանգույցի #IP հասցե

արտահանել ROS_HOSTNAME =

արտահանել ROS_IP =

արձագանք "ROS_HOSTNAME:" $ ROS_HOSTNAME

արձագանք "ROS_IP:" $ ROS_IP

արձագանք "ROS_MASTER_URI:" $ ROS_MASTER_URI

Դուք պետք է ամեն անգամ հետևեք այս քայլին ՝ IP- ի դինամիկ նշանակման պատճառով:

Քայլ 9: Գործարկեք վերահսկիչը

Գործարկեք վերահսկիչը
Գործարկեք վերահսկիչը

Մենք պատրաստվում ենք մեր վերահսկիչը փորձարկել Gazebo- ի Turtle բոտի վրա:

Gazebo- ն տեղադրելու համար դիմեք

Turtle bot- ը տեղադրելու համար դիմեք

Բացեք այն թղթապանակը, որտեղ պահպանել եք ձեր.fig և.m ֆայլերը MATLAB- ում և սեղմել Run (ինչպես ցույց է տրված նկարում): Սա կբացի վերահսկիչը համակարգչում: Միացնելը սեղմելուց առաջ համոզվեք, որ կրիա բոտերի սիմուլյատորն աշխատում է:

Ձեր TurtleBot մոդելավորումը փորձարկելու համար

Բացեք տերմինալը Ros համակարգչի վրա և մուտքագրեք ՝ $ roslaunch turtlebot_gazebo turtlebot_world.launch: Սա կբացի Turtlebot- ի մոդելավորում այդ համակարգչի վրա: TurtleBot- ի թեմայի անունն է/cmd_vel_mux/input/teleop, որը մենք արդեն տրամադրել ենք դիմումում: Խմբագրելի կոճակներում մուտքագրեք ros pc Ip հասցեն, նավահանգիստը և թեմայի անունը և սեղմեք: Միացեք Robot կոճակին: Ձեր կրիա բոտը պետք է սկսի շարժվել, երբ սեղմեք Առաջ, Հետ և այլն:

Գծային և անկյունային արագությունները դիտելու համար

Բացեք նոր տերմինալ և մուտքագրեք հրամանը ՝ $ rostopic echo/cmd_vel_mux/input/teleop

Եվ ահա դուք ունեք ձեր սեփական Matlab- ի վրա հիմնված ROS Robotic Controller- ը: Եթե ձեզ դուր եկավ իմ հրահանգը, խնդրում եմ քվեարկեք Առաջին անգամ հեղինակային մրցույթում և կիսվեք այն հնարավորինս շատ մարդկանց հետ: Շնորհակալություն.

Խորհուրդ ենք տալիս: