ROS MoveIt robotkar 2. rész: Robotvezérlő: 6 lépés
ROS MoveIt robotkar 2. rész: Robotvezérlő: 6 lépés
Anonim
Image
Image

github.com/AIWintermuteAI/ros-moveit-arm.git

A cikk előző részében URDF és XACRO fájlokat hoztunk létre robotkarunkhoz, és elindítottuk az RVIZ -t, hogy szimulált környezetben vezéreljük robotkarunkat.

Ezúttal az igazi robotkarral csináljuk! Hozzáadjuk a fogót, írunk egy robotvezérlőt, és (opcionális) IKfast inverz kinematikai megoldót készítünk.

Geronimo!

1. lépés: A fogó hozzáadása

A fogó hozzáadása
A fogó hozzáadása
A fogó hozzáadása
A fogó hozzáadása
A fogó hozzáadása
A fogó hozzáadása

A fogó hozzáadása először kissé zavaró volt, ezért ezt a részt kihagytam az előző cikkben. Végül is kiderült, hogy nem is olyan nehéz.

Módosítania kell az URDF fájlt, hogy megfogó linkeket és ízületeket adjon hozzá.

A robotom módosított URDF -fájlja ehhez a lépéshez csatolva van. Alapvetően ugyanazt a logikát követi, mint a karrész, csak hozzáadtam három új linket (claw_base, claw_r és claw_l) és három új csuklót (az ízület5 rögzített, és a csukló6, a csukló7 forgatócsukló).

Miután módosította az URDF fájlt, frissítenie kell a MoveIt által generált csomagot és az xacro fájlt a MoveIt beállítási asszisztens használatával.

Indítsa el a beállítási asszisztenst a következő paranccsal

roslaunch moveit_setup_assistant setup_assistant.launch

Kattintson a Meglévő MoveIt konfiguráció szerkesztése elemre, és válassza ki a mappát a MoveIt csomaggal.

Adjon hozzá új tervezőcsoport megfogót (linkekkel és illesztésekkel a fogóhoz) és egy véghatást. A beállításaim az alábbi képernyőképeken találhatók. Vegye figyelembe, hogy nem a kinematikai megoldót választja a fogóhoz, ez nem szükséges. Generálja a csomagot és írja felül a fájlokat.

Fuss

macska gyártmány

parancsot a macska munkaterületén.

Rendben, most van egy karunk egy fogóval!

2. lépés: A kar felépítése

A kar építése
A kar építése
A kar építése
A kar építése
A kar építése
A kar építése
A kar építése
A kar építése

Amint már említettem, a kar 3D modellt Juergenlessner készítette, köszönöm a csodálatos munkát. A részletes összeszerelési utasítások megtalálhatók, ha követi a linket.

Viszont módosítanom kellett a vezérlőrendszert. A szervók vezérléséhez Arduino Uno -t használok érzékelőpajzzsal. Az érzékelőpajzs sokat segít a kábelezés egyszerűsítésében, és megkönnyíti a szervók külső áramellátását is. 12 V-os 6A-es tápegységet használok a lefelé irányuló modulon (6V) keresztül az érzékelőpajzshoz.

Megjegyzés a szervókról. A Taobao -tól vásárolt MG 996 HR szervókat használom, de a minőség nagyon rossz. Határozottan olcsó kínai leütés. A könyökcsuklóhoz tartozó nem nyújtott elegendő nyomatékot, és nagy terhelés mellett egyszer is füstölni kezdett. A könyökcsukló szervót le kellett cserélnem egy jobb minőségű gyártó MG 946 HR -jére.

Röviden - vásároljon minőségi szervókat. Ha varázsfüst jön ki a szervóból, használjon jobb szervókat. A 6V nagyon biztonságos feszültség, ne növelje. Nem növeli a nyomatékot, de károsíthatja a szervókat.

Szervók bekötése az alábbiak szerint:

bázis 2

váll2 4 váll1 3

könyök 6

fogó 8

csukló 11

Nyugodtan változtassa meg, amíg eszébe sem jut az Arduino vázlat megváltoztatása.

Miután befejezte a hardvert, nézzük meg a nagyobb képet!

3. lépés: MoveIt RobotCommander interfész

MoveIt RobotCommander interfész
MoveIt RobotCommander interfész

Akkor most mi legyen? Miért van szüksége a MoveIt -re és a ROS -ra? Nem tudod csak irányítani a kart közvetlenül az Arduino kódon keresztül?

Igen tudsz.

Oké, most mit szólnál ahhoz, ha GUI -t vagy Python/C ++ kódot használnál a robotpóz biztosításához? Arduino képes erre?

Féle. Ehhez meg kell írnia egy fordított kinematikai megoldót, amely felveszi a robotpózot (fordítási és forgáskoordináták 3D térben), és át kell alakítani a szervók közös szögüzeneteivé.

Annak ellenére, hogy maga is meg tudja csinálni, baromi sok munka vár rá. Tehát a MoveIt és a ROS szép felületet biztosít az IK (inverz kinematika) megoldó számára, hogy elvégezze az összes nehéz trigonometrikus emelést az Ön számára.

Rövid válasz: Igen, megtehet egy egyszerű robotkart, amely végrehajtja a kódolt Arduino vázlatot az egyik pózról a másikra való áttéréshez. De ha intelligensebbé szeretné tenni robotját, és számítógépes látási képességeket szeretne hozzáadni, akkor a MoveIt és a ROS az út.

Készítettem egy nagyon egyszerűsített diagramot, amely elmagyarázza a MoveIt keretrendszer működését. Esetünkben ez még egyszerűbb lesz, mivel nem kapunk visszajelzést a szervóinktól, és a /joint_states témát használva biztosítjuk a robotvezérlő számára a szervók szögeit. Csak egy alkatrészünk hiányzik, ez a robotvezérlő.

Mire várunk? Írjunk néhány robotvezérlőt, így a robotunk… tudod, jobban irányítható.

4. lépés: Arduino kód a robotvezérlőhöz

Arduino kód a robotvezérlőhöz
Arduino kód a robotvezérlőhöz
Arduino kód a robotvezérlőhöz
Arduino kód a robotvezérlőhöz
Arduino kód a robotvezérlőhöz
Arduino kód a robotvezérlőhöz

Esetünkben a robotvezérlő Arduino Uno, amely ROS csomópontot futtat rosseria -val. Az Arduino vázlatkódja ehhez a lépéshez csatolt, és a GitHubon is elérhető.

Az Arduino Uno -n futó ROS -csomópont alapvetően feliratkozik a MoveIt -t futtató számítógépen közzétett /JointState témára, majd átalakítja a tömb illesztési szögeit radiánból fokra, és átadja azokat szervóknak a szabványos Servo.h könyvtár segítségével.

Ez a megoldás kissé vagány, és nem az, ahogy az ipari robotokkal történik. Ideális esetben a mozgáspályát a /FollowJointState témában kell közzétennie, majd visszajelzést kapnia a /JointState témáról. De a karunkban a hobbi szervók nem tudnak visszajelzést adni, ezért csak előfizetünk a /JointState témára, amelyet a FakeRobotController node publikált. Alapvetően azt fogjuk feltételezni, hogy bármilyen szögből átvittük a szervókat, az ideális.

Ha többet szeretne megtudni a rosserial működéséről, olvassa el az alábbi oktatóanyagokat

wiki.ros.org/rosserial_arduino/Tutorials

Miután feltöltötte a vázlatot az Arduino Uno -ba, csatlakoztatnia kell azt a soros kábellel az ROS telepítést futtató számítógéphez.

Az egész rendszer megjelenítéséhez hajtsa végre az alábbi parancsokat

roslaunch my_arm_xacro demo.launch rviz_tutorial: = igaz

sudo chmod -R 777 /dev /ttyUSB0

rosrun rosserial_python serial_node.py _port: =/dev/ttyUSB0 _baud: = 115200

Az interaktív jelölők segítségével az RVIZ -ben mozgathatja a robotkart egy pózba, majd nyomja meg a Tervezés és Végrehajtás gombot, hogy ténylegesen a helyzetbe kerüljön.

Varázslat!

Most készen állunk a Python kód írására a rámpa tesztünkhöz. Hát majdnem…

5. lépés: (Opcionális) IKfast beépülő modul létrehozása

Alapértelmezés szerint a MoveIt azt javasolja, hogy használjon KDL kinematikai megoldót, amely valójában nem működik kevesebb, mint 6 DOF karral. Ha alaposan követi ezt az oktatóanyagot, akkor észre fogja venni, hogy az RVIZ karmodellje nem tud olyan pózokba menni, amelyeket a kar konfigurációjának támogatnia kell.

Az ajánlott megoldás az egyéni kinematikai megoldó létrehozása az OpenRave használatával. Ez nem olyan nehéz, de meg kell építenie, és a források függőségei vagy a dokkoló tárolóját kell használni.

Az eljárás nagyon jól dokumentált ebben az oktatóanyagban. Megerősítették, hogy működik az Ubuntu 16.04 és ROS Kinetic rendszert futtató virtuális gépen.

A következő parancsot használtam a megoldó létrehozásához

openrave.py -adatbázis inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000

majd futott

rosrun moveit_kinematics create_ikfast_moveit_plugin.py teszt_robot kar my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp

a MoveIt IKfast beépülő modul létrehozásához.

Az egész eljárás kissé időigényes, de nem túl nehéz, ha alaposan követi az oktatóanyagot. Ha kérdése van ezzel a résszel kapcsolatban, kérjük, vegye fel velem a kapcsolatot megjegyzésekben vagy PM -ben.

6. lépés: A rámpa teszt

A rámpa teszt!
A rámpa teszt!
A rámpa teszt!
A rámpa teszt!

Most készen állunk arra, hogy kipróbáljuk a rámpa tesztet, amelyet a ROS MoveIt Python API segítségével hajtunk végre.

A Python -kód ehhez a lépéshez van csatolva, és a github lerakatban is elérhető. Ha nincs rámpája, vagy másik tesztet szeretne kipróbálni, akkor meg kell változtatnia a robot pozícióját a kódban. Az első végrehajtáshoz

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

a terminálban, amikor már fut az RVIZ és a MoveIt. Ezután helyezze a robotot az interaktív jelölőkkel a kívánt pozícióba. A pozíció és tájolás értékei megjelennek a terminálon. Csak másolja őket a Python kódba.

A rámpa próbaüzem végrehajtásához

rosrun my_arm_xacro pick/pick_2.py

az RVIZ és a rosserial csomópont már fut.

Maradjon velünk a cikk harmadik részéhez, ahol sztereó kamerát fogok használni az objektumok észlelésére, és végrehajtom a pick and place folyamatot az egyszerű tárgyakhoz!

Ajánlott: