Բովանդակություն:

ROS MoveIt Robotic Arm Մաս 2. Robot Controller: 6 Steps
ROS MoveIt Robotic Arm Մաս 2. Robot Controller: 6 Steps

Video: ROS MoveIt Robotic Arm Մաս 2. Robot Controller: 6 Steps

Video: ROS MoveIt Robotic Arm Մաս 2. Robot Controller: 6 Steps
Video: ROS Developers LIVE CLASS #68: How to Control 2 Arm Robots with Moveit 2024, Նոյեմբեր
Anonim
Image
Image

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

Հոդվածի նախորդ մասում մենք ստեղծել ենք URDF և XACRO ֆայլեր մեր ռոբոտացված թևի համար և գործարկել ենք RVIZ- ը ՝ մոդելավորվող միջավայրում մեր ռոբոտային թևը վերահսկելու համար:

Այս անգամ մենք դա կանենք իրական ռոբոտացված թևով: Մենք կավելացնենք բռնիչը, կգրենք ռոբոտի վերահսկիչ և (ըստ ցանկության) կստեղծենք IKfast հակադարձ կինեմատիկայի լուծիչ:

Onերոնիմո!

Քայլ 1: Ավելացնելով բռնիչը

Ավելացնելով Gripper- ը
Ավելացնելով Gripper- ը
Ավելացնելով Gripper- ը
Ավելացնելով Gripper- ը
Ավելացնելով Gripper- ը
Ավելացնելով Gripper- ը

Gripper ավելացնելը սկզբում մի փոքր շփոթեցնող էր, ուստի ես բաց թողեցի այս հատվածը նախորդ հոդվածում: Ի վերջո, պարզվեց, որ այդքան էլ դժվար չէ:

Դուք պետք է փոփոխեք ձեր URDF ֆայլը `սեղմիչ հղումներ և հոդեր ավելացնելու համար:

Այս ռոբոտի URDF ֆայլը կցված է այս քայլին: Հիմնականում այն հետևում է նույն տրամաբանությանը, ինչ ձեռքի հատվածը, ես պարզապես ավելացրեցի երեք նոր օղակ (claw_base, claw_r և claw_l) և երեք նոր հոդեր (հոդը 5 -ն ամրագրված է, և հոդը 6, հոդը 7 պտտվող հոդեր են):

Ձեր URDF ֆայլը փոփոխելուց հետո ձեզ նույնպես պետք է թարմացնել MoveIt- ի գեներացված փաթեթը և xacro ֆայլը ՝ օգտագործելով MoveIt կարգաբերման օգնականը:

Գործարկեք տեղադրման օգնականը հետևյալ հրամանով

roslaunch moveit_setup_assistant setup_assistant.launch

Կտտացրեք Խմբագրել գոյություն ունեցող MoveIt կազմաձևին և ընտրեք ձեր MoveIt փաթեթով թղթապանակը:

Ավելացրեք պլանավորման խմբի նոր բռնակ (կցորդիչով հղումներով և հոդերով), ինչպես նաև վերջնական էֆեկտոր: Իմ կարգավորումները ներքևի սքրինշոթերում են: Ուշադրություն դարձրեք, որ բռնիչի համար կինեմատիկա լուծող չեք ընտրում, դա անհրաժեշտ չէ: Ստեղծեք փաթեթը և վերաշարադրեք ֆայլերը:

Վազիր

կատվի պատրաստում

հրաման ձեր կատկին աշխատանքային տարածքում:

Լավ, հիմա մենք ունենք թև բռնակով:

Քայլ 2. Կառուցեք թևը

Կառուցելով թևը
Կառուցելով թևը
Կառուցելով թևը
Կառուցելով թևը
Կառուցելով թևը
Կառուցելով թևը
Կառուցելով թևը
Կառուցելով թևը

Ինչպես արդեն նշեցի, թևի 3D մոդելը պատրաստվում է Juergenlessner- ի կողմից, շնորհակալություն զարմանալի աշխատանքի համար: Հավաքման մանրամասն հրահանգները կարող եք գտնել, եթե հետևեք հղմանը:

Չնայած ես ստիպված էի փոփոխել կառավարման համակարգը: Ես օգտագործում եմ Arduino Uno- ն Sensor վահանով `սերվերը վերահսկելու համար: Սենսորային վահանը շատ է օգնում էլեկտրագծերի պարզեցման գործում, ինչպես նաև հեշտացնում է սպասարկողներին արտաքին էներգիա տրամադրելը: Ես օգտագործում եմ 12V 6A հոսանքի ադապտեր, որը լարված է իջեցման մոդուլի (6V) միջոցով դեպի Sensor Shield:

Նշում սպասարկողների մասին: Ես օգտագործում եմ Taobao- ից գնված MG 996 HR ծառայություններ, բայց որակը իսկապես վատ է: Դա միանշանակ չինական էժան նոկ-օֆ է: Անկյունի հոդի համար նախատեսված մոմենտը չէր ապահովում բավարար պտույտ և նույնիսկ մեկ անգամ ծանր բեռի տակ սկսեց գոլորշիանալ: Ես ստիպված էի արմունկի համատեղ սերվոն փոխարինել ավելի որակյալ արտադրողի MG 946 HR- ով:

Կարճ ասած `գնեք որակյալ սպասարկողներ: Եթե կախարդական ծուխը դուրս է գալիս ձեր սերվերից, օգտագործեք ավելի լավ սերվոզներ: 6V- ը շատ անվտանգ լարում է, մի բարձրացրեք այն: Այն չի մեծացնի ոլորող մոմենտը, բայց կարող է վնասել սերվերին:

Սերվերի էլեկտրամոնտաժը հետևյալն է.

հիմք 2

ուս 2 4 ուս ուս 1 3

արմունկ 6

բռնիչ 8

դաստակ 11

Ազատորեն փոխեք այն, քանի դեռ հիշում եք նաև փոխել Arduino- ի էսքիզը:

Սարքավորումների հետ աշխատելուց հետո, եկեք նայենք ավելի մեծ պատկերին:

Քայլ 3: MoveIt RobotCommander ինտերֆեյս

MoveIt RobotCommander ինտերֆեյս
MoveIt RobotCommander ինտերֆեյս

Այսպիսով, հիմա ինչ? Ինչու՞ են ձեզ ամեն դեպքում անհրաժեշտ MoveIt- ը և ROS- ը: Չե՞ք կարող ուղղակի ձեռքը կառավարել Arduino կոդի միջոցով:

Այո, դու կարող ես.

Լավ, հիմա ի՞նչ կասեք GUI կամ Python/C ++ կոդի մասին ՝ ռոբոտի դիրքը տրամադրելու համար: Արդյո՞ք դա կարող է անել:

Տեսակ Դրա համար ձեզ հարկավոր է գրել հակադարձ կինեմատիկայի լուծիչ, որը կզբաղվի ռոբոտի դիրքով (թարգմանության և պտտման կոորդինատները 3D տարածության մեջ) և այն կվերածի սերվերի համատեղ անկյունային հաղորդագրությունների:

Չնայած դուք ինքներդ կարող եք դա անել, դա դժոխային մեծ աշխատանք է: Այսպիսով, MoveIt- ը և ROS- ը IK (հակադարձ կինեմատիկա) լուծողի համար ապահովում են գեղեցիկ ինտերֆեյս `ձեզ համար կատարելու ծանր եռանկյունաչափական բարձրացում:

Կարճ պատասխան. Այո, դուք կարող եք անել մի պարզ ռոբոտային թև, որը կկատարի կոդավորված Arduino էսքիզը ՝ մի դիրքից մյուսը անցնելու համար: Բայց եթե ցանկանում եք ձեր ռոբոտին դարձնել ավելի խելացի և ավելացնել համակարգչային տեսողության հնարավորությունները, MoveIt- ը և ROS- ը ճանապարհ են:

Ես կազմել եմ շատ պարզեցված դիագրամ, որը բացատրում է, թե ինչպես է աշխատում MoveIt շրջանակը: Մեր դեպքում դա ավելի պարզ կդառնա, քանի որ մենք մեր սերվերի հետադարձ կապ չունենք և կօգտագործենք /joint_states թեման ՝ ռոբոտների վերահսկիչին սերվերի անկյունները տրամադրելու համար: Մեզ միայն մեկ բաղադրիչ է պակասում, որը ռոբոտների վերահսկիչն է:

Ինչի՞ ենք սպասում: Եկեք մի քանի ռոբոտ -վերահսկիչ գրենք, որպեսզի մեր ռոբոտը … գիտեք, ավելի վերահսկելի լինի:

Քայլ 4: Arduino ծածկագիր ռոբոտների վերահսկիչի համար

Arduino ծածկագիրը ռոբոտների վերահսկիչի համար
Arduino ծածկագիրը ռոբոտների վերահսկիչի համար
Arduino ծածկագիրը ռոբոտների վերահսկիչի համար
Arduino ծածկագիրը ռոբոտների վերահսկիչի համար
Arduino ծածկագիրը ռոբոտների վերահսկիչի համար
Arduino ծածկագիրը ռոբոտների վերահսկիչի համար

Մեր դեպքում Arduino Uno- ն, որը վարում է ROS հանգույց ՝ rosserial- ով, կդառնա ռոբոտների վերահսկիչը: Arduino էսքիզների ծածկագիրը կցված է այս քայլին և հասանելի է նաև GitHub- ում:

Arduino Uno- ով աշխատող ROS հանգույցը հիմնականում բաժանորդագրվում է /MoveIt- ով աշխատող համակարգչում հրապարակված JointState թեմային, այնուհետև զանգվածի անկյունները ռադիաններից փոխարկում է աստիճանների և դրանք փոխանցում սերվերին `օգտագործելով ստանդարտ Servo.h գրադարանը:

Այս լուծումը մի փոքր հաքերական է և ոչ թե ինչպես դա արվում է արդյունաբերական ռոբոտների հետ: Իդեալում, դուք պետք է հրապարակեք շարժման հետագիծը /FollowJointState թեմայով, այնուհետև ստացեք արձագանքներ /JointState թեմայի վերաբերյալ: Բայց մեր ձեռքում հոբբի սերվերը չեն կարող հետադարձ կապ տրամադրել, այնպես որ մենք ուղղակիորեն բաժանորդագրվելու ենք /JointState թեմային, որը հրապարակվել է FakeRobotController հանգույցի կողմից: Հիմնականում մենք ենթադրելու ենք, որ այն բոլոր անկյունները, որոնք մենք փոխանցում ենք սերվոներին, կատարյալ են:

Լոսյարների աշխատանքի վերաբերյալ լրացուցիչ տեղեկությունների համար կարող եք խորհրդակցել հետևյալ ձեռնարկների հետ

wiki.ros.org/rosserial_arduino/Tutorials

Էսքիզը Arduino Uno- ում վերբեռնելուց հետո ձեզ հարկավոր է այն սերիական մալուխով միացնել ձեր ROS տեղադրմամբ աշխատող համակարգչին:

Ամբողջ համակարգը դաստիարակելու համար կատարեք հետևյալ հրամանները

roslaunch my_arm_xacro demo.launch rviz_tutorial: = ճշմարիտ

sudo chmod -R 777 /dev /ttyUSB0

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

Այժմ դուք կարող եք օգտագործել ինտերակտիվ մարկերներ RVIZ- ում ՝ ռոբոտի թևը դիրքի տեղափոխելու համար, այնուհետև սեղմել Plan and Execute, որպեսզի այն իրականում տեղափոխվի դիրք:

Կախարդական!

Այժմ մենք պատրաստ ենք Python կոդ գրել մեր թեքահարթակի թեստի համար: Դե, գրեթե…

Քայլ 5. (Լրացուցիչ) IKfast Plug-in- ի ստեղծում

Լռելյայնորեն MoveIt- ն առաջարկում է օգտագործել KDL կինեմատիկայի լուծիչ, որն իրականում չի աշխատում 6 -ից պակաս DOF զենքով: Եթե դուք ուշադիր հետևեք այս ձեռնարկին, ապա կնկատեք, որ RVIZ- ի թևի մոդելը չի կարող անցնել որոշ դիրքերի, որոնք պետք է ապահովվեն ձեռքի կազմաձևով:

Առաջարկվող լուծումը OpenRave- ի միջոցով ստեղծել սովորական կինեմատիկայի լուծիչ: Դա այնքան էլ դժվար չէ, բայց դուք պետք է կառուցեք այն և դրա կախվածությունը աղբյուրից կամ օգտագործեք նավամատույցի կոնտեյները, որն եք նախընտրում:

Ընթացակարգը շատ լավ փաստագրված է այս ձեռնարկում: Հաստատված է, որ աշխատում է VM- ի վրա, որն աշխատում է Ubuntu 16.04 -ով և ROS Kinetic- ով:

Լուծողը գեներացնելու համար ես օգտագործել եմ հետևյալ հրամանը

openrave.py -տվյալների շտեմարան inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000

իսկ հետո վազեց

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

MoveIt IKfast հավելում ստեղծելու համար:

Ամբողջ ընթացակարգը մի փոքր ժամանակատար է, բայց շատ դժվար չէ, եթե ուշադիր հետևեք ձեռնարկին: Եթե այս մասի վերաբերյալ հարցեր ունեք, դիմեք ինձ մեկնաբանություններում կամ PM- ում:

Քայլ 6: Թեքահարթակի փորձարկում:

Ramp թեստ
Ramp թեստ
Ramp թեստ
Ramp թեստ

Այժմ մենք պատրաստ ենք փորձել թեքահարթակի թեստը, որը մենք կկատարենք ROS MoveIt Python API- ի միջոցով:

Python ծածկագիրը կցված է այս քայլին և հասանելի է նաև github պահոցում: Եթե դուք չունեք թեքահարթակ կամ ցանկանում եք մեկ այլ փորձություն կատարել, ապա ձեզ հարկավոր է փոխել ռոբոտի դիրքերը ծածկագրում: Այդ առաջին կատարման համար

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

տերմինալում, երբ արդեն աշխատում են RVIZ- ը և MoveIt- ը: Հետո ռոբոտը ինտերակտիվ մարկերներով տեղափոխեք ցանկալի դիրք: Տերմինալում կցուցադրվեն դիրքի և կողմնորոշման արժեքները: Պարզապես պատճենեք դրանք Python կոդին:

Թեքահարթակի փորձնական վազքը կատարելու համար

rosrun my_arm_xacro pick/pick_2.py

RVIZ- ով և rosserial հանգույցով, որոնք արդեն աշխատում են:

Շարունակեք հետևել հոդվածի երրորդ մասին, որտեղ ես կօգտագործեմ ստերեո տեսախցիկ ՝ օբյեկտների հայտնաբերման համար և կկատարեմ ընտրություն և տեղադրում պարզ օբյեկտների համար:

Խորհուրդ ենք տալիս: