Tartalomjegyzék:

Matlab alapú ROS robotvezérlő: 9 lépés
Matlab alapú ROS robotvezérlő: 9 lépés

Videó: Matlab alapú ROS robotvezérlő: 9 lépés

Videó: Matlab alapú ROS robotvezérlő: 9 lépés
Videó: Webinárium: KUKA.ForceTorqueControl és KUKA.RobotSensorInterface 2024, November
Anonim
Image
Image
Matlab alapú ROS robotvezérlő
Matlab alapú ROS robotvezérlő

Gyerekkorom óta mindig arról álmodtam, hogy Vasember leszek, és még mindig az vagyok. Az Iron Man egyike azoknak a karaktereknek, akik reálisan lehetségesek, és egyszerűen megfogalmazva arra törekszem, hogy egyszer vasember lehessek, még akkor is, ha az emberek nevetnek rajtam, vagy azt mondják, hogy lehetetlen, mert "csak addig lehetetlen, amíg valaki meg nem teszi" -Arnold Schwarzenegger.

Az ROS egy feltörekvő keretrendszer, amelyet összetett robotikai rendszerek fejlesztésére használnak. Alkalmazásai a következők: Automatizált összeszerelő rendszer, távmunka, protetikus fegyverek és nehézgépek az ipari szektorban.

A kutatók és a mérnökök a ROS -t használják a prototípusok kifejlesztéséhez, míg a különböző gyártók termékeik létrehozásához használják. Összetett architektúrája megnehezíti a béna ember irányítását. A MATLAB használata az interfész kapcsolat létrehozásához az ROS -szal egy új megközelítés, amely segíthet a kutatóknak, mérnököknek és szállítóknak a robusztusabb megoldások kifejlesztésében.

Tehát ez az útmutató arról szól, hogyan lehet Matlab-alapú ROS robotvezérlőt készíteni, ez lesz az egyik nagyon kevés oktatóanyag ezzel kapcsolatban, és a kevés ROS utasítás között. Ennek a projektnek a célja egy olyan vezérlő tervezése, amely a hálózatához csatlakoztatott bármely ROS-robotot képes vezérelni. Kezdjük hát!

videószerkesztő: Ammar Akher, az [email protected] címen

Kellékek

A projekthez a következő összetevőkre van szükség:

(1) ROS PC/robot

(2) Router

(3) PC MATLAB (verzió: 2014 vagy újabb)

1. lépés: Minden beállítása

Mindent beállít
Mindent beállít

Ennél a tanulságosnál az Ubuntu 16.04-et használom a linuxos számítógépemhez és a ros-kinetic-hez, így a félreértések elkerülése érdekében javaslom a ros kinetic és az ubuntu 16.04 használatát, mivel ez támogatja a legjobban a ros-kinetikát. A ros kinetic telepítésével kapcsolatos további információkért látogasson el a https://wiki.ros.org/kinetic/Installation/Ubuntu oldalra. A MATLAB esetében vagy vásároljon licencet, vagy töltse le a nyomvonal verzióját innen.

2. lépés: A vezérlő működésének megértése

A vezérlő működésének megértése
A vezérlő működésének megértése

Egy számítógép futtatja a MATLAB robotvezérlőjét. A vezérlő felveszi a ros pc/robot IP -címét és portját.

A ros-topic a kommunikációra szolgál a vezérlő és a ros pc/robot között, amelyet a vezérlő is inputként vesz fel. A modem egy LAN (helyi hálózat) létrehozásához szükséges, és az IP -címeket rendeli hozzá a hálózatához csatlakoztatott összes eszközhöz. Ezért a ros pc/robotnak és a vezérlőt futtató számítógépnek ugyanarra a hálózatra (azaz a modem hálózatára) kell csatlakoznia. Tehát most, hogy tudod, "hogyan működik", menjünk a "hogyan épül fel"…

3. lépés: ROS-MATLAB interfész létrehozása

ROS-MATLAB interfész létrehozása
ROS-MATLAB interfész létrehozása
ROS-MATLAB interfész létrehozása
ROS-MATLAB interfész létrehozása
ROS-MATLAB interfész létrehozása
ROS-MATLAB interfész létrehozása

A ROS-MATLABInterface hasznos felület a kutatók és a diákok számára, hogy prototípusba hozzák robot algoritmusaikat a MATLAB-ban, és teszteljék ROS-kompatibilis robotokon. Ezt a felületet a matlab robotika eszköztára hozhatja létre, és prototipálhatjuk az algoritmusunkat, és tesztelhetjük egy ROS-kompatibilis robot vagy olyan robotszimulátorokban, mint a Gazebo és a V-REP.

A robotika rendszer eszköztárának MATLAB-ra történő telepítéséhez egyszerűen lépjen az eszköztár Bővítmény opciójához, és keresse meg a robot eszköztárat a kiegészítő felfedezőben. A robot eszköztár segítségével közzétehetünk vagy feliratkozhatunk egy témára, például egy ROS csomópontra, és ROS mesterré tehetjük. A MATLAB-ROS interfész rendelkezik a legtöbb ROS funkcióval, amelyekre szüksége lehet a projektjeihez.

4. lépés: Az IP -cím beszerzése

Az IP -cím lekérése
Az IP -cím lekérése
Az IP -cím lekérése
Az IP -cím lekérése

Ahhoz, hogy a vezérlő működjön, feltétlenül ismernie kell a ROS robot/pc és a MATLAB vezérlőt futtató számítógép IP -címét.

A számítógép IP -jének beszerzése:

Windows rendszeren:

Nyissa meg a parancssort, írja be az ipconfig parancsot, és jegyezze fel az IPv4 -címet

Linux esetén:

Gépelje be az ifconfig parancsot, és jegyezze fel az inet címet. Most, hogy megvan az ip -címe, ideje elkészíteni a GUI -t…

5. lépés: Hozzon létre egy grafikus felhasználói felületet a vezérlő számára

Hozzon létre egy GUI -t a vezérlő számára
Hozzon létre egy GUI -t a vezérlő számára
Hozzon létre egy GUI -t a vezérlő számára
Hozzon létre egy GUI -t a vezérlő számára
Hozzon létre egy GUI -t a vezérlő számára
Hozzon létre egy GUI -t a vezérlő számára

A GUI létrehozásához nyissa meg a MATLAB alkalmazást, és írja be a guide parancsot a parancsablakban. Ez megnyitja az útmutató alkalmazást, amellyel létrehozjuk a GUI -t. A GUI tervezéséhez a MATLAB alkalmazástervezőjét is használhatja.

Összesen 9 gombot fogunk létrehozni (az ábrán látható módon):

6 nyomógomb: előre, hátra, balra, jobbra, Csatlakozás a robothoz, Leválasztás

3 Szerkeszthető gombok: Ros pc ip, port és a téma neve.

A szerkeszthető gombok azok a gombok, amelyek a ROS PC ip-jét, annak portját és a Téma nevét használják bemenetként. A Téma neve az, amin a MATLAB vezérlő és a ROS robot/pc kommunikál. A szerkeszthető gomb karakterláncának szerkesztéséhez kattintson a jobb gombbal a gombra >> menjen az Inspector properties >> String elemre, és szerkessze a gomb szövegét.

Miután elkészült a GUI, programozhatja a gombokat. Itt kezdődik az igazi mulatság…

6. lépés: A GUI szerkeszthető gombok programozása

A GUI szerkeszthető gombok programozása
A GUI szerkeszthető gombok programozása
A GUI szerkeszthető gombok programozása
A GUI szerkeszthető gombok programozása
A GUI szerkeszthető gombok programozása
A GUI szerkeszthető gombok programozása
A GUI szerkeszthető gombok programozása
A GUI szerkeszthető gombok programozása

A GUI.fig fájlként kerül mentésre, de a kód/visszahívási funkciók.m formátumban vannak mentve. A.m fájl tartalmazza az összes gomb kódját. Ha visszahívási funkciókat szeretne hozzáadni a gombokhoz, kattintson a jobb gombbal a gombra> > Visszahívások megtekintése >> visszahívás. Ez megnyitja a GUI.m fájlját, ahol az adott gomb meg van határozva.

Az első visszahívás, amelyet kódolni fogunk, a ROS IP szerkeszthető gombja. A edit1_Callback függvénybe írja be a következő kódot:

function edit1_Callback (hObject, eventdata, fogantyúk)

globális ros_master_ip

ros_master_ip = get (hObject, 'String')

Itt a függvény az edit1_Callback, amely az első szerkeszthető gombra vonatkozik. Ha ebbe a szerkeszthető gombba beírunk egy IP-címet a ROS hálózatból, akkor az az IP-címet karakterláncként tárolja a ros_master_ip nevű globális változóban.

Ezután közvetlenül az _OpeningFcn (hObject, eventdata, fogantyúk, varargin) alatt határozza meg a következőket (lásd az ábrát):

globális ros_master_ip

globális ros_master_port

globális teleop_topic_name

ros_master_ip = '192.168.1.102';

ros_master_port = '11311';

teleop_topic_name = '/cmd_vel_mux/input/teleop';

Csak globálisan kódolta a ros-pc ip (ros_master_ip), port (ros_master_port) és a Teleop Topic nevét. Ez azt jelenti, hogy ha üresen hagyja a szerkeszthető gombokat, akkor ezeket az előre meghatározott értékeket fogja használni a csatlakozáskor.

A következő visszahívás, amelyet kódolni fogunk, a Port szerkeszthető gombja.

Az edit2_Callback függvénybe írja be a következő kódot:

function edit2_Callback (hObject, eventdata, fogantyúk)

globális ros_master_port

ros_master_port = get (hObject, 'String')

Itt a függvény edit2_Callback -ként van definiálva, ami a második szerkeszthető gombra vonatkozik. Amikor belépünk a ros pc/robot portjára a ROS hálózatból ebben a szerkeszthető gombban, akkor a port karakterláncként tárolja a ros_master_port nevű globális változót.

Hasonlóképpen a következő visszahívás, amelyet kódolni fogunk, a Téma neve szerkeszthető gomb.

A edit3_Callback függvénybe írja be a következő kódot:

function edit3_Callback (hObject, eventdata, fogantyúk)

globális teleop_topic_name

teleop_topic_name = get (hObject, 'String')

A ros_master_porthoz hasonlóan ez is egy globális változó karakterláncaként kerül tárolásra.

Ezután megvizsgáljuk a nyomógombok visszahívási funkcióit…

7. lépés: A GUI nyomógombok programozása

A GUI nyomógombok programozása
A GUI nyomógombok programozása
A GUI nyomógombok programozása
A GUI nyomógombok programozása

A korábban létrehozott nyomógombokkal fogjuk mozgatni, csatlakoztatni és leválasztani a robotot a vezérlőről. A nyomógombos visszahívások a következők:

például. funkció pushbutton6_Callback (hObject, eventdata, fogantyúk)

Megjegyzés: attól függően, hogy milyen sorrendben hozta létre a nyomógombokat, azok számozása ennek megfelelően történik. Ezért a.m fájlom pushbutton6 funkciója az Előre, míg a.m fájljában a Visszafelé való lehet, ezért ezt tartsa szem előtt. Ahhoz, hogy megtudja, melyik funkciója van a nyomógombjának, egyszerűen kattintson a jobb egérgombbal a >> Visszahívások megtekintése >> visszahívások elemre, és megnyílik a nyomógomb funkciója, de ehhez az oktathatóhoz feltételezem, hogy ugyanaz, mint az enyém.

A Connect to robot gombhoz:

A pushbutton6_Callback (hObject, eventdata, fogantyúk) funkció alatt:

funkció pushbutton6_Callback (hObject, eventdata, fogantyúk) global ros_master_ip

globális ros_master_port

globális teleop_topic_name

globális robot

globális 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);

Ez a visszahívás beállítja a ROS_MASTER_URI változót a ros_master_ip és a port összefűzésével. Ezután a rosinit parancs inicializálja a kapcsolatot. A csatlakozás után létrehozza a geometry_msgs/Twist kiadót, amelyet a parancs sebességének elküldésére használnak. A téma neve a szerkesztőmezőben megadott név. Ha a csatlakozás sikeres, működtethetjük az Előre, Vissza, Balra, Jobbra nyomógombokat.

Mielőtt visszahívásokat adnánk az előre, hátra nyomógombokhoz, inicializálnunk kell a lineáris és a szögsebesség sebességét.

Ezért az alábbiakban az _OpeningFcn (hObject, eventdata, fogantyúk, varargin) határozza meg a következőket (lásd az ábrát):

global left_spinVelocity globális right_spinVelocity

globális előrehaladásVelocity

globális visszafeléVelocity

left_spinVelocity = 2;

right_spinVelocity = -2;

forwardVelocity = 3;

backwardVelocity = -3;

Megjegyzés: minden sebesség rad/s -ban van megadva

Most, hogy a globális változók definiáltak, programozzuk a mozgás nyomógombokat.

Az Előre nyomógombhoz:

funkció pushbutton4_Callback (hObject, eventdata, fogantyúk) globális velmsg

globális robot

globális teleop_topic_name

globális előrehaladásVelocity

velmsg. Angular. Z = 0;

velmsg. Linear. X = forwardVelocity;

küld (robot, velmsg);

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

Hasonlóan a Vissza gombhoz:

funkció pushbutton5_Callback (hObject, eventdata, fogantyúk)

globális velmsg

globális robot

globális visszafeléVelocity

globális teleop_topic_name

velmsg. Angular. Z = 0;

velmsg. Linear. X = visszafeléVelocity;

küld (robot, velmsg);

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

Hasonlóan a bal oldali nyomógombhoz: funkció pushbutton3_Callback (hObject, eventdata, fogantyúk)

globális velmsgglobal robot globális left_spinVelocity

globális teleop_topic_name

velmsg. Angular. Z = left_spinVelocity;

velmsg. Linear. X = 0;

küld (robot, velmsg);

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

Hasonlóan a jobb oldali nyomógombhoz:

globális velmsgglobal robot

globális right_spinVelocity

globális teleop_topic_name

velmsg. Angular. Z = right_spinVelocity;

velmsg. Linear. X = 0;

küld (robot, velmsg);

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

Az összes visszahívási funkció hozzáadása és a fájlok mentése után tesztelhetjük a vezérlőnket.

8. lépés: A hálózati konfiguráció beállítása ROS PC -n (Linux)

A hálózati konfiguráció beállítása ROS PC -n (Linux)
A hálózati konfiguráció beállítása ROS PC -n (Linux)
A hálózati konfiguráció beállítása ROS PC -n (Linux)
A hálózati konfiguráció beállítása ROS PC -n (Linux)

A vezérlőt egy ros pc -n (Linux) teszteljük, ami megköveteli a hálózati konfiguráció beállítását. Ha a vezérlőt linuxos számítógépen is futtatja, akkor ott is be kell állítania a hálózati konfigurációt.

Hálózati konfiguráció:

Nyissa meg a terminál ablakát, és írja be a gedit.bashrc parancsot

A fájl megnyitása után adja hozzá a következőket:

#Robotgép konfigurálása

export ROS_MASTER_URI = https:// localhost: 11311

#ROS fő csomópont IP címe

export ROS_HOSTNAME =

export ROS_IP =

echo "ROS_HOSTNAME:" $ ROS_HOSTNAME

echo "ROS_IP:" $ ROS_IP

echo "ROS_MASTER_URI:" $ ROS_MASTER_URI

Ezt a lépést minden alkalommal követnie kell a dinamikus IP -hozzárendelés miatt.

9. lépés: Futtassa a vezérlőt

Futtassa a Vezérlőt
Futtassa a Vezérlőt

Kipróbáljuk a vezérlőnket egy Turtle boton a Gazebo -ban.

A Gazebo telepítéséhez látogasson el a https://gazebosim.org/tutorials?tut=install_ubuntu&cat=install oldalra.

A Turtle bot telepítéséhez látogasson el a https://yainnoware.blogspot.com/2018/09/install-turtlebot-on-ros-kinetic-ubuntu.html webhelyre.

Nyissa meg azt a mappát, ahová a.fig és.m fájlokat mentette a MATLAB -on, majd nyomja meg a Futtatás gombot (a képen látható módon). Ez megnyitja a vezérlőt a számítógépen. A connect megnyomása előtt győződjön meg arról, hogy a teknősbot -szimulátor működik.

A TurtleBot szimuláció tesztelése:

Nyissa meg a terminált a Ros számítógépen, és írja be: $ roslaunch turtlebot_gazebo turtlebot_world.launch. Ez megnyitja a Turtlebot szimulációját az adott számítógépen. A TurtleBot témakör neve/cmd_vel_mux/input/teleop, amelyet már megadtunk az alkalmazásban. Írja be a ros pc Ip -címét, portját és a téma nevét a szerkeszthető gombokban, majd nyomja meg a. Connect to Robot gombot. A teknősbotnak mozognia kell, ha megnyomja az Előre, Vissza stb.

A lineáris és szögsebesség megtekintéséhez:

Nyisson meg egy új terminált, és írja be a következő parancsot: $ rostopic echo/cmd_vel_mux/input/teleop

És ott van a saját Matlab-alapú ROS robotvezérlője. Ha tetszett az utasításom, kérjük, szavazzon róla az Első Szerzői Versenyen, és ossza meg minél több emberrel. Köszönöm.

Ajánlott: