ROS MoveIt robotkäsi 2. osa: robotikontroller: 6 sammu
ROS MoveIt robotkäsi 2. osa: robotikontroller: 6 sammu
Anonim
Image
Image

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

Artikli eelmises osas oleme loonud oma robotkäe jaoks URDF- ja XACRO -failid ning käivitanud RVIZ -i, et juhtida meie robotkätt simuleeritud keskkonnas.

Seekord teeme seda tõelise robotkäega! Lisame haaratsi, kirjutame robotkontrolleri ja (valikuliselt) genereerime IKfast pöördkineetika lahendaja.

Geronimo!

Samm: haaratsi lisamine

Gripperi lisamine
Gripperi lisamine
Gripperi lisamine
Gripperi lisamine
Gripperi lisamine
Gripperi lisamine

Haaratsi lisamine oli esialgu natuke segane, seega jätsin selle osa eelmises artiklis vahele. See osutus lõpuks mitte nii raskeks.

Haaratsi linkide ja liigeste lisamiseks peate oma URDF -faili muutma.

Selle sammu juurde on lisatud minu roboti muudetud URDF -fail. Põhimõtteliselt järgib see sama loogikat nagu õlaosa, lisasin just kolm uut linki (claw_base, claw_r ja claw_l) ja kolm uut liigendit (vuuk5 on fikseeritud ja vuuk6, liigend7 on pöördliigendid).

Pärast URDF -faili muutmist peate värskendama ka MoveIti loodud paketti ja xacro -faili, kasutades MoveIti häälestusabi.

Käivitage häälestusabiline järgmise käsuga

roslaunch moveit_setup_assistant setup_assistant.launch

Klõpsake nuppu Redigeeri olemasolevat MoveIt Configuration ja valige kaust oma MoveIt paketiga.

Lisage uus planeerimisrühma haarats (haaratsi linkide ja liigestega) ning ka lõpp -efekt. Minu seaded on allolevatel ekraanipiltidel. Pange tähele, et te ei vali haaratsi jaoks kinemaatilist lahendajat, see pole vajalik. Looge pakett ja kirjutage failid üle.

Jookse

kassi teha

käsku oma catkini tööruumis.

Olgu, nüüd on meil käepide haaratsiga!

2. samm: käe ehitamine

Käe ehitamine
Käe ehitamine
Käe ehitamine
Käe ehitamine
Käe ehitamine
Käe ehitamine
Käe ehitamine
Käe ehitamine

Nagu ma juba mainisin, on käsivarre 3D mudeli teinud Juergenlessner, tänan teid hämmastava töö eest. Üksikasjalikud monteerimisjuhised leiate, kui järgite linki.

Pidin siiski juhtimissüsteemi muutma. Servode juhtimiseks kasutan Arduino Unot koos andurikilbiga. Andurikilp aitab palju juhtmeid lihtsustada ja hõlbustab ka servode välise toite pakkumist. Ma kasutan 12V 6A toiteadapterit, mis on ühendatud alandamismooduli (6V) kaudu andurikilbiga.

Märkus servode kohta. Ma kasutan Taobaost ostetud MG 996 HR servosid, kuid kvaliteet on tõesti halb. See on kindlasti odav Hiina koputus. Küünarliigese jaoks mõeldud ei pakkunud piisavalt pöördemomenti ja hakkas isegi suure koormuse korral kord suitsema. Pidin asendama küünarliigese servo parema kvaliteediga tootja MG 946 HR vastu.

Lühidalt - ostke kvaliteetseid servosid. Kui teie servodest väljub võlusuits, kasutage paremaid servosid. 6V on väga ohutu pinge, ärge seda suurendage. See ei suurenda pöördemomenti, kuid võib servosid kahjustada.

Servode juhtmestik järgmiselt:

alus 2

õlg 2 4 õlg 1 3

küünarnukk 6

haarats 8

randme 11

Muutke seda julgelt, kui mäletate ka Arduino visandit.

Kui olete riistvaraga lõpetanud, vaatame laiemat pilti!

Samm 3: MoveIt RobotCommanderi liides

MoveIt RobotCommanderi liides
MoveIt RobotCommanderi liides

Niisiis, mis nüüd? Miks te ikkagi MoveIt ja ROS -i vajate? Kas te ei saa lihtsalt Arduino koodi kaudu kätt juhtida?

Jah, sa saad.

Okei, kuidas oleks nüüd kasutada GUI -d või Pythoni/C ++ koodi, et pakkuda robotipositsiooni, kuhu minna? Kas Arduino saab seda teha?

Mingis mõttes. Selleks peate kirjutama pöördkinemaatika lahendaja, mis võtab roboti poosi (tõlke- ja pöörlemiskoordinaadid 3D -ruumis) ja teisendab selle servode ühisnurga sõnumiteks.

Hoolimata sellest, et saate seda ise teha, on see kuradima palju tööd teha. Niisiis, MoveIt ja ROS pakuvad toredat liidest IK (pöördkinemaatika) lahendajale, et teha teie jaoks kõik raske trigonomeetriline tõstmine.

Lühike vastus: Jah, saate teha lihtsa robotkäe, mis täidab kõvasti kodeeritud Arduino visandi, et minna ühelt poosilt teisele. Aga kui soovite oma robotit intelligentsemaks muuta ja lisada arvuti nägemisvõimalusi, on MoveIt ja ROS õige tee.

Tegin väga lihtsustatud skeemi, mis selgitas, kuidas MoveIti raamistik töötab. Meie puhul läheb see veelgi lihtsamaks, kuna meil pole tagasisidet oma servodelt ja kasutame teemat /joint_states, et pakkuda robotkontrollerile servode nurki. Meil on puudu ainult üks komponent, mis on robotkontroller.

Mida me ootame? Kirjutame mõned robotikontrollerid, nii et meie robot oleks… teate, paremini juhitav.

Samm: robotikontrolleri Arduino kood

Arduino kood robotikontrollerile
Arduino kood robotikontrollerile
Arduino kood robotikontrollerile
Arduino kood robotikontrollerile
Arduino kood robotikontrollerile
Arduino kood robotikontrollerile

Meie puhul on robotkontrolleriks Arduino Uno, kes juhib ROS -sõlme koos rosserialiga. Sellele sammule on lisatud Arduino visandikood ja see on saadaval ka GitHubis.

Arduino Uno peal töötav ROS -sõlm tellib põhimõtteliselt /JointState teema, mis on avaldatud arvutis, kus töötab MoveIt, ja teisendab seejärel massiivi liigendinurgad radiaanidest kraadideks ja edastab need Servo.h standardse raamatukogu abil servodele.

See lahendus on natuke hacky ja mitte see, kuidas seda tehakse tööstusrobotitega. Ideaalis peaksite avaldama liikumistrajektoori teemal /FollowJointState ja seejärel saama tagasisidet /JointState teema kohta. Kuid meie käes ei saa hobi servod tagasisidet anda, seega tellime lihtsalt otse /JointState teema, mille avaldab FakeRobotController node. Põhimõtteliselt eeldame, et mis tahes nurgad servodele edastatakse ideaalselt.

Rosseriaali toimimise kohta lisateabe saamiseks lugege järgmisi õpetusi

wiki.ros.org/rosserial_arduino/Tutorials

Pärast eskiisi Arduino Unosse üleslaadimist peate selle ühendama jadakaabliga arvutiga, kus töötab teie ROS -i install.

Kogu süsteemi avamiseks täitke järgmised käsud

roslaunch my_arm_xacro demo.launch rviz_tutorial: = tõsi

sudo chmod -R 777 /dev /ttyUSB0

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

Nüüd saate RVIZ -is kasutada interaktiivseid markereid, et viia robotkäsi asendisse ja seejärel vajutada Plaani ja Käivita, et see tegelikult asendisse liiguks.

Maagia!

Nüüd oleme valmis oma rampkatse jaoks Pythoni koodi kirjutama. Noh, peaaegu…

Samm: (valikuline) IKfasti pistikprogrammi loomine

Vaikimisi soovitab MoveIt kasutada KDL -i kinemaatilist lahendajat, mis tegelikult ei tööta vähem kui 6 DOF -haaraga. Kui te seda õpetust tähelepanelikult jälgite, märkate, et RVIZ -i käemudel ei saa minna teatud asenditesse, mida peaks toetama käe konfiguratsioon.

Soovitatav lahendus on luua kohandatud kinemaatika lahendaja, kasutades OpenRave'i. See pole nii keeruline, kuid peate selle üles ehitama ja see sõltub allikast või kasutab doki konteinerit, olenevalt sellest, kumb teile meeldib.

Menetlus on selles õpetuses väga hästi dokumenteeritud. On kinnitatud, et see töötab VM -is, mis töötab Ubuntu 16.04 ja ROS Kinetic.

Lahendaja genereerimiseks kasutasin järgmist käsku

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

ja siis jooksis

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

MoveIt IKfast pistikprogrammi loomiseks.

Kogu protseduur on natuke aeganõudev, kuid mitte väga raske, kui juhendit hoolikalt jälgida. Kui teil on selle osa kohta küsimusi, võtke minuga kommentaarides või PM -is ühendust.

6. samm: rampkatse

Ramp test!
Ramp test!
Ramp test!
Ramp test!

Nüüd oleme valmis proovima rambitesti, mille teostame ROS MoveIt Python API abil.

Selle sammu juurde on lisatud Pythoni kood ja see on saadaval ka githubi hoidlas. Kui teil pole kaldteed või soovite proovida mõnda muud testi, peate muutma roboti kujutisi koodis. Selle esimese täitmise jaoks

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

terminalis, kui juba töötab RVIZ ja MoveIt. Seejärel viige interaktiivsete markeritega robot soovitud asendisse. Asukoha ja orientatsiooni väärtused kuvatakse terminalis. Lihtsalt kopeerige need Pythoni koodi.

Kaldtee proovitöö tegemiseks

rosrun my_arm_xacro pick/pick_2.py

RVIZ ja rosseriaalsõlm juba töötavad.

Jälgige artikli kolmandat osa, kus ma kasutan objektide tuvastamiseks stereokaamerat ja teostan lihtsate objektide jaoks valiku ja paigutuse torujuhtme!