Sisukord:
2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
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
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
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
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
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
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!