Робот-собака МОРС
  • Общая информация
  • Технические характеристики
  • Комплект поставки
  • Безопасность
  • Быстрый старт
  • Полезные ссылки
  • Обозначения
  • Настройка и обслуживание
    • Джойстик RadioLink T8S
    • Зарядка батареи
    • Выключение робота
    • Подключение к роботу по сети
      • Параметры точки доступа
      • Подключение через SSH
      • Подключение через Remote Desktop Protocol (RDP)
      • Подключение через SFTP
      • Настройка VSCode
    • Подключение робота к Интернету
    • Подключение к ROS на роботе
    • Установка ПО
    • Графический интерфейс
    • Ubuntu-сервис
    • Смена пароля пользователя
    • Обновление дампа памяти BLDC драйвера 10А
    • Замена приводного ремня
    • Переинициализация приводов
    • Подключение дополнительных устройств
      • Подключение головы VBRoboHead
      • Подключение видеокамеры Intel Realsense D435i
      • Подключение видеокамеры Luxonis OAK-D Lite
      • Подключение лидара RPLIDAR A1M8-R5
    • Обновление управляющего ПО
    • Возврат к заводским настройкам
    • Устранение неполадок
  • Симуляция
    • Описание имитационной модели
    • Параметры файла bringup_sim.launch
    • Подключение джойстиков к ПК
    • ROS-параметры
    • OpenAI Gymnasium
  • Устройство робота
    • Электроника
    • Программное обеспечение
    • Файлы и папки в системе
    • Советы по разработке собственного ПО
    • Примеры
    • ROS-пакеты
      • mors_hardware
        • bhi360_imu_node
        • ds4_teleop
        • power_bridge
        • radiolink_teleop
        • status_tracker
      • mors_base
        • champ_msgs
        • cmd_commutator
        • joy_converter
        • locomotion_controller
        • log_writer
        • mors
        • servo_state_lcm2ros
        • servo_cmd_ros2lcm
      • mors_pc
        • robogui
        • mors_sim
    • ROS-топики
    • ROS-сервисы
      • robot_mode
      • robot_action
      • stride_height
      • joints_kp
      • joints_kd
    • LCM-каналы
Powered by GitBook
On this page
  • LCM API
  • ROS API
  • Параметры
  • Входящие топики
  • Исходящие топики
  1. Устройство робота
  2. ROS-пакеты
  3. mors_base

locomotion_controller

Previousjoy_converterNextlog_writer

Last updated 7 months ago

Данный модуль является контроллером шагания робота. В качестве алгоритма стабилизации корпуса он использует метод ZMP Preview Control.

На вход алгоритма поступают желаемые скорости движения, на основе которых блок Foot Planner строит желаемые точки опоры робота, а также выдает информацию о том, в какой фазе нога должна находиться в каждый момент времени: опоры или переноса. Если нога должна находиться в фазе переноса, то модуль Swing Trajectory Generater формирует траекторию на основе текущего положения ступни, высоты шага, частоты шага и точки, в которую нужно поставить ногу. Если нога должна находиться в фазе опоры, то модуль ZMP Trajectory Generator формирует задающую траекторию движения точки ZMP (Zero-Moment Point), которая поступает на блок ZMP Preview Control. Этот модуль, используя модель линейного обратного маятника генерирует задающую траекторию для ЦМ (центра масс) корпуса робота. Далее, благодаря модулю Body Moving Control координаты ЦМ преобразуются в координаты ступней модуля. Выходы модулей Swing Trajectory Generator и Body Moving Control передаются на мультиплексирующий модуль Mux, который выдает желаемые координаты ступней каждой ноги робота в зависимости от того, в какой фазе должна находиться конкретная нога. В конце блок решения обратной задачи кинематики IK Solver преобразует координаты в желаемые углы в сочленениях и отправляет их в аппаратную часть по протоколу LCM.

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

  • как у млекопитающих, обозначается буквой "m"

  • X-образная, обозначается буквой "х"

  • О-обращная, обозначается буквой "о"

LCM API

  • Канал SERVO_CMD: предназначен для отправки задающих параметров сервоприводов. Формат сообщения имеет следующий вид:

struct servo_cmd_msg
{
    float timestamp; // временная метка

    float position[12];  // угловое положение [рад]
    float velocity[12];  // угловая скорость [рад/сек]
    float torque[12];  // момент [Н м]
    float kp[12];  // пропорциональный коэффициент
    float kd[12];  // дифференциальный коэффициент
}
  • Канал SERVO_STATE: предназначен для получения состояния сервоприводов. Формат сообщения имеет следующий вид:

struct servo_state_msg
{
    float timestamp; // временная метка

    float position[12];  // угловое положение [рад]
    float velocity[12];  // угловая скорость [рад/сек]
    float torque[12];  // момент [Н м]
}

ROS API

Параметры

Файл параметров располагается в папке config

  • general

    • frequency (по умолчанию: 300) - частота, на которой работает модуль

    • contact_flags - если True, то показывает находится ли в данный момент нога в фазе опоры

  • simulation - параметры для симуляции

    • kp - пропорциональный коэффициент для ПД-регулятора привода

    • kd - дифференциальный коэффициент для ПД-регулятора привода

    • yaw_kp - пропорциональный коэффициент для П-регулятора, стабилизирующего курс робота

    • kinematic_scheme - выбор кинематической схемы ног робота. Доступные варианты: "m", "x", "o". То, как будет выглядеть робот в стойке, показано на рисунках выше.

    • robot_height - высота робота в стойке

    • cog_x_offset - смещение центра тяжести корпуса робота по оси X

    • cof_z_offset - смещение центра тяжести корпуса робота по оси Y

    • ef_init_x - изначальное положение стопы робота по оси X

    • ef_init_y - изначальное положение стопы робота по оси Y

    • stride_frequency - частота шага робота во время ходьбы

    • preview_horizon - на сколько времени вперед алгоритм прогнозирует будущее состояние робота

  • hardware

    • kp - пропорциональный коэффициент для ПД-регулятора привода

    • kd - дифференциальный коэффициент для ПД-регулятора привода

    • yaw_kp - пропорциональный коэффициент для П-регулятора, стабилизирующего курс робота

    • kinematic_scheme - выбор кинематической схемы ног робота. Доступные варианты: "m", "x", "o". То, как будет выглядеть робот в стойке, показано на рисунках выше.

    • robot_height - высота робота в стойке

    • cog_x_offset - смещение центра тяжести корпуса робота по оси X

    • cof_z_offset - смещение центра тяжести корпуса робота по оси Y

    • ef_init_x - изначальное положение стопы робота по оси X

    • ef_init_y - изначальное положение стопы робота по оси Y

    • stride_frequency - частота шага робота во время ходьбы

    • preview_horizon - на сколько времени вперед алгоритм прогнозирует будущее состояние робота

  • topics - названия ros-топиков и lcm-каналов, с которыми работает пакет

    • ros_servo_cmd_topic (по умолчанию: "joint_cmd") - топик, по которому передаются команды на приводы

    • lcm_servo_cmd_channel (по умолчанию: "SERVO_CMD") - название LCM-канала, по которому передаются команды на приводы

    • lcm_servo_state_channel (по умолчанию: "SERVO_STATE") - название LCM-канала, по которому передается состояние приводов

    • ros_imu_topic (по умолчанию: "imu/data") - название топика для получения данных с IMU

    • ros_cmd_vel_topic (по умолчанию: "cmd_vel") - топик для получения желаемой скорости

    • ros_cmd_pose_topic (по умолчанию: "cmd_pose") - топик для получения желаемого положения и ориентации корпуса робота

    • ros_cmd_ef_pose_topic (по умолчанию: "ef_position/command") - топик для получения желаемого положения стоп робота

    • ros_cmd_joint_pos_topic (по умолчанию: "joint_group_position_controller/command") - топик для получения желаемых значений для сервоприводов

    • ros_state_contact_flags_topic (по умолчанию: "foot_contacts") - топик для выдачи информации о том, находится ли нога в фазе опоры

    • ros_state_ef_pose_topic (по умолчанию: "ef_position/states") - топик для выдачи текущего положения стоп робота

Входящие топики

Исходящие топики

imu/data () - данные с IMU (линейное ускорение, угловая скорость, ориентация)

cmd_vel () - желаемая скорость перемещения робота

cmd_pose () - желаемые положения и ориентация корпуса робота

ef_position/command () - желаемые положения стоп робота

joint_group_position_controller/command () - желаемое угловое положение сочленений робота

disable () - если True, то нода блокирует свою работу

ef_position/states () - текущее положение стоп робота

lcm/servo_cmd () - показывает, какие команды были отправлены на сервоприводы

foot_contacts () - показывает, когда нога находится в фазе опоры

sensor_msgs/Imu
geometry_msgs/Twist
geometry_msgs/Twist
geometry_msgs/PoseArray
std_msgs/Bool
geometry_msgs/PoseArray
champ_msgs/ContactStamped
Структурная схема алгоритма управления локомоцией
trajectory_msgs/JointTrajectoryPoint
trajectory_msgs/JointTrajectoryPoint