ROS MoveIt -robottiosa Osa 2: Robottiohjain: 6 vaihetta
ROS MoveIt -robottiosa Osa 2: Robottiohjain: 6 vaihetta
Anonim
Image
Image

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

Artikkelin edellisessä osassa olemme luoneet URDF- ja XACRO -tiedostot robottivarrellemme ja lanseeranneet RVIZ: n ohjaamaan robottivartta simuloidussa ympäristössä.

Tällä kertaa teemme sen aidolla robottivarrella! Lisäämme tarttujan, kirjoitamme robottiohjaimen ja (valinnainen) IKfast -käänteiskinematiikan ratkaisijan.

Geronimo!

Vaihe 1: Gripperin lisääminen

Gripperin lisääminen
Gripperin lisääminen
Gripperin lisääminen
Gripperin lisääminen
Gripperin lisääminen
Gripperin lisääminen

Tarttimen lisääminen oli aluksi hieman hämmentävää, joten ohitin tämän osan edellisessä artikkelissa. Se ei loppujen lopuksi osoittautunut niin vaikeaksi.

Sinun on muokattava URDF -tiedostoasi tarttujien linkkien ja liitosten lisäämiseksi.

Robotin muokattu URDF -tiedosto on liitetty tähän vaiheeseen. Pohjimmiltaan se noudattaa samaa logiikkaa kuin varsiosa, lisäsin juuri kolme uutta linkkiä (claw_base, claw_r ja claw_l) ja kolme uutta liitosta (liitos5 on kiinteä ja liitos6, liitos7 ovat kierreliitoksia).

Kun olet muokannut URDF -tiedostoa, sinun on myös päivitettävä MoveIt -paketti ja xacro -tiedosto käyttämällä MoveIt -asennusapuria.

Käynnistä asennusapu seuraavalla komennolla

roslaunch moveit_setup_assistant setup_assistant.launch

Napsauta Muokkaa olemassa olevaa MoveIt -määritystä ja valitse kansio, jossa on MoveIt -paketti.

Lisää uusi suunnitteluryhmän tarttuja (tarttujan linkit ja nivelet) ja myös päätelaite. Asetukseni ovat alla olevissa kuvakaappauksissa. Huomaa, että et valitse kinematiikan ratkaisijaa tarttujalle, se ei ole välttämätöntä. Luo paketti ja korvaa tiedostot.

Juosta

kissanvalmistaja

komento catkin -työtilassa.

Okei, nyt meillä on käsivarsi tarttujalla!

Vaihe 2: Varren rakentaminen

Varren rakentaminen
Varren rakentaminen
Varren rakentaminen
Varren rakentaminen
Varren rakentaminen
Varren rakentaminen
Varren rakentaminen
Varren rakentaminen

Kuten mainitsin ennen Juergenlessnerin tekemää käsivarsien 3D -mallia, kiitos upeasta työstä. Yksityiskohtaiset asennusohjeet löytyvät, jos seuraat linkkiä.

Jouduin kuitenkin muuttamaan ohjausjärjestelmää. Käytän servojen ohjaamiseen Arduino Unoa, jossa on anturisuoja. Anturisuoja auttaa paljon yksinkertaistamaan johdotusta ja helpottaa myös ulkoisen tehon syöttämistä servoille. Käytän 12V 6A virtalähdettä, joka on kytketty alasmoduulin (6V) kautta anturisuojaan.

Huomautus servoista. Käytän Taobaosta ostettuja MG 996 HR -servoja, mutta laatu on todella huono. Se on ehdottomasti halpa kiinalainen knock-off. Kyynärpääliitin ei tuottanut tarpeeksi vääntöä ja alkoi jopa höyryämään kerran raskaalla kuormituksella. Minun oli vaihdettava kyynärpääservo MG 946 HR -laitteeseen laadukkaammalta valmistajalta.

Lyhyesti sanottuna - osta laadukkaita servoja. Jos servostasi tulee maagista savua, käytä parempia servoja. 6V on erittäin turvallinen jännite, älä lisää sitä. Se ei lisää vääntömomenttia, mutta voi vahingoittaa servoja.

Servojen johdotus seuraavasti:

pohja 2

olkapää2 4 -lapa1 3

kyynärpää 6

tarttuja 8

ranne 11

Voit vapaasti muuttaa sitä niin kauan kuin muistat myös muuttaa Arduinon luonnosta.

Kun olet lopettanut laitteiston käytön, katsotaanpa suurempaa kuvaa!

Vaihe 3: MoveIt RobotCommander -käyttöliittymä

MoveIt RobotCommander -käyttöliittymä
MoveIt RobotCommander -käyttöliittymä

Mitä nyt? Miksi tarvitset MoveIt ja ROS? Etkö voi vain hallita käsivartta suoraan Arduino -koodin kautta?

Kyllä sinä voit.

Okei, entäpä GUI- tai Python/C ++ -koodin käyttö robottiasennon tarjoamiseen? Voiko Arduino tehdä sen?

Tavallaan. Tätä varten sinun on kirjoitettava käänteinen kinematiikan ratkaisija, joka ottaa robotin asennon (käännös- ja kiertokoordinaatit 3D -tilassa) ja muuntaa sen servojen yhteisiin kulmaviesteihin.

Vaikka voit tehdä sen itse, se on helvetin paljon työtä. Joten, MoveIt ja ROS tarjoavat mukavan käyttöliittymän IK (käänteiskinematiikka) -ratkaisijalle tekemään kaikki raskaat trigonometriset nostot puolestasi.

Lyhyt vastaus: Kyllä, voit tehdä yksinkertaisen robottivarren, joka suorittaa kovakoodatun Arduino-luonnoksen siirtyäkseen asennosta toiseen. Mutta jos haluat tehdä robotistasi älykkäämmän ja lisätä tietokonenäköominaisuuksia, MoveIt ja ROS ovat oikea tapa edetä.

Tein hyvin yksinkertaistetun kaavion, jossa selitin MoveIt -kehyksen toimintaa. Meidän tapauksessamme se tulee olemaan vieläkin yksinkertaisempaa, koska meillä ei ole palautetta servoistamme ja aiomme käyttää /joint_states aihetta tarjotaksemme robottiohjaimelle servojen kulmat. Meiltä puuttuu vain yksi komponentti, joka on robottiohjain.

Mitä me odotamme? Kirjoitetaan joitain robottiohjaimia, jotta robotti olisi… hallittavampi.

Vaihe 4: Arduino -koodi robottiohjaimelle

Arduino -koodi robottiohjaimelle
Arduino -koodi robottiohjaimelle
Arduino -koodi robottiohjaimelle
Arduino -koodi robottiohjaimelle
Arduino -koodi robottiohjaimelle
Arduino -koodi robottiohjaimelle

Meidän tapauksessamme Arduino Uno, joka käyttää ROS -solmua rosserialin kanssa, on robotin ohjain. Arduino -luonnoskoodi on liitetty tähän vaiheeseen ja saatavilla myös GitHubissa.

Arduino Unolla toimiva ROS -solmu tilaa periaatteessa MoveIt -tietokoneessa julkaistun /JointState -aiheen ja muuntaa sitten taulukon nivelkulmat radiaaneista asteiksi ja välittää ne servoille käyttämällä Servo.h -standardikirjastoa.

Tämä ratkaisu on hieman hämmentävä eikä se, miten se tehdään teollisuusrobottien kanssa. Ihannetapauksessa sinun pitäisi julkaista liikeradat /FollowJointState -aiheessa ja saada sitten palautetta /JointState -aiheesta. Mutta käsivartemme harrastuspalvelut eivät voi antaa palautetta, joten tilaamme vain suoraan /JointState -aiheen, jonka FakeRobotController -solmu on julkaissut. Pohjimmiltaan oletamme, että kaikki kulmat, jotka välitimme servoille, suoritetaan ihanteellisesti.

Lisätietoja rosserialin toiminnasta saat seuraavista opetusohjelmista

wiki.ros.org/rosserial_arduino/Tutorials

Kun olet lähettänyt luonnoksen Arduino Unoon, sinun on liitettävä se sarjakaapelilla tietokoneeseen, jossa on ROS -asennus.

Avaa koko järjestelmä suorittamalla seuraavat komennot

roslaunch my_arm_xacro demo.launch rviz_tutorial: = totta

sudo chmod -R 777 /dev /ttyUSB0

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

Nyt voit käyttää RVIZ: n interaktiivisia merkkejä siirtääksesi robotin käsivarren asentoon ja paina sitten Suunnittele ja Suorita, jotta se todella siirtyy asentoon.

Taika!

Nyt olemme valmiita kirjoittamaan Python -koodia ramppitestillemme. No melkein…

Vaihe 5: (valinnainen) IKfast-laajennuksen luominen

Oletuksena MoveIt ehdottaa KDL -kinematiikan ratkaisijaa, joka ei todellakaan toimi alle 6 DOF -käsivarren kanssa. Jos seuraat tätä opetusohjelmaa tarkasti, huomaat, että RVIZ -käsivarsimalli ei voi mennä joihinkin asentoihin, joita käsivarren kokoonpanon pitäisi tukea.

Suositeltava ratkaisu on luoda mukautettu kinematiikan ratkaisija OpenRavea käyttämällä. Se ei ole niin vaikeaa, mutta sinun on rakennettava se ja sen riippuvuudet lähteestä tai käytettävä telakointisäiliötä, kumpi haluat.

Menettely on hyvin dokumentoitu tässä opetusohjelmassa. Se on vahvistettu toimivan VM: ssä, jossa on Ubuntu 16.04 ja ROS Kinetic.

Käytin seuraavaa komentoa ratkaisijan luomiseen

openrave.py -tietokanta inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000

ja sitten juoksi

rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. Translation3D.0_1_2_f3.cpp

MoveIt IKfast -laajennuksen luomiseksi.

Koko menettely on hieman aikaa vievä, mutta ei kovin vaikea, jos seuraat opetusohjelmaa tarkasti. Jos sinulla on kysyttävää tästä osasta, ota minuun yhteyttä kommenteissa tai PM: ssä.

Vaihe 6: Ramppitesti

Ramppitesti!
Ramppitesti!
Ramppitesti!
Ramppitesti!

Nyt olemme valmiita kokeilemaan ramppitestiä, jonka suoritamme ROS MoveIt Python -sovellusliittymän avulla.

Python -koodi on liitetty tähän vaiheeseen ja saatavana myös github -arkistosta. Jos sinulla ei ole ramppia tai haluat kokeilla toista testiä, sinun on muutettava robotin asentoa koodissa. Sitä ensimmäistä suoritusta varten

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

päätelaitteessa, kun RVIZ ja MoveIt ovat jo käynnissä. Siirrä sitten robotti interaktiivisten merkkien kanssa haluttuun asentoon. Sijainti- ja suunta -arvot näytetään päätelaitteessa. Kopioi ne vain Python -koodiin.

Suorita ramppikoe

rosrun my_arm_xacro pick/pick_2.py

RVIZ ja rosserial -solmu ovat jo käynnissä.

Pysy kuulolla artikkelin kolmannessa osassa, jossa käytän stereokameraa esineiden havaitsemiseen ja suoritan pick and place -putkilinjan yksinkertaisille kohteille!