Skip to content
Evgeniy Antonov edited this page Aug 15, 2017 · 4 revisions

control_node

Нода - контроллер движения. Ради ее создания и существует весь этот проект. Она дает возможность (пока, правда, в перспективе, потому что на данный момент нода еще не дописана) заставлять робота принимать желаемую конфигурацию и проводить его собственный схват по задаваемой параметризованной временем траектории.

Подписана на топики

  • joint_states (sensor_msgs/JointStates)

    С данного топика нода получает информацию о текущем состоянии робота, а именно значения для углов, скоростей и моментов в его сочленениях.

  • target_pose (brics_actuator/JointPositions)

    Через данный топик ноде отправляются задания на перевод робота в желаемую конфигурацию.

Публикует в топики

  • arm_1/arm_controller/torques_command (brics_actuator/JointTorques)

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

Параметры

  • ~pose_regulation/kp (list of doubles, default: [1.0, 1.0, 1.0, 1.0, 1.0])

    Значения для диагональных элементов матрицы Kp, входящей в выражение для расчета управляющих моментов в задаче достижения роботом желаемой конфигурации.

  • ~pose_regulation/kd (list of doubles, default: [1.0, 1.0, 1.0, 1.0, 1.0])

    Значения для диагональных элементов матрицы Kd, входящей в выражение для расчета управляющих моментов в задаче достижения роботом желаемой конфигурации.

send_target_pose.py

Нода, реализующая более удобный интерфейс к топику target_pose ноды control_node. Принимает массив из пяти значений, имеющих смысл желаемых углов в сочленениях робота, в топике simple_pose и переотправляет их в виде должным образом сформированного сообщения типа brics_actuator/JointPositions в топик target_pose.

Подписана на топики

  • simple_pose (std_msgs/Float64MultiArray)

    Полученный в данном топике массив из 5 значений нода перетоправляет в топик target_pose как углы, которые должны быть обеспечены в сочленениях робота.

Публикует в топики

  • target_pose (brics_actuator/JointPositions)

    В данный топик нода переотправляет те значения для углов в сочленениях робота, которые она получила в топике simple_pose.

make_poses_list.py

Нода предназначена для создания текстового файла, содержающего значения для углов в сочленениях робота, соответствующих позициям (конфигурациям), которые должен пройти робот под управлением ноды collect_ident_data.py. Также нода позволяет провести псевдосимуляцию данного процесса (прохождения роботом через позиции (конфигурации), записанные в упомянутый файл).

Подписана на топики

  • joint_states (sensor_msgs/JointStates)

    С данного топика нода получает информацию о текущих значениях углов в сочленениях робота или его urdf модели, "управляемой" нодой joint_state_publisher.

Публикует в топики

  • poses/joint_states (sensor_msgs/JointStates)

    В данный топик во время упомянутой выше псевдосимуляции нода отправляет информацию об углах в сочленениях робота. Подразумевается, что этот топик указан в параметре source_list запущенной ноды joint_state_publisher.

Предоставляемые сервисы

  • add_pose (std_srvs/Trigger)

    Обращение пользователя к данному сервису вызывает запись текущей позиции (конфигурации) робота в упомянутый выше текстовый файл.

  • show_poses (std_srvs/Empty)

    Запрос, отправленный на данный сервис, начинает упомянутый выше процесс псевдосимуляции.

Параметры

  • ~file_with_poses (string, default: "poses.txt")

    Имя выше упомянутого текстового файла.

collect_ident_data.py

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

Подписана на топики

  • joint_states (sensor_msgs/JointStates)

    С данного топика нода получает информацию о текущих значениях углов, скоростей и моментов в сочленениях робота с тем, чтобы записать их во второй из упомянутых выше файлов.

Публикует в топики

  • arm_1/arm_controller/position_command (brics_actuator/JointPositions)

    В данный топик нода отправляет команды на переход робота в ту или иную позицию (конфигурацию).

Предоставляемые сервисы

  • make_movements (std_srvs/Empty)

    Вызов данного сервиса начинает описанные выше процессы: движение робота через желаемые позиции и запись описывающей его состояние информации в текстовый файл.

Параметры

  • ~file_with_poses (string, default: "poses.txt")

    Имя текстового файла, содержащего значения углов, соответствующих желаемым позициям (конфигурациям) робота.

  • ~file_with_data (string, default: "data.txt")

    Имя текстового файла, в который данная нода будет записывать значения для углов, скоростей и моментов в сочленениях робота во время его движения.

fk_test.py

Нода служит для проверки правильности работы решателя ПЗК из libs.kinematics. При своей работе в каждый момент времени она считывает информацию о текущих значениях углов в сочленениях робота или его urdf модели, "управляемой" нодой joint_state_publisher, решает ПЗК с помощью обращения к libs.kinematics и на основании полученного решения размещает (с учетом ориентации) сисктему координат test_box в том месте, где, как это следует из результатов решения ПЗК, находится конец пальцев схвата.

Подписана на топики

  • joint_states (sensor_msgs/JointStates)

    Из данного топика нода берет информацию о текущих значениях углов в сочленениях робота.

Требуемая информация о tf преобразованиях

  • ground_link --> <одна из систем координат манипулятора >

    Нода использует решение ПЗК для трансляции (broadcasting) преобразования между системами координат ground_link (соответствует Ox0y0z0) и test_box (соответствует Ox5y5z5). Следовательно, для корректного отображения результатов ее работы ROS должен знать, где находится система координат ground_link относительно манипулятора.

Обеспечиваемая информация о tf преобразованиях

  • ground_link --> test_box

    См. предыдущий пункт "Требуемая информация о tf преобразованиях".

ik_server.py

Представляет собой одну из нод, служащих для проверки правильности работы решателя ОЗК из libs.kinematics. Данная нода при получении запроса в сервисе ik решает ОЗК с помощью обращения к libs.kinematics и использует полученное решение для формирования и последующей отправки сообщения в топик joint_states.

Публикует в топики

  • joint_states (sensor_msgs/JointStates)

    В этот топик нода отправляет информацию о найденном решении ОЗК (если таковое, конечно, было получено).

Предоставляемые сервисы

  • ik (youbot_arm_control/IK)

    В качестве реакции на вызов данного сервиса нода пытается решить ОЗК относительно полученных при запросе позиции и ориентации. Об успехе или провале поиска решения нода отчитывается в ответном сообщении запроса.

Требуемая информация о tf преобразованиях

  • ground_link ) --> < одна из систем координат манипулятора >

    Полученные при запросе к сервису ik позицию и ориентацию для большего удобства отладки нода использует в том числе и для трансляции (broadcasting) преобразования между системами координат ground_link (соответствует Ox0y0z0) и test_box (соответствует Ox5y5z5).

Обеспечиваемая информация о tf преобразованиях

  • ground_link --> test_box

    См. предыдущий пункт "Требуемая информация о tf преобразованиях".

ik_client.py

Представляет собой одну из нод, служащих для проверки правильности работы решателя ОЗК из libs.kinematics. Данная нода принимает при собственном запуске 6 аргументов командной строки: три координаты и углы крена, тангажа и рыскания - и использует их для отправки запроса в сервис ik. Характер полученного от последнего ответа нода описывает коротким текстовым сообщением, выводимым в консоль.

Вызываемые сервисы

  • ik (youbot_arm_control/IK)

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

decart_trajectory_publisher.py

Публикует простую траекторию движения манипулятора в декартовом пространстве - отрезок прямой, по которому схват манипулятора (точнее система координат 0x5y5z5) должен пройти с постоянной скоростью.

Публикует в топики

  • decart_trajectory (youbot_arm_control/DecartTrajectory)

    В данный топик нода во все время своей работы публикует описанную выше траекторию.

Требуемая информация о tf преобразованиях

  • ground_link --> < одна из систем координат манипулятора >

    В качестве отсчетной системы координат в сообщениях, отправляемых в топик decart_trajectory, нода использует систему координат ground_link (соответствует 0x0y0z0). Следовательно, может быть необходимо указать, как последняя расположена относительно систем координат мнипулятора.

dec2joint_translator.py

Нода, осуществляющая перевод желаемых траекторий манипулятора из декартового пространства в конфигурационное.

Для расчета скоростей по значениям углов и ускорений по значениям скоростей используются первые конечные разности.

Подписана на топики

  • decart_trajectory (youbot_arm_control/DecartTrajectory)

    Через данный топик нода получает траекторию движения схвата манипулятора в виде набора последовательных поз (позиция + ориентация), которые должен пройти схват манипулятора (точнее система координат 0x5y5z5), и соответствующих им моментов времени (первой позе сооветствует нулевое время).

Публикует в топики

  • joint_trajectory (trajectory_msgs/JointTrajectory)

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

Предоставляемые сервисы

  • translate_trajectory (std_srvs/Trigger)

    В результате отправки запроса к данной ноде через этот сервис она предпринимает попытку осуществить перевод траектории из декартового пространства, которая доступна в топике decart_trajectory, в траекторию в конфигурационном пространстве и опубликовать результат в топик joint_trajectory.

Параметры

  • ~min_q (list of doubles, default: [0.1, 0.1, -5.08, 0.1, 0.1])

    Минимальные значения для углов в сочленениях робота. В описании траектории в конфигурационном пространстве не должно быть "точек", значения углов которых будут меньше, чем представленные в min_q.

  • ~max_q (list of doubles, default: [5.8, 2.6, -0.1, 3.48, 5.75])

    Максимальные значения для углов в сочленениях робота. В описании траектории в конфигурационном пространстве не должно быть "точек", значения углов которых будут больше, чем представленные в max_q.

  • ~file_with_trajectory_name (string, default: "file_with_trajectory_name.txt")

    Имя файла, в который будет сохраняться самая последняя переведенная в конфигурационное пространство траектория. Каждая из "точек" последней записывается в файл в виде отдельной строки имеющей следующий формат: "углы скорости ускорения время".

drawer.py

Нода публикует сообщения, которые могут быть использованы в rviz для визуализации траектории, описанной сообщениями типа youbot_arm_control/DecartTrajectory.

Подписана на топики

  • decart_trajectory (youbot_arm_control/DecartTrajectory)

    С этого топика нода получает информацию о траектории, для которой необходимо создать визуализационные сообщения.

Публикует в топики

  • trajectory_polygon (geometry_msgs/PolygonStamped)

    В данный топик нода публикует пространственную ломаную, проходящую через точки, составляющие траекторию, публикуемую в топик decart_trajectory.

  • trajectory_poses (geometry_msgs/PoseArray)

    В данный топик нода публикует массив поз, составляющих траекторию, публикуемую в топик decart_trajectory.

trajectory_vizualizator.py

Нода обеспечивает идеализированную симуляцию (визуализацию) процесса отработки роботом траектории, публикуемой в топик joint_trajectory.

Подписана на топики

  • joint_trajectory (trajectory_msgs/JointTrajectory)

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

Публикует в топики

  • poses/joint_states (sensor_msgs/JointStates)

    В данный топик во время упомянутой выше симуляции нода отправляет информацию об углах в сочленениях робота. Подразумевается, что этот топик указан в параметре source_list запущенной ноды joint_state_publisher.

Предоставляемые сервисы

  • show_trajectory (std_srvs/Trigger)

    После отправки запроса на данный сервис нода начинает описанный выше процесс симуляции.

Clone this wiki locally