ROS-сервисы
В этом разделе вы найдете информацию обо всех ROS-сервисах, существующих в системе робота МОРС.
robot_mode
Сервис используется для переключения между режимами робота: ходьба, управление корпусом, управление стопами ног по отдельности, управление сервоприводами. Сервер работает в ноде locomotion_controller. Файл с разметкой сообщения сервиса QuadrupedCmd находится в пакете mors. Если вы хотите вызывать сервис со стороннего компьютера, то вам нужно скачать этот пакет c Github в свое рабочее пространство ROS и затем произвести компиляцию.
Файл сервиса QuadrupedCmd.srv имеет следующие поля:
float32 cmd
---
int16 result
string description
cmd - запрос для переключения между режимами: 0 - ходьба, 1 - управление стопами, 2 - управление корпусом, 3 - управление сервоприводами.
result - ответ: 1 - если команда успешно получена и обработана, 0 - в случае ошибки.
description - описание ответа. В случае ошибки поле пустое, в случае успеха - сообщение "get the mode"
Во время режима управления сервоприводами вы можете использовать сервисы для установки коэффициентов обратной связи системы управления приводом Kp и Kd.
Во всех остальных случаях, установка Kp и Kd производится через config-файл пакета locomotion_controller.
Пример вызова сервиса через CLI
rosservice call /robot_mode "cmd: 2.0"
При отправке это команды робот переключится в режим управления корпусом.
robot_action
Сервис используется для вызова скриптов действий: встать, лечь, дать лапу, кувырок, помахать лапой. Сервер работает в ноде locomotion_controller. Файл с разметкой сообщения сервиса QuadrupedCmd находится в пакете mors. Если вы хотите вызывать сервис со стороннего компьютера, то вам нужно скачать этот пакет c Github в свое рабочее пространство ROS и затем произвести компиляцию.
Файл сервиса QuadrupedCmd.srv имеет следующие поля:
float32 cmd
---
int16 result
string description
cmd - запрос для вызова действия: 1 - встать, 2 -лечь (подготовка к выключению), 3 - дать лапу, 4 - кувырок, 5 - помахать лапой, 6 - сидеть.
result - ответ: 1 - если команда успешно получена и обработана, 0 - в случае ошибки.
description - описание ответа. В случае ошибки поле пустое, в случае успеха - сообщение "get the action"
Описание действий
Встать
Сервисное действие, необходимо для перевода робота из выключенного состояния в состояние готовности к работе. При вызове действия робот складывает ноги, затем опускает вниз, поджав под себя и в конце встает в исходное состояние. После завершения действия, робот автоматически переходит в режим ходьбы. Действие можно вызвать только когда робот находится в лежачем положении с выключенными сервоприводами.
Лежать
Сервисное действие, необходимо для подготовки робота к выключению. При вызове действия робот ложится, поджимая под себя ноги, а затем складывает их на спине для более удобной переноски. После завершения действия, полностью снимается питание с сервоприводов. Действие можно вызвать только когда робот стоит.
Дать лапу
Равлекательное действие. При вызове, робот слегка отклоняет корпус назад, приподнимает правую лапу и потом вытягивает её вперед. Действие можно вызвать только когда робот стоит.
Кувырок
Развлекательно действие. При вызове, робот ложится, переворачивается на спину, а потом встает в исходное состояние, делая таким образом боковой кувырок. Действие можно вызвать только когда робот стоит.
Помахать лапой
Развлекательное действие. При вызове, робот садится, затем поднимает левую лапу вертикально вверх и начинает махать ею. Действие можно вызвать только когда робот стоит.
Сидеть
Робот садится на несколько секунд и потом встает в исходное положение
Пример вызова сервиса через CLI
rosservice call /robot_action "cmd: 3.0"
При отправке это команды робот выполнит команду "дать лапу".
stride_height
Сервис используется для установки высоты шага во время ходьбы. Сервер работает в ноде locomotion_controller. Файл с разметкой сообщения сервиса QuadrupedCmd находится в пакете mors. Если вы хотите вызывать сервис со стороннего компьютера, то вам нужно скачать этот пакет c Github в свое рабочее пространство ROS и затем произвести компиляцию.
Файл сервиса QuadrupedCmd.srv имеет следующие поля:
float32 cmd
---
int16 result
string description
cmd - высота шага в метрах
result - ответ: 1 - если команда успешно получена и обработана, 0 - в случае ошибки.
description - описание ответа. В случае ошибки поле пустое, в случае успеха - сообщение "get stride height"
Пример вызова сервиса через CLI
rosservice call /stride_height "cmd: 0.04"
При отправке это команды локомоторный контроллер установит высоту шага 4 см.
joints_kp
Сервис используется для установки пропорциональных коэффициентов Kp сервоприводов, когда robot_mode= 3, т.е. робот находится в режиме управления сервоприводами. Сервер работает в ноде locomotion_controller. Файл с разметкой сообщения сервиса JointsCmd находится в пакете mors. Если вы хотите вызывать сервис со стороннего компьютера, то вам нужно скачать этот пакет c Github в свое рабочее пространство ROS и затем произвести компиляцию.
Файл сервиса JointsCmd.srv имеет следующие поля:
float32[] cmd
---
int16 result
string description
cmd - массив из 12 значений Kp для каждого привода. Нумерация приводов идет согласно изображению в разделе Обозначения
result - ответ: 1 - если команда успешно получена и обработана, 0 - в случае ошибки.
description - описание ответа. В случае ошибки поле пустое, в случае успеха - сообщение "get kp"
Пример вызова сервиса через CLI
rosservice call /joints_kp "cmd: [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]"
При отправке это команды Kp привода бедра ноги R1 будет равно 0.5, Kp всех остальных приводов будет равно нулю.
joints_kd
Сервис используется для дифференциальных коэффициентов Kd сервоприводов, когда robot_mode= 3, т.е. робот находится в режиме управления сервоприводами. Сервер работает в ноде locomotion_controller. Файл с разметкой сообщения сервиса JointsCmd находится в пакете mors. Если вы хотите вызывать сервис со стороннего компьютера, то вам нужно скачать этот пакет c Github в свое рабочее пространство ROS и затем произвести компиляцию.
Файл сервиса JointsCmd.srv имеет следующие поля:
float32[] cmd
---
int16 result
string description
cmd - массив из 12 значений Kd для каждого привода. Нумерация приводов идет согласно изображению в разделе Обозначения
result - ответ: 1 - если команда успешно получена и обработана, 0 - в случае ошибки.
description - описание ответа. В случае ошибки поле пустое, в случае успеха - сообщение "get kd"
Пример вызова сервиса через CLI
rosservice call /joints_kd "cmd: [0.0, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]"
При отправке это команды Kd привода бедра ноги R1 будет равно 0.5, Kd всех остальных приводов будет равно нулю.