Оглавление:

Роботизированная рука ROS MoveIt, часть 2: Контроллер робота: 6 шагов
Роботизированная рука ROS MoveIt, часть 2: Контроллер робота: 6 шагов

Видео: Роботизированная рука ROS MoveIt, часть 2: Контроллер робота: 6 шагов

Видео: Роботизированная рука ROS MoveIt, часть 2: Контроллер робота: 6 шагов
Видео: Online ROS Meetup: Оптимизированная передача данных в ROS2 без копий 2024, Ноябрь
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-модель руки сделана Юргенлесснером, спасибо за отличную работу. Подробную инструкцию по сборке можно найти, перейдя по ссылке.

Однако мне пришлось модифицировать систему управления. Я использую Arduino Uno с сенсорным экраном для управления сервоприводами. Экран датчика значительно упрощает электромонтаж, а также упрощает подачу внешнего питания на сервоприводы. Я использую адаптер питания 12 В 6 А, подключенный через понижающий модуль (6 В) к сенсорному экрану.

Замечание о сервоприводах. Я использую сервоприводы MG 996 HR, купленные на Taobao, но качество очень плохое. Это определенно дешевый китайский подделка. Тот, что для локтевого сустава, не обеспечивал достаточного крутящего момента и даже однажды начал дымиться под большой нагрузкой. Пришлось заменить сервопривод локтевого сустава на MG 946 HR от более качественного производителя.

Короче - покупайте качественные сервоприводы. Если магический дым выходит из ваших сервоприводов, используйте более качественные сервоприводы. 6 В - очень безопасное напряжение, не увеличивайте его. Это не увеличит крутящий момент, но может повредить сервоприводы.

Электропроводка для сервоприводов следующая:

база 2

плечо 2 4 плечо 1 3

локоть 6

захват 8

запястье 11

Не стесняйтесь изменять его, если вы также не забываете изменить эскиз Arduino.

После того, как вы закончили с оборудованием, давайте посмотрим на картину в целом!

Шаг 3. Интерфейс MoveIt RobotCommander

Интерфейс MoveIt RobotCommander
Интерфейс MoveIt RobotCommander

Что теперь? Зачем вообще нужны MoveIt и ROS? Разве вы не можете просто управлять рукой напрямую через код Arduino?

Да, ты можешь.

Хорошо, а как насчет использования графического интерфейса или кода Python / C ++ для создания позы робота? Может ли Ардуино это сделать?

Вроде, как бы, что-то вроде. Для этого вам нужно будет написать решатель обратной кинематики, который будет принимать позу робота (координаты перемещения и вращения в трехмерном пространстве) и преобразовывать ее в сообщения об углах сочленения для сервоприводов.

Несмотря на то, что вы можете сделать это самостоятельно, это чертовски много работы. Итак, 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: = true

sudo chmod -R 777 / dev / ttyUSB0

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

Теперь вы можете использовать интерактивные маркеры в RVIZ, чтобы переместить руку робота в позу, а затем нажать «Планировать» и «Выполнить», чтобы она действительно переместилась в нужное положение.

Магия!

Теперь мы готовы написать код Python для нашего линейного теста. Ну, почти…

Шаг 5: (Необязательно) Создание подключаемого модуля IKfast

По умолчанию MoveIt предлагает использовать решатель кинематики KDL, который на самом деле не работает с плечами менее 6 степеней свободы. Если вы внимательно следите за этим руководством, то заметите, что модель руки в RVIZ не может принимать некоторые позы, которые должны поддерживаться конфигурацией руки.

Рекомендуемое решение - создать собственный решатель кинематики с помощью OpenRave. Это не так уж сложно, но вам придется собрать его и его зависимости из исходного кода или использовать контейнер докеров, в зависимости от того, что вы предпочитаете.

Процедура очень хорошо документирована в этом руководстве. Подтверждено, что он работает на виртуальной машине под управлением Ubuntu 16.04 и ROS Kinetic.

Я использовал следующую команду для создания решателя

openrave.py --database 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.

Вся процедура занимает немного времени, но не очень сложно, если вы внимательно следите за инструкциями. Если у вас есть вопросы по этой части, пишите мне в комментариях или в личку.

Шаг 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

с уже запущенными РВИЗ и узлом rosserial.

Следите за обновлениями третьей части статьи, где я буду использовать стереокамеру для обнаружения объектов и выполнять конвейер выбора и размещения простых объектов!

Рекомендуемые: