Mundarija:

ROS MoveIt Robotik Arm 2 -qism: Robot boshqaruvchisi: 6 qadam
ROS MoveIt Robotik Arm 2 -qism: Robot boshqaruvchisi: 6 qadam

Video: ROS MoveIt Robotik Arm 2 -qism: Robot boshqaruvchisi: 6 qadam

Video: ROS MoveIt Robotik Arm 2 -qism: Robot boshqaruvchisi: 6 qadam
Video: Загадка Титаника : Как они могли не заметить айсберг?! Самая подробная история! 2024, Noyabr
Anonim
Image
Image

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

Maqolaning oldingi qismida biz robot qo'limiz uchun URDF va XACRO fayllarini yaratdik va robot qo'limizni simulyatsiya qilingan muhitda boshqarish uchun RVIZ -ni ishga tushirdik.

Bu safar biz haqiqiy robot qo'l bilan qilamiz! Biz ushlagichni qo'shamiz, robot boshqaruvchisini yozamiz va (ixtiyoriy) IKfast teskari kinematik hal qiluvchi yaratamiz.

Geronimo!

1 -qadam: Gripperni qo'shish

Gripper qo'shilishi
Gripper qo'shilishi
Gripper qo'shilishi
Gripper qo'shilishi
Gripper qo'shilishi
Gripper qo'shilishi

Gripper qo'shish dastlab biroz chalkash edi, shuning uchun men oldingi maqolada bu qismni o'tkazib yubordim. Ma'lum bo'lishicha, bu unchalik qiyin emas.

Tutash havolalar va bo'g'inlarni qo'shish uchun URDF faylini o'zgartirishingiz kerak bo'ladi.

Robotim uchun o'zgartirilgan URDF fayli bu bosqichga biriktirilgan. Asosan, bu qo'l qismi bilan bir xil mantiqqa to'g'ri keladi, men faqat uchta yangi havolani (claw_base, claw_r va claw_l) va uchta yangi bo'g'inni qo'shdim (qo'shma5 - sobit, va6 -chi, bo'g'in7 - revolyutiv bo'g'inlar).

URDF faylini o'zgartirgandan so'ng, MoveIt sozlamalari yordamchisi yordamida MoveIt to'plami va xacro faylini yangilashingiz kerak bo'ladi.

Quyidagi buyruq yordamida sozlash yordamchisini ishga tushiring

roslaunch moveit_setup_assistant setup_assistant.launch

Mavjud MoveIt konfiguratsiyasini tahrirlash -ni bosing va MoveIt paketli papkani tanlang.

Yangi rejalashtirish guruhi ushlagichini (ushlagich uchun bo'g'inlar va bo'g'inlar bilan) va shuningdek, oxirgi effektorni qo'shing. Mening sozlamalarim quyidagi ekran tasvirlarida. E'tibor bering, siz kinematikani hal qiluvchini tanlamaysiz, bu shart emas. Paketni yarating va fayllarni ustiga yozing.

Yugurish

mushuk yasash

catkin ish joyingizda buyruq.

Yaxshi, endi bizda tutqichli qo'l bor!

2 -qadam: qo'lni qurish

Qo'lni qurish
Qo'lni qurish
Qo'lni qurish
Qo'lni qurish
Qo'lni qurish
Qo'lni qurish
Qo'lni qurish
Qo'lni qurish

Yuqorida aytib o'tganimdek, qo'l 3D modeli Juergenlessner tomonidan yaratilgan, ajoyib ish uchun rahmat. Agar siz havolaga rioya qilsangiz, montaj bo'yicha batafsil ko'rsatmalarni topishingiz mumkin.

Men boshqaruv tizimini o'zgartirishim kerak edi. Men servolarni boshqarish uchun Sensor qalqoni bo'lgan Arduino Uno -dan foydalanaman. Sensor qalqoni simlarni soddalashtirishga yordam beradi, shuningdek servolarni tashqi quvvat bilan ta'minlashni osonlashtiradi. Sensor qalqoni uchun pastga tushirish moduli (6V) orqali ulangan 12V 6A quvvat adapteridan foydalanaman.

Servo haqida eslatma. Men Taobaodan sotib olingan MG 996 HR servosidan foydalanaman, lekin sifati haqiqatan ham yomon. Bu, albatta, arzon xitoylik nok-off. Tirsak qo'shimchasi etarli momentni ta'minlamadi va hatto og'ir yuk ostida bir marta tiqila boshladi. Men yanada sifatli ishlab chiqaruvchidan MG 946 HR bilan tirsak qo'shma servosini almashtirishim kerak edi.

Qisqa so'z - sifatli servolarni sotib oling. Agar servolaringizdan sehrli tutun chiqsa, yaxshiroq servolardan foydalaning. 6V - bu juda xavfsiz kuchlanish, uni oshirmang. Bu momentni oshirmaydi, lekin servolarga zarar etkazishi mumkin.

Servo uchun simlar quyidagicha:

tayanch 2

elka2 4yelka1 3

tirsak 6

tutqich 8

bilak 11

Agar siz Arduino eskizini o'zgartirishni ham eslasangiz, uni o'zgartiring.

Uskunani tugatgandan so'ng, keling, katta rasmga qaraylik!

3 -qadam: MoveIt RobotCommander interfeysi

MoveIt RobotCommander interfeysi
MoveIt RobotCommander interfeysi

Xo'sh, endi nima? Nima uchun sizga baribir MoveIt va ROS kerak? Qo'lni to'g'ridan -to'g'ri Arduino kodi orqali boshqarolmaysizmi?

Ha sen qila olasan.

Xo'sh, endi robotning pozitsiyasini ta'minlash uchun GUI yoki Python/C ++ kodidan foydalanish haqida nima deyish mumkin? Arduino buni qila oladimi?

Navi. Buning uchun sizga teskari kinematik echim yozish kerak bo'ladi, u robotning pozasini oladi (3D maydonda tarjima va aylanish koordinatalari) va uni servolar uchun qo'shma burchakli xabarlarga aylantiradi.

Garchi buni o'zingiz qilishingiz mumkin bo'lsa -da, bu juda ko'p ish. Shunday qilib, MoveIt va ROS IK (teskari kinematik) hal qiluvchi uchun barcha og'ir trigonometrik yuklarni ko'tarish uchun yaxshi interfeysni ta'minlaydi.

Qisqa javob: Ha, siz bitta robot pozitsiyadan ikkinchisiga o'tish uchun qattiq kodli Arduino eskizini bajaradigan oddiy robot qo'lini qila olasiz. Ammo agar siz robotingizni aqlli qilib, kompyuterni ko'rish qobiliyatini qo'shmoqchi bo'lsangiz, MoveIt va ROS - bu yo'l.

Men MoveIt ramkasi qanday ishlashini tushuntiradigan juda soddalashtirilgan diagramma tuzdim. Bizning holatda, bu biz uchun yanada osonroq bo'ladi, chunki bizda servolardan hech qanday fikr yo'q va robot kontrollerni servo burchaklar bilan ta'minlash uchun /joint_states mavzusidan foydalanamiz. Bizda faqat bitta element - robot nazoratchi yetishmaydi.

Biz nimani kutmoqdamiz? Keling, bir nechta robot -kontrollerlar yozaylik, shunda bizning robotimiz … boshqariladigan bo'lardi.

4 -qadam: Robot boshqaruvchisi uchun Arduino kodi

Robot boshqaruvchi uchun Arduino kodi
Robot boshqaruvchi uchun Arduino kodi
Robot boshqaruvchi uchun Arduino kodi
Robot boshqaruvchi uchun Arduino kodi
Robot boshqaruvchi uchun Arduino kodi
Robot boshqaruvchi uchun Arduino kodi

Bizning holatda, rosserial bilan ROS tugunini ishlaydigan Arduino Uno robot boshqaruvchisi bo'ladi. Arduino eskiz kodi bu bosqichga biriktirilgan va GitHub -da ham mavjud.

Arduino Uno -da ishlaydigan ROS tuguni asosan MoveIt ishlaydigan kompyuterda chop etilgan /JointState mavzusiga obuna bo'ladi, so'ngra qatorning bo'g'in burchaklarini radiandan gradusgacha o'zgartiradi va Servo.h standart kutubxonasi yordamida servolarga uzatadi.

Bu yechim sanoat robotlari bilan qanday amalga oshirilgani emas, balki biroz xiralashgan. Ideal holda, siz /FollowJointState mavzusida harakat traektoriyasini nashr etishingiz va keyin /JointState mavzusi bo'yicha fikr -mulohazalarni olishingiz kerak. Ammo bizning qo'limizda sevimli mashg'ulotlari servolari o'z fikrlarini bildira olmaydi, shuning uchun biz FakeRobotController tugunida chop etilgan /JointState mavzusiga to'g'ridan -to'g'ri obuna bo'lamiz. Umuman olganda, biz servolarga o'tgan har qanday burchak ideal tarzda bajarilgan deb o'ylaymiz.

Rosserialning qanday ishlashi haqida qo'shimcha ma'lumot olish uchun quyidagi darsliklarga murojaat qilishingiz mumkin

wiki.ros.org/rosserial_arduino/Tutorials

Eskizni Arduino Uno -ga yuklaganingizdan so'ng, uni ketma -ket kabel orqali ROS o'rnatiladigan kompyuterga ulashingiz kerak bo'ladi.

Butun tizimni ochish uchun quyidagi buyruqlarni bajaring

roslaunch my_arm_xacro demo.launch rviz_tutorial: = rost

sudo chmod -R 777 /dev /ttyUSB0

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

Endi siz RVIZ -dagi interaktiv markerlardan foydalanib, robot qo'lini holatiga o'tkazishingiz mumkin, so'ngra uning holatiga o'tishi uchun "Rejalashtirish va bajarish" tugmasini bosing.

Sehr!

Endi biz rampa testimiz uchun Python kodini yozishga tayyormiz. Xo'sh, deyarli…

5-qadam: (Ixtiyoriy) IKfast plaginini yaratish

Odatiy bo'lib, MoveIt KDL kinematik echimidan foydalanishni taklif qiladi, bu 6 ta DOFdan kam qurol bilan ishlamaydi. Agar siz ushbu qo'llanmani diqqat bilan kuzatib borsangiz, RVIZ -dagi qo'l modeli qo'l konfiguratsiyasi bilan qo'llab -quvvatlanishi kerak bo'lgan pozalarga kira olmasligini sezasiz.

Tavsiya etilgan yechim OpenRave yordamida maxsus kinematik echimlarni yaratishdir. Bu unchalik qiyin emas, lekin siz uni o'zingiz yaratishingiz kerak va bu manbadan bog'liqliklar yoki xohlaganingizcha docker konteyneridan foydalaning.

Jarayon ushbu qo'llanmada juda yaxshi hujjatlashtirilgan. Ubuntu 16.04 va ROS Kinetic ishlaydigan VMda ishlash tasdiqlangan.

Men hal qiluvchi yaratish uchun quyidagi buyruqni ishlatganman

openrave.py -ma'lumotlar bazasi inversekinematics --robot = arm.xml --iktype = translation3d --iktests = 1000

va keyin yugurdi

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

MoveIt IKfast plaginini yaratish.

Butun protsedura biroz vaqt talab etadi, lekin agar siz qo'llanmani diqqat bilan kuzatib borsangiz, unchalik qiyin bo'lmaydi. Agar sizda ushbu bo'lim haqida savollaringiz bo'lsa, izohlarda yoki PMda men bilan bog'laning.

6 -qadam: Rampa sinovi

Rampa testi!
Rampa testi!
Rampa testi!
Rampa testi!

Endi biz ROS MoveIt Python API yordamida bajariladigan rampa testini sinab ko'rishga tayyormiz.

Python kodi bu bosqichga biriktirilgan va github omborida ham mavjud. Agar sizda rampa bo'lmasa yoki boshqa sinovni o'tkazmoqchi bo'lsangiz, koddagi robot pozitsiyasini o'zgartirishingiz kerak bo'ladi. Buning uchun birinchi marta bajaring

rostopik echo/rviz_moveit_motion_planning_display/robot_interaction_interactive_marker_topic/feedback

RVIZ va MoveIt allaqachon ishlayotganida terminalda. Keyin interaktiv markerli robotni kerakli joyga o'tkazing. Joylashuv va yo'nalish qiymatlari terminalda ko'rsatiladi. Ularni Python kodiga nusxalash kifoya.

Rampa sinovini bajarish uchun

rosrun my_arm_xacro pick/pick_2.py

RVIZ va rosserial tugun bilan allaqachon ishlayotgan.

Maqolaning uchinchi qismini kuzatishda davom eting, bu erda men ob'ektlarni aniqlash uchun stereo kameradan foydalanaman va oddiy ob'ektlar uchun tanlov va joylashtirish quvurini bajaraman!

Tavsiya: