Spisu treści:

Kontroler robota ROS oparty na Matlabie: 9 kroków
Kontroler robota ROS oparty na Matlabie: 9 kroków

Wideo: Kontroler robota ROS oparty na Matlabie: 9 kroków

Wideo: Kontroler robota ROS oparty na Matlabie: 9 kroków
Wideo: SICK Webinar | Kompaktowe kamery 3D z serii Visionary 2024, Lipiec
Anonim
Image
Image
Robotyczny kontroler ROS oparty na Matlab
Robotyczny kontroler ROS oparty na Matlab

Odkąd byłem dzieckiem, zawsze marzyłem o byciu Iron Manem i nadal to robię. Iron Man jest jedną z tych postaci, które są realistycznie możliwe i po prostu aspiruję do tego, by któregoś dnia zostać Iron Manem, nawet jeśli ludzie się ze mnie śmieją lub mówią, że to niemożliwe, ponieważ „jest to niemożliwe, dopóki ktoś tego nie zrobi” – Arnold Schwarzenegger.

ROS to nowa platforma, która jest używana do tworzenia złożonych systemów robotyki. Jego zastosowania obejmują: Zautomatyzowany System Montażu, Teleoperację, Ramiona Protetyczne i Maszyny Ciężkie sektora przemysłowego.

Naukowcy i inżynierowie wykorzystują ROS do opracowywania prototypów, podczas gdy różni dostawcy używają go do tworzenia swoich produktów. Ma złożoną architekturę, która utrudnia zarządzanie przez kulawego człowieka. Wykorzystanie MATLAB do tworzenia łącza interfejsu z ROS to nowatorskie podejście, które może pomóc naukowcom, inżynierom i dostawcom w opracowywaniu bardziej niezawodnych rozwiązań.

Więc ta instrukcja dotyczy tego, jak stworzyć kontroler robota ROS oparty na Matlab, będzie to jeden z niewielu samouczków na ten temat i wśród kilku instrukcji ROS. Celem tego projektu jest zaprojektowanie kontrolera, który może sterować dowolnym robotem ROS podłączonym do Twojej sieci. Więc zacznijmy!

napisy do edycji wideo: Ammar Akher, pod adresem [email protected]

Kieszonkowe dzieci

Do projektu wymagane są następujące komponenty:

(1) ROS PC/Robot

(2) router

(3) PC z MATLAB (wersja: 2014 lub nowsza)

Krok 1: Konfiguracja wszystkiego

Przygotowanie wszystkiego do konfiguracji
Przygotowanie wszystkiego do konfiguracji

W tym celu używam Ubuntu 16.04 na moim komputerze z systemem Linux i kinetycznym ros, więc aby uniknąć nieporozumień, zalecam używanie kinetyki ros i ubuntu 16.04, ponieważ ma najlepsze wsparcie dla kinetyki ros. Więcej informacji na temat instalacji ros kinetic można znaleźć na stronie https://wiki.ros.org/kinetic/Installation/Ubuntu. W przypadku MATLAB kupujesz licencję lub pobierasz wersję testową stąd.

Krok 2: Zrozumienie, jak działa kontroler

Zrozumienie, jak działa kontroler
Zrozumienie, jak działa kontroler

Komputer PC uruchamia kontroler robota w MATLAB. Kontroler pobiera adres IP i port komputera/robota ros.

Do komunikacji między sterownikiem a komputerem PC/robotem ros używany jest temat ros, który jest również przyjmowany jako dane wejściowe sterownika. Modem jest wymagany do utworzenia sieci LAN (sieci lokalnej) i przypisuje adresy IP wszystkim urządzeniom podłączonym do jego sieci. Dlatego ros pc/robot i komputer z kontrolerem muszą być podłączone do tej samej sieci (tj. sieci modemu). Skoro już wiesz „jak to działa”, przejdźmy do „jak to jest zbudowane”…

Krok 3: Tworzenie interfejsu ROS-MATLAB

Tworzenie interfejsu ROS-MATLAB
Tworzenie interfejsu ROS-MATLAB
Tworzenie interfejsu ROS-MATLAB
Tworzenie interfejsu ROS-MATLAB
Tworzenie interfejsu ROS-MATLAB
Tworzenie interfejsu ROS-MATLAB

ROS-MATLABInterface jest użytecznym interfejsem dla badaczy i studentów do prototypowania algorytmów robotów w MATLAB i testowania go na robotach kompatybilnych z ROS. Interfejs ten może być stworzony przez zestaw narzędzi systemu robotyki w Matlab i możemy prototypować nasz algorytm i testować go na robota obsługującego ROS lub w symulatorach robotów, takich jak Gazebo i V-REP.

Aby zainstalować przybornik systemu robotyki na swoim MATLAB, po prostu przejdź do opcji dodatku na pasku narzędzi i wyszukaj przybornik robota w eksploratorze dodatków. Za pomocą zrobotyzowanego zestawu narzędzi możemy publikować lub subskrybować temat, taki jak węzeł ROS, i możemy uczynić go masterem ROS. Interfejs MATLAB-ROS ma większość funkcji ROS, których możesz potrzebować w swoich projektach.

Krok 4: Uzyskanie adresu IP

Uzyskiwanie adresu IP
Uzyskiwanie adresu IP
Uzyskiwanie adresu IP
Uzyskiwanie adresu IP

Aby kontroler działał, konieczne jest, aby znać adres IP swojego robota/komputera ROS i komputera, na którym działa kontroler na MATLAB.

Aby uzyskać adres IP swojego komputera:

W systemie Windows:

Otwórz wiersz polecenia i wpisz polecenie ipconfig i zanotuj adres IPv4

Dla Linuksa:

Wpisz polecenie ifconfig i zanotuj adres inet. Teraz, gdy masz już adres IP, nadszedł czas na zbudowanie GUI…

Krok 5: Utwórz GUI dla kontrolera

Utwórz GUI dla kontrolera
Utwórz GUI dla kontrolera
Utwórz GUI dla kontrolera
Utwórz GUI dla kontrolera
Utwórz GUI dla kontrolera
Utwórz GUI dla kontrolera

Aby utworzyć GUI, otwórz MATLAB i wpisz guide w oknie poleceń. Spowoduje to otwarcie aplikacji przewodnika, dzięki której będziemy tworzyć nasz GUI. Możesz także użyć projektanta aplikacji w MATLAB, aby zaprojektować GUI.

Stworzymy w sumie 9 przycisków (jak pokazano na rys.):

6 przycisków: do przodu, do tyłu, w lewo, w prawo, połącz z robotem, rozłącz

3 Edytowalne przyciski: Ros pc IP, port i nazwa tematu.

Przyciski do edycji to przyciski, które pobierają adres IP komputera ROS, jego port i nazwę tematu jako dane wejściowe. Nazwa tematu jest tym, przez co komunikują się kontroler MATLAB i robot/komputer ROS. Aby edytować ciąg na przycisku edytowalnym, kliknij prawym przyciskiem myszy przycisk >> przejdź do Właściwości inspektora >> Ciąg i edytuj tekst przycisku.

Po ukończeniu GUI możesz zaprogramować przyciski. Tu zaczyna się prawdziwa zabawa…

Krok 6: Programowanie edytowalnych przycisków GUI

Programowanie edytowalnych przycisków GUI
Programowanie edytowalnych przycisków GUI
Programowanie edytowalnych przycisków GUI
Programowanie edytowalnych przycisków GUI
Programowanie edytowalnych przycisków GUI
Programowanie edytowalnych przycisków GUI
Programowanie edytowalnych przycisków GUI
Programowanie edytowalnych przycisków GUI

GUI jest zapisywane jako plik.fig, ale funkcje kodu/oddzwaniania są zapisywane w formacie.m. Plik.m zawiera kod dla wszystkich przycisków. Aby dodać funkcje oddzwaniania do przycisków, kliknij prawym przyciskiem myszy przycisk > >Wyświetl oddzwonienia>>oddzwanianie. Spowoduje to otwarcie pliku.m dla twojego GUI do miejsca, w którym jest zdefiniowany ten konkretny przycisk.

Pierwsze wywołanie zwrotne, które zamierzamy zakodować, dotyczy przycisku edytowalnego ROS IP. W funkcji edit1_Callback napisz następujący kod:

funkcja edit1_Callback(hObject, dane zdarzenia, uchwyty)

globalny ros_master_ip

ros_master_ip = get(hObject, 'String')

Tutaj funkcja jest zdefiniowana jako edit1_Callback, co odnosi się do pierwszego edytowalnego przycisku. Kiedy wprowadzimy adres IP z sieci ROS w tym edytowalnym przycisku, będzie on przechowywać adres IP jako ciąg w zmiennej globalnej o nazwie ros_master_ip.

Następnie tuż pod _OpeningFcn(hObject, eventdata, handles, varargin) zdefiniuj co następuje (patrz rys.):

globalne ros_master_ip

globalny port_ros_mastera

globalna nazwa_tematu_teleopcji

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/wejście/teleop';

Właśnie globalnie zakodowałeś adres IP ros-pc (ros_master_ip), port (ros_master_port) i nazwę Teleop Topic. Powoduje to, że jeśli pozostawisz edytowalne przyciski puste, te wstępnie zdefiniowane wartości będą używane podczas łączenia.

Następne wywołanie zwrotne, które zamierzamy zakodować, dotyczy przycisku edycji portu.

W funkcji edit2_Callback napisz następujący kod:

funkcja edit2_Callback(hObject, dane zdarzenia, uchwyty)

globalny port_ros_mastera

ros_master_port = get(hObject, 'String')

Tutaj funkcja jest zdefiniowana jako edit2_Callback, co odnosi się do drugiego edytowalnego przycisku. Kiedy wprowadzimy tutaj port ros pc / robota z sieci ROS w tym edytowalnym przycisku, przechowa on port jako ciąg w zmiennej globalnej o nazwie ros_master_port.

Podobnie następne wywołanie zwrotne, które zamierzamy zakodować, dotyczy przycisku edycji nazwy tematu.

W funkcji edit3_Callback napisz następujący kod:

funkcja edit3_Callback(hObject, eventdata, uchwyty)

globalna nazwa_tematu_teleopcji

teleop_topic_name = get(hObject, 'String')

Podobnie jak ros_master_port, to również jest przechowywane jako ciąg znaków w zmiennej globalnej.

Następnie przyjrzymy się funkcjom oddzwaniania dla przycisków…

Krok 7: Programowanie przycisków GUI

Programowanie przycisków GUI
Programowanie przycisków GUI
Programowanie przycisków GUI
Programowanie przycisków GUI

Przyciski, które stworzyliśmy wcześniej, to te, których będziemy używać do przenoszenia, łączenia i odłączania robota od kontrolera. Wywołania zwrotne przycisków są zdefiniowane w następujący sposób:

np. function pushbutton6_Callback(hObject, eventdata, handles)

Uwaga: w zależności od kolejności, w jakiej utworzyłeś przyciski, będą one odpowiednio ponumerowane. Dlatego funkcja pushbutton6 w moim pliku.m może być dla Forward, podczas gdy w twoim pliku.m może być dla Backwards, więc miej to na uwadze. Aby dowiedzieć się, która dokładna funkcja dla twojego przycisku, po prostu kliknij prawym przyciskiem myszy>> Wyświetl wywołania zwrotne>> wywołania zwrotne, a otworzy się funkcja dla twojego przycisku, ale dla tej instrukcji zakładam, że jest taka sama jak moja.

Dla przycisku Połącz z robotem:

Pod funkcją pushbutton6_Callback(hObject, eventdata, handles):

funkcja pushbutton6_Callback(hObject, eventdata, handles) globalna ros_master_ip

globalny port_ros_master

globalna nazwa_tematu_teleopcji

globalny robot

globalny velmsg

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

setenv('ROS_MASTER_URI', ros_master_uri)

rosinit

robot = rospublisher(teleop_topic_name, 'geometry_msgs/Twist');

velmsg = rosmessage(robot);

To wywołanie zwrotne ustawi zmienną ROS_MASTER_URI, łącząc ros_master_ip i port. Następnie polecenie rosinit zainicjuje połączenie. Po podłączeniu utworzy wydawcę geometry_msgs/Twist, który będzie używany do wysyłania komendy velocity. Nazwa tematu to nazwa, którą podajemy w polu edycyjnym. Po pomyślnym nawiązaniu połączenia będziemy mogli obsługiwać przyciski do przodu, do tyłu, w lewo, w prawo.

Przed dodaniem wywołań zwrotnych do przycisków Forward, Backward musimy zainicjować prędkości prędkości liniowej i kątowej.

Dlatego poniżej _OpeningFcn(hObject, eventdata, handles, varargin) definiujemy co następuje (patrz rys.):

globalne left_spinVelocity globalne right_spinVelocity

globalny forwardPrędkość

globalna prędkość wsteczna

left_spinPrędkość = 2;

right_spinPrędkość = -2;

prędkość do przodu = 3;

wsteczPrędkość = -3;

Uwaga: wszystkie prędkości podane są w rad/s

Teraz, gdy zmienne globalne są zdefiniowane, zaprogramujmy przyciski ruchu.

Dla przycisku Dalej:

funkcja pushbutton4_Callback(hObject, eventdata, handles) global velmsg

globalny robot

globalna nazwa_tematu_teleopcji

globalny forwardPrędkość

velmsg. Kątowy. Z = 0;

velmsg. Linear. X = naprzódPrędkość;

wyślij(robot, velmsg);

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

Podobnie dla przycisku Wstecz:

function pushbutton5_Callback(hObject, eventdata, handles)

globalny velmsg

globalny robot

globalna prędkość wsteczna

globalna nazwa_tematu_teleopcji

velmsg. Kątowy. Z = 0;

velmsg. Linear. X = wsteczPrędkość;

wyślij(robot, velmsg);

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

Podobnie dla Lewego przycisku: function pushbutton3_Callback(hObject, eventdata, handles)

globalny velmsggglobal robot globalny left_spinVelocity

globalna nazwa_tematu_teleopcji

velmsg. Angular. Z = left_spinPrędkość;

velmsg. Linear. X = 0;

wyślij(robot, velmsg);

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

Podobnie dla Prawego przycisku:

globalny robot velmsggglobal

globalna right_spinPrędkość

globalna nazwa_tematu_teleopcji

velmsg. Angular. Z = right_spinPrędkość;

velmsg. Linear. X = 0;

wyślij(robot, velmsg);

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

Po dodaniu wszystkich funkcji zwrotnych i zapisaniu plików możemy przetestować nasz kontroler.

Krok 8: Konfigurowanie konfiguracji sieci na ROS PC (Linux)

Konfigurowanie konfiguracji sieci na ROS PC (Linux)
Konfigurowanie konfiguracji sieci na ROS PC (Linux)
Konfigurowanie konfiguracji sieci na ROS PC (Linux)
Konfigurowanie konfiguracji sieci na ROS PC (Linux)

Będziemy testować kontroler na komputerze ros (Linux), co będzie wymagało skonfigurowania konfiguracji sieci. Jeśli używasz również kontrolera na komputerze z systemem Linux, będziesz musiał również ustawić konfigurację sieci.

Konfiguracja sieci:

Otwórz okno terminala i wpisz gedit.bashrc

Po otwarciu pliku dodaj następujące:

#Konfiguracja maszyny robota

eksportuj ROS_MASTER_URI=https://localhost:11311

#Adres IP węzła głównego ROS

eksportuj ROS_HOSTNAME=

eksportuj ROS_IP=

echo "ROS_HOSTNAME: " $ROS_HOSTNAME

echo "ROS_IP:"$ROS_IP

echo "ROS_MASTER_URI:"$ROS_MASTER_URI

Musisz wykonać ten krok za każdym razem ze względu na dynamiczne przydzielanie adresów IP.

Krok 9: Uruchom kontroler

Uruchom kontroler
Uruchom kontroler

Przetestujemy nasz kontroler na bocie Turtle w Gazebo.

Aby zainstalować Gazebo, odwiedź

Aby zainstalować bota Turtle, przejdź do

Otwórz folder, w którym zapisałeś pliki.fig i.m w MATLAB i naciśnij Uruchom (jak pokazano na rysunku). Spowoduje to otwarcie kontrolera na komputerze. Zanim naciśniesz Connect, upewnij się, że działa twój symulator żółwia.

Aby przetestować symulację TurtleBot:

Otwórz Terminal na komputerze Ros i wpisz: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Spowoduje to otwarcie symulacji Turtlebota na tym komputerze. Nazwa tematu TurtleBot to /cmd_vel_mux/input/teleop, którą już podaliśmy w aplikacji. Wpisz adres IP ros pc, port i nazwę tematu w edytowalnych przyciskach i naciśnij przycisk. Połącz z robotem. Twój żółw-bot powinien zacząć się poruszać, gdy naciśniesz do przodu, do tyłu itp.

Aby wyświetlić prędkość liniową i kątową:

Otwórz nowy terminal i wpisz polecenie: $ rostopic echo /cmd_vel_mux/input/teleop

I oto masz swój własny kontroler robota ROS oparty na Matlab. Jeśli podobał Ci się mój instruktaż, oddaj głos na Konkursie Autorskim Po raz pierwszy i podziel się nim z jak największą liczbą osób. Dziękuję Ci.

Zalecana: