Съдържание:

ROS MoveIt Robotic Arm Част 2: Робот контролер: 6 стъпки
ROS MoveIt Robotic Arm Част 2: Робот контролер: 6 стъпки

Видео: ROS MoveIt Robotic Arm Част 2: Робот контролер: 6 стъпки

Видео: ROS MoveIt Robotic Arm Част 2: Робот контролер: 6 стъпки
Видео: Quality robot programming with ROS part2 2024, Юли
Anonim
Image
Image

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

В предишната част на статията създадохме URDF и XACRO файлове за нашата роботизирана ръка и стартирахме RVIZ за управление на нашата роботизирана ръка в симулирана среда.

Този път ще го направим с истинската роботизирана ръка! Ще добавим грайфера, ще напишем контролер на робот и (по избор) ще генерираме IKfast обратна кинематична решалка.

Джеронимо!

Стъпка 1: Добавяне на грайфера

Добавяне на грайфера
Добавяне на грайфера
Добавяне на грайфера
Добавяне на грайфера
Добавяне на грайфера
Добавяне на грайфера

Добавянето на грайфер в началото беше малко объркващо, затова пропуснах тази част в предишната статия. В крайна сметка се оказа, че не е толкова трудно.

Ще трябва да промените вашия URDF файл, за да добавите връзки за захващане и фуги.

Модифицираният URDF файл за моя робот е прикачен към тази стъпка. По принцип следва същата логика като частта на рамото, просто добавих три нови връзки (claw_base, claw_r и claw_l) и три нови стави (joint5 е фиксиран, а joint6, joint7 са революционни стави).

След като промените вашия URDF файл, ще трябва също да актуализирате генерирания от MoveIt пакет и xacro файла, като използвате помощника за настройка на MoveIt.

Стартирайте помощника за настройка със следната команда

roslaunch moveit_setup_assistant setup_assistant.launch

Щракнете върху Редактиране на съществуваща конфигурация на MoveIt и изберете папката с вашия пакет MoveIt.

Добавете нов грайфер за планиране (с връзки и фуги за грайфера), а също и краен ефект. Моите настройки са на екранните снимки по -долу. Забележете, че не избирате кинематичен решател за грайфера, не е необходимо. Генерирайте пакета и презапишете файловете.

Бягай

котешка марка

команда във вашето работно пространство.

Добре, сега имаме ръка с грайфер!

Стъпка 2: Изграждане на ръката

Изграждане на ръката
Изграждане на ръката
Изграждане на ръката
Изграждане на ръката
Изграждане на ръката
Изграждане на ръката
Изграждане на ръката
Изграждане на ръката

Както споменах преди, 3D моделът на ръката е направен от Juergenlessner, благодаря ви за невероятната работа. Подробните инструкции за сглобяване могат да бъдат намерени, ако следвате връзката.

Трябваше обаче да променя системата за управление. Използвам Arduino Uno със сензорен щит за управление на серво. Сензорният щит помага много при опростяване на окабеляването и също така улеснява предоставянето на външно захранване на сервомоторите. Използвам захранващ адаптер 12V 6A, свързан чрез понижаващ модул (6V) към сензорния щит.

Бележка за серво. Използвам сервомоторите MG 996 HR, закупени от Taobao, но качеството е наистина лошо. Това определено е евтин китайски удар. Този за лакътната става не осигурява достатъчен въртящ момент и дори започва да изгаря веднъж при голямо натоварване. Трябваше да заменя серво лакътната става с 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 ++ код, за да предоставите поза на робот, на която да отидете? Може ли Arduino да направи това?

Нещо като. За това ще трябва да напишете обратен кинематичен решател, който да заеме поза на робот (координати на транслация и въртене в 3D пространство) и да го преобразува в съобщения за съвместен ъгъл за серво.

Въпреки че можете да го направите сами, това е адски много работа. Така че MoveIt и ROS осигуряват приятен интерфейс за решаването на IK (обратна кинематика), за да извърши цялото тежко тригонометрично повдигане вместо вас.

Кратък отговор: Да, можете да направите проста роботизирана ръка, която ще изпълни твърдо кодирана скица на Arduino, за да премине от една поза в друга. Но ако искате да направите вашия робот по -интелигентен и да добавите възможности за компютърно зрение, MoveIt и ROS са пътят.

Направих много опростена диаграма, обясняваща как работи рамката MoveIt. В нашия случай това ще бъде още по -просто, тъй като нямаме обратна връзка от нашите сервоустройства и ще използваме темата /joint_states, за да предоставим на контролера на робота ъглите за серво. Липсва ни само един компонент, който е роботният контролер.

Какво чакаме? Нека напишем някои контролери за роботи, така че нашият робот да бъде … знаете, по -контролируем.

Стъпка 4: Arduino код за робот контролер

Arduino код за робот контролер
Arduino код за робот контролер
Arduino код за робот контролер
Arduino код за робот контролер
Arduino код за робот контролер
Arduino код за робот контролер

В нашия случай Arduino Uno, работещ с ROS възел с rosserial, ще бъде контролерът на робота. Кодът за скица на Arduino е приложен към тази стъпка и също е достъпен на GitHub.

ROS възелът, работещ на Arduino Uno, основно се абонира за /JointState тема, публикувана на компютъра, работещ с MoveIt и след това преобразува съвместните ъгли от масива от радиани в градуси и ги предава на серво, използвайки стандартна библиотека Servo.h.

Това решение е малко хакерско, а не как се прави с промишлени роботи. В идеалния случай трябва да публикувате траекторията на движение по темата /FollowJointState и след това да получите обратна връзка по темата /JointState. Но в нашите ръце сървърите за хоби не могат да предоставят обратна връзка, така че просто ще се абонираме директно за /JointState темата, публикувана от възела FakeRobotController. По принцип ще приемем, че каквито и ъгли да преминем към сервомоторите, се изпълняват идеално.

За повече информация как работи rosserial можете да се консултирате със следните уроци

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

По подразбиране MoveIt предлага използването на KDL кинематичен решател, който всъщност не работи с по -малко от 6 DOF ръце. Ако следвате този урок отблизо, ще забележите, че моделът на рамото в RVIZ не може да премине към някои пози, които трябва да се поддържат от конфигурацията на рамото.

Препоръчителното решение е да създадете персонализиран кинематичен решател с помощта на OpenRave. Не е толкова трудно, но ще трябва да го изградите и зависи от източника или да използвате контейнера за докери, което предпочитате.

Процедурата е много добре документирана в този урок. Потвърдено е, че работи на VM с Ubuntu 16.04 и ROS Kinetic.

Използвах следната команда за генериране на решаването

openrave.py --database обратна кинематика --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.

Цялата процедура отнема малко време, но не е много трудна, ако внимателно следвате урока. Ако имате въпроси относно тази част, моля, свържете се с мен в коментарите или на ЛС.

Стъпка 6: Тест на рампата

Тестът на рампата!
Тестът на рампата!
Рампа тест!
Рампа тест!

Сега сме готови да опитаме рамп теста, който ще извършим с помощта на 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 възел.

Очаквайте третата част на статията, където ще използвам стерео камера за откриване на обекти и ще изпълня конвейер за избор и поставяне за прости обекти!

Препоръчано: