Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Konfiguracja wszystkiego
- Krok 2: Zrozumienie, jak działa kontroler
- Krok 3: Tworzenie interfejsu ROS-MATLAB
- Krok 4: Uzyskanie adresu IP
- Krok 5: Utwórz GUI dla kontrolera
- Krok 6: Programowanie edytowalnych przycisków GUI
- Krok 7: Programowanie przycisków GUI
- Krok 8: Konfigurowanie konfiguracji sieci na ROS PC (Linux)
- Krok 9: Uruchom kontroler
Wideo: Kontroler robota ROS oparty na Matlabie: 9 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:29
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
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
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
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
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
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
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
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)
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
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:
Kontroler gier DIY oparty na Arduino - Kontroler gier Arduino PS2 - Granie w Tekken z DIY Arduino Gamepad: 7 kroków
Kontroler gier DIY oparty na Arduino | Kontroler gier Arduino PS2 | Granie w Tekken z DIY Arduino Gamepad: Witajcie, granie w gry jest zawsze zabawne, ale granie z własnym niestandardowym kontrolerem do gier jest przyjemniejsze. Dlatego stworzymy kontroler do gier za pomocą arduino pro micro w tej instrukcji
Generator muzyki oparty na pogodzie (generator Midi oparty na ESP8266): 4 kroki (ze zdjęciami)
Generator muzyki oparty na pogodzie (Generator Midi oparty na ESP8266): Cześć, dzisiaj wyjaśnię, jak zrobić własny mały generator muzyki oparty na pogodzie. Jest oparty na ESP8266, który jest trochę jak Arduino i reaguje na temperaturę, deszcz i intensywność światła.Nie oczekuj, że sprawi, że całe utwory lub akordy będą pro
Kontroler poziomu wody oparty na IOT przy użyciu NodeMCU ESP8266: 6 kroków
Kontroler poziomu wody oparty na IOT za pomocą NodeMCU ESP8266: Jest to instrukcja tworzenia kontrolera poziomu wody opartego na IOT. Cechy tego projektu to: - Aktualizacje poziomu wody w czasie rzeczywistym w aplikacji na Androida. Automatycznie włącz pompę wody, gdy poziom wody spadnie poniżej minimalnego poziomu. Au
Ramię robota ROS MoveIt, część 2: Kontroler robota: 6 kroków
Ramię robota ROS MoveIt Część 2: Kontroler robota: https://github.com/AIWintermuteAI/ros-moveit-arm.gitW poprzedniej części artykułu stworzyliśmy pliki URDF i XACRO dla naszego ramienia robota i uruchomiliśmy RVIZ, aby kontrolować nasze ramię robota w symulowanym środowisku.Tym razem zrobimy to z p
Dotyk pojemnościowy z Eveve (kontroler oparty na Arduino): 6 kroków (ze zdjęciami)
Pojemnościowy dotyk z Eveve (kontroler oparty na Arduino): Czy wiesz, jak działa ekran dotykowy Twojego smartfona? Smartfon ma szereg czujników dotykowych pod szklanym ekranem. Obecnie jest on oparty na technologii wykrywania dotyku pojemnościowego, a nawet delikatny dotyk jest łatwo wykrywalny. Dotyk pojemnościowy jest wyczuwany