Привет всем, я ваш прекрасный Эш. В последнее время возникает много вопросов, связанных с moveit.В конце концов, применение робота-манипулятора + зрение действительно очень популярно.Сяочжи хочет научить планировать движение робота-манипулятора напрямую.
Некоторые студенты спросили Сяочжи, как использовать moveit для управления настоящим роботом-манипулятором? Xiaozhi имеет большой опыт в этом. Однажды Xiaozhi начал с модели silidworkds и использовал moveit для завершения планирования движения реального робота-манипулятора. Если вы хотите знать, как это сделать, вы можете подписаться на Xiaozhi. Xiaozhi собирается экспортировать urdf из модели SolidWorks и объяснить вам моделирование роботов и роботов-манипуляторов на основе moveit.Пожалуйста, продолжайте обращать внимание.
Если вы хотите получить исходный код теста Xiaozhi в этой статье, вы можете подписаться на учетную запись Gongzhong и ответить на moveit в фоновом режиме.
1. Сколько вопросов вы должны задать, прежде чем начать?
1. Почему MoveIt не может напрямую управлять настоящим роботом-манипулятором?
Причина в том, что типов реальных манипуляторов слишком много.Сегодня вы делаете манипулятора, а завтра он становится манипулятором.Moveit это просто фреймворк для планирования движений манипуляторов, и не отвечает за управление реальными манипуляторами.
2. Как Moveit управляет манипулятором?
Поскольку moveit не может напрямую управлять манипулятором, им необходимо управлять через среду, что является нашим сегодняшним фокусом.Привод траектории.
2. Как Moveit управляет виртуальным манипулятором в rviz и беседке?
Внимательные студенты могли заметить, что при каждом запуске moveit загружается xx_controller.
rostopic list
Вы увидите подобную нить
/execute_trajectory/cancel/
/execute_trajectory/feedback/
/execute_trajectory/goal/execute_trajectory/result/
/execute_trajectory/status
Если вы используете беседку, то название может быть другим, но все они имеют одинаковую приставку, после которой виситcancel、feedback、goal、result、status
Эти пять.
Эта тема - тема, на которую подписан сервис исполнения трека.Кто исполнитель трека, кто должен предоставлять эти пять сервисов топика (на самом деле это не обычная тема, а Механизм связи Action в ros).
1. Мы можем использовать следующую команду, чтобы проверить, кто является издателем и подписчиком темы?
rostopic info /execute_trajectory/goal
Type: moveit_msgs/ExecuteTrajectoryActionGoal
Publishers: * /rviz_monster_4900_3400225440813710105 (http://monster:33953/)
Subscribers: * /move_group (http://monster:34519/)
Вы можете подписаться на Xiaozhi и попробовать вместе.Вы не ошиблись.Эта тема для соединения moveit и rviz.Хороший парень,вот,неправильная связь между moveit и rviz наконец-то обнаружена нами.
2. Как moveit управляет манипулятором в беседке?
Многие учебники рассказывают вам, прежде всего,demo.launch
серединаfake_execution
заfasle
;
<include file="$(find ur5_moveit_config)/launch/move_group.launch">
<arg name="allow_trajectory_execution" value="true"/>
<arg name="fake_execution" value="true"/>
<arg name="info" value="true"/>
<arg name="debug" value="$(arg debug)"/> </include>
Что означает это предложение? На самом деле, оно должно сказать rviz, что я не хочу, чтобы вы помогали мне управлять виртуальной роботизированной рукой в rviz. У меня уже есть кто-то снаружи, и вы мне не нужны!
Тогда рвиз грустит, даже если ты меня не хочешь (казнь), то ты всегда должен рассказать тому человеку (беседке) ситуацию (исполнение), то есть сказать рвизу шарнирный угол тока робота-манипулятора, ведь , ему по-прежнему требуется исходное совпадение, и вам нужно выполнить команду moveit.
3. Кто полюбил беседки и моветы?
Итак, теперь давайте запустим беседку, чтобы увидеть, какие преимущества беседка получает от moveit и что она дает для moveit.
После изменения true на false вместо запуска беседки запустите moveit напрямую, и вы обнаружите, что в стартовой команде загрузки moveit появится такое ПРЕДУПРЕЖДЕНИЕ и ОШИБКА:
[ WARN] [1626355641.007776896, 8.232000000]: Waiting for
/follow_joint_trajectory to come up
[ WARN] [1626355647.034715552, 14.232000000]: Waiting for
/follow_joint_trajectory to come up
[ERROR] [1626355653.060493182, 20.233000000]: Action client not connected: /follow_joint_trajectory
[ INFO] [1626355653.085575856, 20.258000000]: Returned 0 controllers in list
Если запустить беседку, а потом запустить moveit, то станет следующая ИНФО.
[ INFO] [1626355494.355057943, 322.100000000]: Added FollowJointTrajectory
controller for
[ INFO] [1626355494.355212191, 322.100000000]: Returned 1 controllers in list
Подобно головастику, ищущему свою маму, при запуске moveit он найдет сервер действий с соответствующим именем, после чего он будет загружен и зарезервирован для последующих вызовов.
А что предлагает беседка внешнему миру?
мы снова используем
rostopic list
Глядя на список тем, вы найдете больше этого, что на самом деле является коммуникационным компонентом группы move_group из Gazebo и moveit.
rostopiclist/arm_controller/follow_joint_trajectory/cancel/arm_controller/follow_joint_trajectory/feedback/arm_controller/follow_joint_trajectory/goal/arm_controller/follow_joint_trajectory/result/arm_controller/follow_joint_trajectory/status
Если вы посмотрите более конкретно на рисунок ниже, то поймете, что rqt_graph такой.Gazebo подписывается на цель arm_controller и публикует тему Joint_StateТаким образом достигается имитация.
4. Как выглядят данные о траектории, отправленные moveit в беседку?
Вы можете попробовать это, это очень просто, потому что moveit выставит содержимое своего запроса через тему, эта тема:
/move_group/display_planned_path
использовать
rostopic echo /move_group/display_planned_path
Затем щелкните план и выполните в рвизе случайно, вы можете увидеть печать этой темы
Эти данные фактически представляют собой точку траектории суставного пространства манипулятора, которая изменяется со временем и включает информацию о времени, скорости и ускорении. Поскольку беседку можно использовать, как следует использовать эту точку? Пожалуйста, продолжайте читать ниже:
3. Получите данные и отправьте их на настоящую роботизированную руку
Вышеизложенное закончило, как использовать moveit для управления виртуальной рукой робота, а также узнать, как выглядят данные moveit, наконец, управляющие рукой робота.
Тогда нам будет очень просто управлять реальным манипулятором, нам просто нужно запустить действие, такое как беседка, получить данные о траектории и отобразить позу реального манипулятора в режиме реального времени.
Далее начинаем поэтапно.
1. Первый шаг — получить вывод moveit — данные о траектории.
Настройте сервер Action для получения данных
Как упоминалось выше, когда moveit запускается, он автоматически загружает actionServer с соответствующим именем, поэтому, если мы напишем actionServer и имя будет таким же, как то, которое хочет moveit, будет ли moveit рассматривать нас как исполнителя?
Для этого мы используем Python:
def on_goal(goal_handle):
global goal
goal_handle.set_accepted()
goal = goal_handle.get_goal()
goal = goal.trajectory.points
goal_handle.set_succeeded()
def on_cancel(goal_handle):
goal_handle.set_aborted()
goal_handle.set_canceled()
rospy.init_node('calculate_py', disable_signals=True)
server = actionlib.ActionServer("jaka_controller/follow_joint_trajectory",FollowJointTrajectoryAction,on_goal,on_cancel,auto_start=False)
После выполнения приведенного выше кода мы действительно можем получить данные о траектории соответствующего контроллера.
2. Второй шаг — передача совместных данных манипулятора в режиме реального времени.
На самом деле это очень просто.Независимо от того, какая у вас марка робота-манипулятора, если он может быть подключен к нашему компьютеру через последовательный порт/сеть и т. д., мы можем использовать SDK соответствующего производителя для считывания данных угла соединения. роботизированной руки.
Прочитав данные, опубликуйте их через топик /joint_state.
На самом деле мы имитируем беседку, вводим данные о траектории и выводим данные о соединениях в реальном времени с реальным манипулятором робота.
3. Отправить на настоящую роботизированную руку
Этот шаг также требует наибольшего внимания, поскольку он может включать разные функции разных манипуляторов разных производителей.
Прежде чем мы захотим управлять реальным манипулятором, нам нужно определить, какие данные нужны реальному манипулятору.Могут ли данные о траектории, которые мы получаем от moveit, быть отправлены непосредственно в шесть суставов для выполнения? Ответ определенно да. Но вы обнаружите, что окончательный эффект от выполнения робота может быть не таким, как вы себе представляли (из-за интерполяции траектории), здесь резюмирует Сяочжи.
Вы можете разделить ваши роботы-манипуляторы на три категории:
3.1 Первая категория: промышленное/коллаборативное вооружение от крупных производителей
Этот тип робота-манипулятора обычно предоставляет алгоритм интерполяции траектории, который может напрямую передавать информацию об изменении угла сустава с течением времени, сгенерированную moveit, через интерфейс управления этого типа робота-манипулятора.Этот тип робота-манипулятора будет автоматически интерполировать и затем выполнить.
Например, роботизированная рука AUBO может двигаться по траектории через начальную точку, путевую точку и конечную точку.
3.2 Вторая категория: Роботизированное оружие для обучения с небольших заводов.
Этот тип робота-манипулятора также имеет соответствующий рабочий SDK, просто внимательно прочитайте его и убедитесь, что онПоддерживать ли отправку траектории для выполнения, если нет, то иди в другую сторону,Определить период управления его двигателем, данные позы совместного пространства, сгенерированные moveitИнтерполировать кубические или пятые термины, если вы не знаете, как это сделать, вы можетеОбратите внимание на публичный аккаунт Сяочжи в WeChat и свяжитесь с Сяочжи, чтобы помочь, Xiaozhi также напишет, как выполнять алгоритмы интерполяции траекторий для суставов и декартовых пространств.
3.3 Третья категория: ваша собственная роботизированная рука своими руками
Этот тип робота-манипулятора Xiaozhi сделал в колледже.Если не учитывать производительность в реальном времени, это на самом деле относительно просто.Как правило, вы можете напрямую написать встроенную программу для управления серводвигателем.
Когда я учился в колледже, я использовал STM32 для управления рулевым механизмом.Это было, вероятно, во время зимних каникул моего первого курса.Сейчас я думаю, что это далеко, но это довольно интересно.
Для таких студентов предложение Xiaozhi состоит в том, чтобы напрямую подключиться к компьютеру через последовательный порт, написать узел на компьютере для связи с последовательным портом и отправить команды на двигатель.В то же время этот узел получает управляющие данные moveit и выполняет интерполяцию траектории, затем выполните ее,Также опубликуйте угол каждого двигателя.
В-четвертых, резюмируя
Я красноречиво написал тысячи слов, и у меня кружится голова. Если это поможет вам, пожалуйста, обратите внимание на Сяочжи. Ваше внимание - величайшее поощрение для Сяочжи.
Наконец, я рекомендую еще одну волну.Если вы хотите узнать больше о moveit, планировании пути, обнаружении столкновений, восприятии трехмерной среды, ROS2 и других технологиях робототехники, вы можете обратить внимание на учетную запись WeChat Gongzhong Сяочжи.остроумие.
об авторе
Я Сяо Чжи, старший игрок в области робототехники, а теперь инженер-алгоритм для робота-унипода в Шэньчжэне.
Изучение программирования в младших классах средней школы, начало изучения робототехники в старшей школе и участие в соревнованиях, связанных с робототехникой, в колледже, чтобы получить ежемесячный доход в размере 2W+ (бонус за участие в соревнованиях).
В настоящее время работает над общедоступной учетной записью, выпуская учебные пособия по роботам, бумажные аннотации и опыт работы.Приглашаем всех обратить внимание на Xiaozhi, обменяться технологиями и изучить роботов.