Ang ROS MoveIt Robotic Arm Bahagi 2: Robot Controller: 6 Mga Hakbang
Ang ROS MoveIt Robotic Arm Bahagi 2: Robot Controller: 6 Mga Hakbang
Anonim
Image
Image

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

Sa nakaraang bahagi ng artikulo lumikha kami ng mga file ng URDF at XACRO para sa aming robotic arm at inilunsad ang RVIZ upang makontrol ang aming robotic arm sa simulate na kapaligiran.

Sa oras na ito gagawin namin ito sa totoong robotic arm! Magdaragdag kami ng mahigpit na pagkakahawak, magsulat ng isang robot controller at (opsyonal) na bumuo ng IKfast inverse kinematics solver.

Geronimo!

Hakbang 1: Pagdaragdag ng Gripper

Pagdaragdag ng Gripper
Pagdaragdag ng Gripper
Pagdaragdag ng Gripper
Pagdaragdag ng Gripper
Pagdaragdag ng Gripper
Pagdaragdag ng Gripper

Ang pagdaragdag ng gripper ay medyo nakalilito sa una, kaya nilaktawan ko ang bahaging ito sa nakaraang artikulo. Ito ay naging hindi masyadong mahirap kung tutuusin.

Kakailanganin mong baguhin ang iyong URDF file upang magdagdag ng mga gripper link at kasukasuan.

Ang binagong URDF file para sa aking robot ay naka-attach sa hakbang na ito. Karaniwan sumusunod ito sa parehong lohika tulad ng bahagi ng braso, nagdagdag lamang ako ng tatlong bagong mga link (claw_base, claw_r at claw_l) at tatlong bagong mga kasukasuan (ang joint5 ay naayos, at ang joint6, joint7 ay mga revolute joint).

Matapos mong mabago ang iyong URDF file kakailanganin mo ring i-update ang nabuong MoveIt na package at xacro file sa pamamagitan ng paggamit ng MoveIt setup assistant.

Ilunsad ang katulong sa pag-setup gamit ang sumusunod na utos

roslaunch moveit_setup_assistant setup_assistant.launch

Mag-click sa I-edit ang Umiiral na Pag-configure ng MoveIt at piliin ang folder gamit ang iyong MoveIt package.

Magdagdag ng bagong gripper ng pangkat sa pagpaplano (na may mga link at kasukasuan para sa gripper) at isang end effector din. Ang aking mga setting ay nasa mga screenshot sa ibaba. Pansinin na hindi mo pipiliin ang mga kinematics solver para sa gripper, hindi ito kinakailangan. Bumuo ng package at patungan ang mga file.

Takbo

catkin gumawa

utos sa iyong workspace ng catkin.

O sige, ngayon mayroon kaming braso na may gripper!

Hakbang 2: Pagbuo ng Arm

Pagbuo ng Arm
Pagbuo ng Arm
Pagbuo ng Arm
Pagbuo ng Arm
Pagbuo ng Arm
Pagbuo ng Arm
Pagbuo ng Arm
Pagbuo ng Arm

Tulad ng nabanggit ko bago ang modelo ng braso 3D ay ginawa ng Juergenlessner, salamat sa isang kamangha-manghang gawain. Ang detalyadong mga tagubilin sa pagpupulong ay matatagpuan kung susundin mo ang link.

Kailangan kong baguhin ang control system. Gumagamit ako ng Arduino Uno na may sensor ng kalasag para sa pagkontrol sa mga servo. Ang sensor ng kalasag ay nakakatulong ng malaki sa pagpapasimple ng mga kable at ginagawang madali upang maibigay ang panlabas na lakas sa mga servo. Gumagamit ako ng 12V 6A power adapter na naka-wire sa pamamagitan ng step-down module (6V) sa Sensor Shield.

Isang tala sa mga servo. Gumagamit ako ng mga binili na servo ng MG 996 HR mula sa Taobao, ngunit ang kalidad ay talagang masama. Tiyak na ito ay isang murang pag-knock-off ng Intsik. Ang isa para sa magkasanib na siko ay hindi nagbigay ng sapat na metalikang kuwintas at nagsimulang mag-fuming minsan sa ilalim ng mabibigat na karga. Kailangan kong palitan ang elbow joint servo ng MG 946 HR mula sa isang mas mahusay na tagagawa ng kalidad.

Mahabang kwento - bumili ng kalidad ng mga servo. Kung ang magic usok ay lalabas sa iyong mga servo, gumamit ng mas mahusay na mga servo. Ang 6V ay isang ligtas na boltahe, huwag dagdagan ito. Hindi nito tataas ang metalikang kuwintas, ngunit maaaring makapinsala sa mga servo.

Mga kable para sa mga servos tulad ng sumusunod:

batayan 2

balikat2 4shoulder1 3

siko 6

mahigpit na pagkakahawak 8

pulso 11

Huwag mag-atubiling baguhin ito hangga't naaalala mo ring baguhin ang Arduino sketch.

Matapos mong matapos ang gamit sa hardware, tingnan natin ang mas malaking larawan!

Hakbang 3: Ilipat ang RobotCommander Interface

IlipatIt RobotCommander Interface
IlipatIt RobotCommander Interface

Kaya, ngayon ano? Bakit kailangan mo pa rin ng MovIt at ROS? Hindi mo ba makontrol ang braso sa pamamagitan ng Arduino code nang direkta?

Oo kaya mo.

Okay, ngayon paano ang tungkol sa paggamit ng GUI o Python / C ++ code upang magbigay ng robot na magpose upang puntahan? Kaya ba ni Arduino?

Medyo. Para doon kakailanganin mong magsulat ng isang kabaligtaran na solver ng kinematics na kukuha ng isang robot na magpose (pagsasalin at pag-ikot ng mga coordinate sa 3D space) at i-convert ito sa magkasanib na mga mensahe ng anggulo para sa mga servos.

Sa kabila ng magagawa mo ito sa iyong sarili, ito ay impiyerno ng maraming gawain na dapat gawin. Kaya, ang MoveIt at ROS ay nagbibigay ng isang magandang interface para sa solver ng IK (kabaligtaran na kinematics) na gawin ang lahat ng mabibigat na pag-aangat na trigonometrical para sa iyo.

Maikling sagot: Oo, maaari kang gumawa ng isang simpleng robot na braso na magsasagawa ng isang hard-code na Arduino sketch upang pumunta mula sa isang pose patungo sa isa pa. Ngunit kung nais mong gawing mas matalino ang iyong robot at magdagdag ng mga kakayahan sa paningin sa computer, ang MovIt at ROS ang paraan upang pumunta.

Gumawa ako ng isang pinasimple na diagram na nagpapaliwanag kung paano gumagana ang balangkas ng MovIt. Sa aming kaso ito ay magiging mas simple, dahil wala kaming feedback mula sa aming mga servos at gagamitin / magkasamang paksa ng_states upang magbigay ng robot na may kontrol sa mga anggulo para sa mga servos. Kulang lang kami sa isang bahagi na kung saan ay ang robot controller.

Ano pa ang hinihintay natin? Sumulat tayo ng ilang mga tagakontrol ng robot, kaya ang aming robot ay magiging… alam mo, mas makokontrol.

Hakbang 4: Arduino Code para sa Robot Controller

Arduino Code para sa Robot Controller
Arduino Code para sa Robot Controller
Arduino Code para sa Robot Controller
Arduino Code para sa Robot Controller
Arduino Code para sa Robot Controller
Arduino Code para sa Robot Controller

Sa aming kaso ang Arduino Uno na nagpapatakbo ng isang ROS node na may rosserial ay ang magiging robot controller. Ang Arduino sketch code ay nakakabit sa hakbang na ito at magagamit din sa GitHub.

Ang ROS node na tumatakbo sa Arduino Uno ay karaniwang nag-subscribe sa / JointState na paksang nai-publish sa computer na nagpapatakbo ng MovIt at pagkatapos ay pinapalitan ang magkasanib na mga anggulo mula sa array mula sa mga radian hanggang sa degree at ipinapasa ang mga ito sa mga servos gamit ang karaniwang Servo.h library.

Ang solusyon na ito ay medyo hacky at hindi kung paano ito ginagawa sa mga pang-industriya na robot. Perpektong dapat mong i-publish ang paggalaw ng paggalaw sa / FollowJointState na paksa at pagkatapos ay matanggap ang puna sa / JointState na paksa. Ngunit sa aming braso ang mga hobby servos ay hindi maaaring magbigay ng puna, kaya direkta lamang kaming mag-subscribe sa / JointState na paksa, na nai-publish ng FakeRobotController node. Talaga ay ipagpapalagay namin na ang anumang mga anggulo na ipinasa namin sa mga servo ay perpektong naisakatuparan.

Para sa karagdagang impormasyon sa kung paano gumagana ang rosserial maaari kang kumonsulta sa mga sumusunod na tutorial

wiki.ros.org/rosserial_arduino/Tutorials

Matapos mong i-upload ang sketch sa Arduino Uno, kakailanganin mong ikonekta ito sa serial cable sa computer na nagpapatakbo ng iyong pag-install ng ROS.

Upang ilabas ang buong system ay ipatupad ang mga sumusunod na utos

roslaunch my_arm_xacro demo.launch rviz_tutorial: = totoo

sudo chmod -R 777 / dev / ttyUSB0

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

Maaari mo na ngayong gamitin ang mga interactive marker sa RVIZ upang ilipat ang braso ng robot sa isang pose at pagkatapos ay pindutin ang Plan at Ipatupad para ito na talagang lumipat sa posisyon.

Magic!

Handa na kaming magsulat ng Python code para sa aming ramp test. Sa gayon, halos …

Hakbang 5: (Opsyonal) Bumubuo ng IKfast Plug-in

Bilang default, nagmumungkahi ito ng paggamit ng solver ng KDL kinematics, na hindi talaga gumagana nang mas mababa sa 6 na sandata ng DOF. Kung susundan mo ng mabuti ang tutorial na ito pagkatapos ay mapapansin mo na ang modelo ng braso sa RVIZ ay hindi maaaring pumunta sa ilang mga poses na dapat suportahan ng pagsasaayos ng braso.

Ang inirekumendang solusyon ay ang lumikha ng mga pasadyang solem na kinematics gamit ang OpenRave. Hindi ito mahirap, ngunit kakailanganin mong buuin ito at mga dependency mula sa mapagkukunan o gamitin ang lalagyan ng pantalan, alinman ang gusto mo.

Ang pamamaraan ay napakahusay na dokumentado sa tutorial na ito. Kumpirmadong gagana ito sa VM na tumatakbo sa Ubuntu 16.04 at ROS Kinetic.

Ginamit ko ang sumusunod na utos upang makabuo ng solver

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

at saka tumakbo

rosrun ilipat

upang makabuo ng MoveIt IKfast plug-in.

Ang buong pamamaraan ay medyo gumugugol ng oras, ngunit hindi napakahirap kung susundan mo ng mabuti ang tutorial. Kung mayroon kang mga katanungan tungkol sa bahaging ito, mangyaring makipag-ugnay sa akin sa mga komento o PM.

Hakbang 6: Ang Ramp Test

Ang Ramp Test!
Ang Ramp Test!
Ang Ramp Test!
Ang Ramp Test!

Handa na kaming subukan ang ramp test, na isasagawa namin gamit ang ROS MoveIt Python API.

Ang code ng Python ay naka-attach sa hakbang na ito at magagamit din sa Repository ng github. Kung wala kang isang rampa o nais na subukan ang isa pang pagsubok kakailanganin mong baguhin ang mga posing ng robot sa code. Para sa unang pagpapatupad

rostopic echo / rviz_moveit_motion_planning_display / robot_interaction_interactive_marker_topic / feedback

sa terminal kapag tumatakbo na ang RVIZ at MoveIt. Pagkatapos ilipat ang robot na may mga interactive marker sa nais na posisyon. Ang mga halaga ng posisyon at oryentasyon ay ipapakita sa terminal. Kopyahin lamang ang mga ito sa code ng Python.

Upang maipatupad ang ramp test run

rosrun my_arm_xacro pick / pick_2.py

na tumatakbo na ang RVIZ at rosserial node.

Abangan ang pangatlong bahagi ng artikulo, kung saan gagamit ako ng stereo camera para sa pagtuklas ng bagay at magpatupad ng pick and place pipeline para sa mga simpleng bagay!