ROS MoveIt Robotic Arm ნაწილი 2: Robot Controller: 6 Steps
ROS MoveIt Robotic Arm ნაწილი 2: Robot Controller: 6 Steps
Anonim
Image
Image

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

სტატიის წინა ნაწილში ჩვენ შევქმენით URDF და XACRO ფაილები ჩვენი რობოტული მკლავისთვის და გავუშვით RVIZ, რომ გავაკონტროლოთ ჩვენი რობოტული მკლავი იმიტირებულ გარემოში.

ამჯერად ჩვენ ამას გავაკეთებთ ნამდვილი რობოტული მკლავით! ჩვენ დავამატებთ გრიპერს, დავწერთ რობოტის კონტროლერს და (სურვილისამებრ) შევქმნით IKfast ინვერსიული კინემატიკის გამხსნელს.

გერონიმო!

ნაბიჯი 1: გრიპერის დამატება

გრიპერის დამატება
გრიპერის დამატება
გრიპერის დამატება
გრიპერის დამატება
გრიპერის დამატება
გრიპერის დამატება

გრიპერის დამატება თავიდან ცოტა დამაბნეველი იყო, ამიტომ წინა სტატიაში გამოვტოვე ეს ნაწილი. ბოლოს და ბოლოს არც ისე რთული აღმოჩნდა.

თქვენ უნდა შეცვალოთ თქვენი URDF ფაილი, რომ დაამატოთ დამჭერი ბმულები და სახსრები.

ამ ნაბიჯს თან ერთვის ჩემი რობოტის URDF შეცვლილი ფაილი. ძირითადად ის მიჰყვება იმავე ლოგიკას, როგორც მკლავის ნაწილი, მე უბრალოდ დავამატე სამი ახალი ბმული (claw_base, claw_r და claw_l) და სამი ახალი სახსარი (სახსარი 5 ფიქსირდება, ხოლო სახსარი 6, სახსარი 7 არის მბრუნავი სახსრები).

მას შემდეგ რაც შეცვალეთ თქვენი URDF ფაილი თქვენ ასევე უნდა განაახლოთ MoveIt გენერირებული პაკეტი და xacro ფაილი MoveIt კონფიგურაციის ასისტენტის გამოყენებით.

გაუშვით კონფიგურაციის ასისტენტი შემდეგი ბრძანებით

roslaunch moveit_setup_assistant setup_assistant.launch

დააწკაპუნეთ არსებული MoveIt კონფიგურაციის რედაქტირებაზე და შეარჩიეთ საქაღალდე თქვენი MoveIt პაკეტით.

დაამატეთ ახალი დაგეგმვის ჯგუფის დამჭერი (ბმულებითა და სახსრებით გრიპერისთვის) და ასევე საბოლოო ეფექტით. ჩემი პარამეტრები მოცემულია ქვემოთ მოცემულ ეკრანის სურათებში. გაითვალისწინეთ, რომ თქვენ არ ირჩევთ კინემატოგრაფიულ გამხსნელს გრიპერისთვის, ეს არ არის აუცილებელი. შექმენით პაკეტი და გადაწერეთ ფაილები.

გაიქეცი

კატის დამზადება

ბრძანება თქვენს catkin სამუშაო სივრცეში.

კარგი, ახლა ჩვენ გვაქვს მკლავი გრიპით!

ნაბიჯი 2: იარაღის შექმნა

მკლავის მშენებლობა
მკლავის მშენებლობა
მკლავის მშენებლობა
მკლავის მშენებლობა
მკლავის მშენებლობა
მკლავის მშენებლობა
მკლავის მშენებლობა
მკლავის მშენებლობა

როგორც უკვე აღვნიშნე, ხელის 3D მოდელი დამზადებულია Juergenlessner– ის მიერ, მადლობა საოცარი მუშაობისთვის. შეკრების დეტალური ინსტრუქცია შეგიძლიათ იხილოთ, თუ მიჰყვებით ბმულს.

მართალია, კონტროლის სისტემის შეცვლა მომიწია. მე ვიყენებ Arduino Uno სენსორულ ფარს სერვისების გასაკონტროლებლად. სენსორული ფარი ბევრს ეხმარება გაყვანილობის გამარტივებაში და ასევე აადვილებს გარე ენერგიის მიწოდებას სერვოებისთვის. მე ვიყენებ 12V 6A დენის ადაპტერს, რომელიც მავთულხლართულია შემდგომი მოდულის საშუალებით (6V) სენსორული ფარისთვის.

შენიშვნა სერვისებზე. მე ვიყენებ Taobao– სგან შეძენილ MG 996 HR სერვისებს, მაგრამ ხარისხი ნამდვილად ცუდია. ეს ნამდვილად იაფი ჩინური ნოკაუა. იდაყვის სახსრისთვის არ იყო საკმარისი ბრუნვის მომენტი და ერთხელაც დაიწყო დაძაბვა მძიმე ტვირთის ქვეშ. მე უნდა შევცვალო იდაყვის ერთობლივი სერვო MG 946 HR უკეთესი ხარისხის მწარმოებლისგან.

მოკლედ - იყიდეთ ხარისხიანი სერვისი. თუ ჯადოქრული კვამლი გამოდის თქვენი სერვოებიდან, გამოიყენეთ უკეთესი სერვისები. 6V არის ძალიან უსაფრთხო ძაბვა, არ გაზარდოთ იგი. ის არ გაზრდის ბრუნვის მომენტს, მაგრამ შეიძლება დააზიანოს სერვოები.

სერვისების გაყვანილობა შემდეგნაირად:

ბაზა 2

მხარი 2 4 მხარი 1 3

იდაყვი 6

მჭიდი 8

მაჯის 11

მოგერიდებათ მისი შეცვლა მანამ, სანამ თქვენ ასევე გახსოვთ არდუინოს ესკიზის შეცვლა.

მას შემდეგ რაც დაამთავრეთ ტექნიკა, მოდით შევხედოთ უფრო დიდ სურათს!

ნაბიჯი 3: MoveIt RobotCommander ინტერფეისი

MoveIt RobotCommander ინტერფეისი
MoveIt RobotCommander ინტერფეისი

მაშ, ახლა რა? რატომ გჭირდებათ MoveIt და ROS მაინც? არ შეგიძლია უბრალოდ აკონტროლო მკლავი არდუინოს კოდის საშუალებით?

Დიახ, შეგიძლია.

კარგი, ახლა რას იტყვით GUI ან Python/C ++ კოდზე რობოტის პოზის მისაცემად? შეუძლია არდუინოს ამის გაკეთება?

დალაგება ამისათვის თქვენ უნდა დაწეროთ ინვერსიული კინემატიკური გადაწყვეტა, რომელიც მიიღებს რობოტის პოზას (თარგმანისა და ბრუნვის კოორდინატები 3D სივრცეში) და გადააქცევს მას სერვისების ერთობლივ კუთხის შეტყობინებებში.

იმისდა მიუხედავად, რომ თქვენ თვითონ შეგიძლიათ ამის გაკეთება, გასაკეთებელია ბევრი სამუშაო. ამრიგად, MoveIt და ROS უზრუნველყოფენ მშვენიერ ინტერფეისს IK (ინვერსიული კინემატიკის) ამომხსნელისთვის, რომ გააკეთოს ყველა მძიმე ტრიგონომეტრიული აწევა თქვენთვის.

მოკლე პასუხი: დიახ, შეგიძლიათ გააკეთოთ მარტივი რობოტული ხელი, რომელიც შეასრულებს მყარად კოდირებულ არდუინოს ესკიზს ერთი პოზადან მეორეზე გადასასვლელად. მაგრამ თუ გსურთ თქვენი რობოტი გახადოთ უფრო ინტელექტუალური და დაამატოთ კომპიუტერის ხედვის შესაძლებლობები, MoveIt და ROS არის გასავლელი გზა.

მე გავაკეთე ძალიან გამარტივებული დიაგრამა, რომელიც განმარტავს, თუ როგორ მუშაობს MoveIt ჩარჩო. ჩვენს შემთხვევაში, ეს იქნება კიდევ უფრო მარტივი, რადგან ჩვენ არ გვაქვს უკუკავშირი ჩვენი სერვისებიდან და ვიყენებთ /joint_states თემას რობოტ კონტროლერისთვის სერვისების კუთხეებით უზრუნველსაყოფად. ჩვენ გვაკლია მხოლოდ ერთი კომპონენტი, რომელიც არის რობოტის კონტროლერი.

რას ველოდებით? მოდით დავწეროთ რამდენიმე რობოტი კონტროლერი, ასე რომ ჩვენი რობოტი იქნება … იცით, უფრო კონტროლირებადი.

ნაბიჯი 4: Arduino კოდი რობოტი კონტროლერისთვის

Arduino კოდი რობოტი კონტროლერისთვის
Arduino კოდი რობოტი კონტროლერისთვის
Arduino კოდი რობოტი კონტროლერისთვის
Arduino კოდი რობოტი კონტროლერისთვის
Arduino კოდი რობოტი კონტროლერისთვის
Arduino კოდი რობოტი კონტროლერისთვის

ჩვენს შემთხვევაში, Arduino Uno, რომელიც მუშაობს ROS კვანძს როსერიალით, იქნება რობოტის კონტროლერი. Arduino ესკიზის კოდი ერთვის ამ ნაბიჯს და ასევე ხელმისაწვდომია GitHub– ზე.

ROS კვანძი, რომელიც მუშაობს Arduino Uno– ზე, ძირითადად იწერს /JointState თემას, რომელიც გამოქვეყნებულია კომპიუტერზე, რომელიც მუშაობს MoveIt და შემდეგ გარდაქმნის ერთობლივ კუთხეებს მასივიდან რადიანებიდან გრადუსზე და გადასცემს მათ სერვისებს სტანდარტული 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– ში რობოტის მკლავის პოზიციაში გადასატანად და შემდეგ დააჭირეთ გეგმას და შესრულებას, რათა ის რეალურად გადავიდეს პოზიციაში.

მაგია!

ახლა ჩვენ მზად ვართ დავწეროთ პითონის კოდი ჩვენი პანდუსული ტესტისთვის. Თითქმის…

ნაბიჯი 5: (სურვილისამებრ) IKfast დანამატის გენერირება

ნაგულისხმევად MoveIt გვთავაზობს KDL კინემატიკური გამხსნელის გამოყენებას, რომელიც ნამდვილად არ მუშაობს 6 -ზე ნაკლები DOF იარაღით. თუ ყურადღებით მიჰყვებით ამ სახელმძღვანელოს, მაშინ შეამჩნევთ, რომ RVIZ– ში ხელის მოდელი ვერ გადადის ზოგიერთ პოზაზე, რომელიც მხარს უნდა უჭერდეს მკლავის კონფიგურაციას.

რეკომენდებული გამოსავალია შექმნათ პერსონალური კინემატიკური გადაწყვეტა OpenRave– ის გამოყენებით. ეს არ არის ისეთი რთული, მაგრამ თქვენ უნდა ააშენოთ იგი და მისი დამოკიდებულება წყაროდან ან გამოიყენოთ დოკერის კონტეინერი, რომელი გირჩევნიათ.

პროცედურა ძალიან კარგად არის დოკუმენტირებული ამ გაკვეთილში. დადასტურებულია, რომ მუშაობს VM- ზე Ubuntu 16.04 და ROS Kinetic.

მე გამოვიყენე შემდეგი ბრძანება გამხსნელის შესაქმნელად

openrave.py -მონაცემთა ბაზის ინვერსიკინემატიკა -robot = arm.xml --iktype = translation3d --iktests = 1000

და შემდეგ გაიქცა

rosrun moveit_kinematics create_ikfast_moveit_plugin.py test_robot arm my_arm_xacro ikfast0x1000004a. თარგმანი 3D.0_1_2_f3.cpp

MoveIt IKfast დანამატის შესაქმნელად.

მთელი პროცედურა ცოტა შრომატევადია, მაგრამ არც ისე რთულია, თუ ყურადღებით მიჰყვებით გაკვეთილს. თუ თქვენ გაქვთ შეკითხვები ამ ნაწილთან დაკავშირებით, გთხოვთ დამიკავშირდეთ კომენტარებში ან PM- ში.

ნაბიჯი 6: გასასვლელი ტესტი

Ramp ტესტი!
Ramp ტესტი!
Ramp ტესტი!
Ramp ტესტი!

ახლა ჩვენ მზად ვართ ვცადოთ ramp ტესტი, რომელსაც ჩვენ შევასრულებთ ROS MoveIt Python API გამოყენებით.

პითონის კოდი ერთვის ამ ნაბიჯს და ასევე ხელმისაწვდომია github საცავში. თუ თქვენ არ გაქვთ პანდუსი ან გსურთ სხვა გამოცდის ჩაბარება, თქვენ უნდა შეცვალოთ რობოტის პოზა კოდში. რომ პირველი შეასრულოს

rostopic echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

ტერმინალში, როდესაც უკვე მუშაობს RVIZ და MoveIt. შემდეგ გადაიტანეთ რობოტი ინტერაქტიული მარკერებით სასურველ პოზიციაზე. პოზიციისა და ორიენტაციის მნიშვნელობები ნაჩვენები იქნება ტერმინალში. უბრალოდ დააკოპირეთ ისინი პითონის კოდში.

პანდუსის საცდელად გასაშვებად

rosrun my_arm_xacro pick/pick_2.py

RVIZ და როსერიული კვანძი უკვე მუშაობს.

დაელოდეთ სტატიის მესამე ნაწილს, სადაც მე გამოვიყენებ სტერეო კამერას ობიექტების გამოვლენისთვის და შევასრულებ მილსადენის არჩევას და განთავსებას მარტივი ობიექტებისთვის!

გირჩევთ: