Სარჩევი:

Matlab– ზე დაფუძნებული ROS რობოტული კონტროლერი: 9 ნაბიჯი
Matlab– ზე დაფუძნებული ROS რობოტული კონტროლერი: 9 ნაბიჯი

ვიდეო: Matlab– ზე დაფუძნებული ROS რობოტული კონტროლერი: 9 ნაბიჯი

ვიდეო: Matlab– ზე დაფუძნებული ROS რობოტული კონტროლერი: 9 ნაბიჯი
ვიდეო: Brightful.me - სასწავლო აქტივობების ჩასატარებელი პლატფორმა, რომელიც ყველა მასწავლებელმა უნდა იცოდეს! 2024, ნოემბერი
Anonim
Image
Image
Matlab– ზე დაფუძნებული ROS Robotic Controller
Matlab– ზე დაფუძნებული ROS Robotic Controller

ბავშვობიდან ყოველთვის ვოცნებობდი რკინის კაცი გამხდარიყო და ახლაც ასეა. რკინის კაცი ერთ-ერთია იმ პერსონაჟებიდან, რომელიც რეალისტურად შესაძლებელია და უბრალოდ ვცდილობ, რომ ოდესმე რკინის კაცი გავხდე, მაშინაც კი, თუ ხალხი დამცინის ან მეუბნება, რომ ეს შეუძლებელია, რადგან "ეს შეუძლებელია, სანამ ვინმე ამას არ გააკეთებს"-არნოლდ შვარცენეგერი.

ROS არის განვითარებადი ჩარჩო, რომელიც გამოიყენება რთული რობოტული სისტემების შემუშავებისთვის. მისი პროგრამები მოიცავს: ავტომატური შეკრების სისტემას, ტელეოპერაციას, სამრეწველო სექტორის მძიმე იარაღს და მძიმე ტექნიკას.

მკვლევარები და ინჟინრები იყენებენ ROS– ს პროტოტიპების შესაქმნელად, ხოლო სხვადასხვა გამყიდველები იყენებენ მას თავიანთი პროდუქციის შესაქმნელად. მას აქვს რთული არქიტექტურა, რაც ართულებს კოჭლი კაცის მართვას. MATLAB- ის გამოყენება ROS– თან ინტერფეისის შესაქმნელად არის ახალი მიდგომა, რომელიც შეიძლება დაეხმაროს მკვლევარებს, ინჟინრებს და გამყიდველებს უფრო მძლავრი გადაწყვეტილებების შემუშავებაში.

ამრიგად, ეს არის ინსტრუქცია იმის შესახებ, თუ როგორ უნდა გააკეთოთ Matlab– ზე დაფუძნებული ROS რობოტული კონტროლერი, ეს იქნება ერთ – ერთი ძალიან მცირე გაკვეთილი ამის შესახებ და რამდენიმე ROS ინსტრუქციას შორის. ამ პროექტის მიზანია შეიმუშაოს კონტროლერი, რომელსაც შეუძლია გააკონტროლოს თქვენი ქსელთან დაკავშირებული ნებისმიერი ROS რობოტი. მოდით დავიწყოთ!

ვიდეო რედაქტირების კრედიტები: ამმარ ახერი, [email protected]

მარაგები

პროექტისთვის საჭიროა შემდეგი კომპონენტები:

(1) ROS კომპიუტერი/რობოტი

(2) როუტერი

(3) კომპიუტერი MATLAB– ით (ვერსია: 2014 ან ზემოთ)

ნაბიჯი 1: ყველაფრის დაყენება

ყველაფრის დაყენება
ყველაფრის დაყენება

ამის გასაგებად, მე ვიყენებ Ubuntu 16.04-ს ჩემი linux კომპიუტერისა და ros-kinetic– ისთვის, ასე რომ დაბნეულობის თავიდან ასაცილებლად გირჩევთ გამოიყენოთ ros kinetic და ubuntu 16.04 რადგან მას აქვს საუკეთესო მხარდაჭერა როს – კინეტიკისთვის. როს კინეტიკის დაყენების შესახებ დამატებითი ინფორმაციისათვის ეწვიეთ https://wiki.ros.org/kinetic/Installation/Ubuntu. MATLAB– ისთვის ან იყიდეთ ლიცენზია, ან გადმოწერეთ ბილიკის ვერსია აქედან.

ნაბიჯი 2: იმის გაგება, თუ როგორ მუშაობს კონტროლერი

იმის გაგება, თუ როგორ მუშაობს კონტროლერი
იმის გაგება, თუ როგორ მუშაობს კონტროლერი

კომპიუტერი მართავს რობოტულ კონტროლერს MATLAB– ზე. კონტროლერი იღებს IP მისამართს და პორტი ros pc/robot.

როს-თემა გამოიყენება კონტროლერსა და როს კომპიუტერს/რობოტს შორის კომუნიკაციისთვის, რომელიც ასევე მიიღება კონტროლერის მიერ შეყვანის სახით. მოდემი საჭიროა LAN (ლოკალური ქსელის) შესაქმნელად და არის ის, რაც ანიჭებს Ip მისამართებს მის ქსელთან დაკავშირებულ ყველა მოწყობილობას. ამიტომ ros pc/robot და კომპიუტერი, რომელსაც აქვს კონტროლერი, ორივე უნდა იყოს დაკავშირებული ერთსა და იმავე ქსელში (ანუ მოდემის ქსელში). ახლა, როდესაც თქვენ იცით "როგორ მუშაობს", მოდით გადავიდეთ "როგორ არის აშენებული" …

ნაბიჯი 3: ROS-MATLAB ინტერფეისის შექმნა

ROS-MATLAB ინტერფეისის შექმნა
ROS-MATLAB ინტერფეისის შექმნა
ROS-MATLAB ინტერფეისის შექმნა
ROS-MATLAB ინტერფეისის შექმნა
ROS-MATLAB ინტერფეისის შექმნა
ROS-MATLAB ინტერფეისის შექმნა

ROS-MATLABI ინტერფეისი არის სასარგებლო ინტერფეისი მკვლევარებისთვის და სტუდენტებისთვის MOTLAB– ში მათი რობოტების ალგორითმების პროტოტიპირებისთვის და ROS– თავსებადი რობოტების ტესტირებისათვის. ეს ინტერფეისი შეიძლება შეიქმნას რობოტული სისტემის ინსტრუმენტებით matlab– ში და ჩვენ შეგვიძლია შევქმნათ ჩვენი ალგორითმის პროტოტიპი და შევამოწმოთ იგი ROS- ჩართული რობოტი ან რობოტის ტრენაჟორებში, როგორიცაა Gazebo და V-REP.

თქვენს MATLAB– ზე რობოტული სისტემის ინსტრუმენტების ყუთის დასაყენებლად, უბრალოდ გადადით ინსტრუმენტთა პანელზე Add-on ვარიანტზე და მოძებნეთ რობოტული ინსტრუმენტების კოლოფი დამატებების მკვლევარში. რობოტული ინსტრუმენტების გამოყენებით ჩვენ შეგვიძლია გამოვაქვეყნოთ ან გამოვიწეროთ თემა, როგორიცაა ROS კვანძი და ჩვენ შეგვიძლია მას ROS სამაგისტრო გავხადოთ. MATLAB-ROS ინტერფეისს აქვს ROS– ის უმეტესობა, რაც შეიძლება დაგჭირდეთ თქვენი პროექტებისთვის.

ნაბიჯი 4: მიიღეთ IP მისამართი

IP მისამართის მიღება
IP მისამართის მიღება
IP მისამართის მიღება
IP მისამართის მიღება

კონტროლერის მუშაობისთვის აუცილებელია იცოდეთ თქვენი ROS რობოტის/კომპიუტერის ip მისამართი და კომპიუტერი, რომელიც მართავს კონტროლერს MATLAB– ზე.

თქვენი კომპიუტერის IP– ის მისაღებად:

Windows- ზე:

გახსენით ბრძანების სტრიქონი და ჩაწერეთ ipconfig ბრძანება და ჩაწერეთ IPv4 მისამართი

Linux– ისთვის:

ჩაწერეთ ifconfig ბრძანება და ჩაწერეთ inet მისამართი. ახლა, როდესაც თქვენ გაქვთ IP მისამართი, დროა ავაშენოთ GUI…

ნაბიჯი 5: შექმენით GUI კონტროლერისთვის

შექმენით GUI კონტროლერისთვის
შექმენით GUI კონტროლერისთვის
შექმენით GUI კონტროლერისთვის
შექმენით GUI კონტროლერისთვის
შექმენით GUI კონტროლერისთვის
შექმენით GUI კონტროლერისთვის

GUI- ს შესაქმნელად გახსენით MATLAB და ბრძანების ფანჯარაში ჩაწერეთ სახელმძღვანელო. ეს გახსნის სახელმძღვანელოს პროგრამას, რომლის საშუალებითაც ჩვენ შევქმნით ჩვენს GUI- ს. თქვენ ასევე შეგიძლიათ გამოიყენოთ აპლიკაციის დიზაინერი MATLAB– ში თქვენი GUI დიზაინის შესაქმნელად.

ჩვენ სულ შევქმნით 9 ღილაკს (როგორც ნაჩვენებია ნახატზე):

6 ღილაკი: წინ, უკან, მარცხნივ, მარჯვნივ, დაკავშირება რობოტთან, გათიშვა

3 რედაქტირებადი ღილაკი: Ros pc ip, port და თემის სახელი.

რედაქტირებადი ღილაკები არის ღილაკები, რომლებიც მიიღებენ 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, 'სიმებიანი')

აქ ფუნქცია განისაზღვრება, როგორც edit1_Callback, რომელიც გულისხმობს პირველ რედაქტირებად ღილაკს. როდესაც ჩვენ შევიყვანთ IP მისამართს ROS ქსელიდან ამ რედაქტირებად ღილაკში, ის შეინახავს IP მისამართს, როგორც სტრიქონი გლობალურ ცვლადში, სახელწოდებით ros_master_ip.

შემდეგ მხოლოდ _OpeningFcn (hObject, eventdata, სახელურები, ვარარგინი) განსაზღვრეთ შემდეგი (იხ. სურათი):

გლობალური 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), პორტი (ros_master_port) და Teleop თემის სახელი. ეს ნიშნავს იმას, რომ თუ რედაქტირებადი ღილაკები ცარიელს დატოვებთ, ეს წინასწარ განსაზღვრული მნიშვნელობები გამოყენებული იქნება დაკავშირებისას.

შემდეგი გამოძახება, რომელსაც ჩვენ ვაპირებთ კოდირებას, არის პორტის რედაქტირებადი ღილაკისთვის.

ფუნქციის ქვეშ edit2_Callback ჩაწერეთ შემდეგი კოდი:

ფუნქცია edit2_Callback (hObject, eventdata, სახელურები)

გლობალური ros_master_port

ros_master_port = მიიღეთ (hObject, 'სიმებიანი')

აქ ფუნქცია განსაზღვრულია, როგორც edit2_Callback, რაც გულისხმობს მეორე რედაქტირებადი ღილაკს. როდესაც ჩვენ შევიყვანთ ros pc/robot პორტს აქ ROS ქსელიდან ამ რედაქტირებადი ღილაკით, ის შეინახავს პორტს, როგორც სტრიქონი გლობალურ ცვლადში, სახელწოდებით ros_master_port.

ანალოგიურად, მომდევნო გამოძახება, რომლის კოდირებასაც ვაპირებთ, არის თემის სახელის რედაქტირებადი ღილაკი.

ფუნქციის ქვეშ edit3_Callback ჩაწერეთ შემდეგი კოდი:

ფუნქცია edit3_Callback (hObject, eventdata, სახელურები)

გლობალური teleop_topic_name

teleop_topic_name = მიიღეთ (hObject, 'String')

Ros_master_port– ის მსგავსად, ესეც ინახება როგორც სტრიქონი გლობალურ ცვლადში.

შემდეგი, ჩვენ ვაპირებთ გადახედოთ ღილაკებს ზარის დასაბრუნებლად…

ნაბიჯი 7: GUI Push ღილაკების დაპროგრამება

GUI Push ღილაკების დაპროგრამება
GUI Push ღილაკების დაპროგრამება
GUI Push ღილაკების დაპროგრამება
GUI Push ღილაკების დაპროგრამება

ჩვენ მიერ ადრე შექმნილი ღილაკები არის ის, რასაც ჩვენ გამოვიყენებთ რობოტის კონტროლერის გადასატანად, დასაკავშირებლად და გათიშვისთვის. ღილაკის გამოძახება განისაზღვრება შემდეგნაირად:

მაგალითად. ფუნქცია pushbutton6_Callback (hObject, eventdata, სახელურები)

შენიშვნა: იმისდა მიხედვით, თუ რა თანმიმდევრობით შექმენით ღილაკები, ისინი შესაბამისად დაინომრება. ამიტომ ფუნქცია pushbutton6 ჩემს.m ფაილში შეიძლება იყოს 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, სახელურები, ვარარგინი) განსაზღვრეთ შემდეგი (იხ. სურათი):

გლობალური left_spinVelocity გლობალური right_spinVelocity

გლობალური წინსვლა

გლობალური ჩამორჩენილი სიჩქარე

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

შენიშვნა: ყველა სიჩქარე არის რადი/წმ -ში

ახლა, როდესაც გლობალური ცვლადები განისაზღვრება, მოდით დავპროგრამოთ მოძრაობის ღილაკები.

Forward pushbutton– ისთვის:

ფუნქცია pushbutton4_Callback (hObject, eventdata, სახელურები) გლობალური velmsg

გლობალური რობოტი

გლობალური teleop_topic_name

გლობალური წინსვლა

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

გაგზავნა (რობოტი, velmsg);

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

ანალოგიურად უკანა ღილაკზე:

ფუნქცია pushbutton5_Callback (hObject, eventdata, სახელურები)

გლობალური velmsg

გლობალური რობოტი

გლობალური ჩამორჩენილი სიჩქარე

გლობალური teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = backwardVelocity;

გაგზავნა (რობოტი, velmsg);

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

ანალოგიურად მარცხენა ღილაკზე: ფუნქცია pushbutton3_Callback (hObject, eventdata, სახელურები)

გლობალური velmsgglobal robot გლობალური 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: ქსელის კონფიგურაციის დაყენება ROS კომპიუტერზე (Linux)

ქსელის კონფიგურაციის დაყენება ROS კომპიუტერზე (Linux)
ქსელის კონფიგურაციის დაყენება ROS კომპიუტერზე (Linux)
ქსელის კონფიგურაციის დაყენება ROS კომპიუტერზე (Linux)
ქსელის კონფიგურაციის დაყენება ROS კომპიუტერზე (Linux)

ჩვენ ვამოწმებთ კონტროლერს ros pc (Linux) - ზე, რომელიც საჭიროებს ქსელის კონფიგურაციის დაყენებას. თუ თქვენ ასევე მართავთ კონტროლერს linux კომპიუტერზე, თქვენ ასევე მოგიწევთ ქსელის კონფიგურაციის დაყენება იქაც.

ქსელის კონფიგურაცია:

გახსენით ტერმინალის ფანჯარა და ჩაწერეთ gedit.bashrc

ფაილის გახსნის შემდეგ დაამატეთ შემდეგი:

#რობოტ აპარატის კონფიგურაცია

ექსპორტი 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– ს ინსტალაციისთვის მიმართეთ

კუს ბოტის დაყენების მიზნით, გთხოვთ იხილოთ

გახსენით საქაღალდე, სადაც შეინახეთ თქვენი.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 რობოტული კონტროლერი. თუ მოგეწონათ ჩემი ინსტრუქტაჟი გთხოვთ მიეცით მას ხმა პირველად ავტორთა კონკურსზე და გაუზიარეთ რაც შეიძლება მეტ ადამიანს. Გმადლობთ.

გირჩევთ: