Отправка сообщения цели на сервер действий
sendGoal(
отправляет целевое сообщение на сервер действий. Указанный клиент действий отслеживает эту цель. Функция не ждет, когда цель будет выполнена и возвратами немедленно.client
,goalMsg
)
Если на ActionFcn
, FeedbackFcn
, и ResultFcn
заданы обратные вызовы клиента, которые вызываются при обработке цели на сервере действий. Все коллбэки, связанные с ранее отправленной целью, отключены, но предыдущая цель не отменяется.
В этом примере показано, как создать сообщения о целях и отправить на уже активный сервер действий ROS в сети ROS. Для подключения к этому серверу необходимо создать клиент действия ROS. Чтобы запустить сервер действий, эта команда используется в распределении ROS:
roslaunch turtlebot_actions server_turtlebot_move.launch
После подключитесь к узлу ROS с помощью rosinit
с правильным IP-адресом.
rosinit('192.168.17.129',11311)
Initializing global node /matlab_global_node_27318 with NodeURI http://192.168.17.1:60260/
Создайте клиент действия ROS и получите сообщение о цели. The actClient
объект соединяется с уже работающим сервером действий ROS. The goalMsg
является допустимым сообщением цели. Обновите параметры сообщения с вашей конкретной целью.
[actClient, goalMsg] = rosactionclient('/turtlebot_move');
disp(goalMsg)
ROS TurtlebotMoveGoal message with properties: MessageType: 'turtlebot_actions/TurtlebotMoveGoal' TurnDistance: 0 ForwardDistance: 0 Use showdetails to show the contents of the message
Вы также можете создать сообщение с помощью rosmessage
и объект клиента действий. Это сообщение отправляет линейные и угловые скорости роботу Turtlebot ®.
goalMsg = rosmessage(actClient); disp(goalMsg)
ROS TurtlebotMoveGoal message with properties: MessageType: 'turtlebot_actions/TurtlebotMoveGoal' TurnDistance: 0 ForwardDistance: 0 Use showdetails to show the contents of the message
Измените параметры сообщения цели и отправьте цель на сервер действий.
goalMsg.ForwardDistance = 2; sendGoal(actClient,goalMsg)
В этом примере показано, как отправить и отменить цели для действий ROS. Типы действий должны быть установлены заранее, когда работает сервер действий.
Вы должны были настроить '/fibonacci'
тип действия. Чтобы запустить этот сервер действий, используйте следующую команду в системе ROS:
rosrun actionlib_tutorials fibonacci_server
Сначала настройте клиент действия ROS. Затем отправьте сообщение цели с измененными параметрами. Наконец, отмените свою цель и все цели на сервере действий.
Подключиться к сети ROS с заданным IP-адресом. Создайте клиент действия ROS, подключенный к сети ROS с помощью rosactionclient
. Задайте имя действия. Дождитесь подключения клиента к серверу.
rosinit('192.168.203.133',11311)
Initializing global node /matlab_global_node_18287 with NodeURI http://192.168.203.1:55284/
[actClient,goalMsg] = rosactionclient('/fibonacci','DataFormat','struct'); waitForServer(actClient);
Отправьте сообщение цели с измененными параметрами. Дождитесь завершения выполнения цели.
goalMsg.Order = int32(4); [resultMsg,resultState] = sendGoalAndWait(actClient,goalMsg)
resultMsg = struct with fields:
MessageType: 'actionlib_tutorials/FibonacciResult'
Sequence: [0 1 1 2 3]
resultState = 'succeeded'
rosShowDetails(resultMsg)
ans = ' MessageType : actionlib_tutorials/FibonacciResult Sequence : [0, 1, 1, 2, 3]'
Отправьте новое сообщение о цели, не дожидаясь.
goalMsg.Order = int32(5); sendGoal(actClient,goalMsg)
Отмена цели на клиенте действий ROS, actClient
.
cancelGoal(actClient)
Отмена всех целей на сервере действий, который actClient
соединяется с.
cancelAllGoals(actClient)
Удалите клиент действий.
delete(actClient)
Отсоединитесь от сети ROS.
rosshutdown
Shutting down global node /matlab_global_node_18287 with NodeURI http://192.168.203.1:55284/
client
- клиент действия ROSSimpleActionClient
указатель на объектКлиент действия ROS, заданный как SimpleActionClient
указатель на объект. Этот простой клиент действий позволяет вам отслеживать одну цель за раз.
goalMsg
- сообщение цели действия ROSMessage
указатель на объект | структураСообщение цели действия ROS, заданное как Message
указатель на объект или структура. Обновите это сообщение с вашими сведениями о цели и отправьте его в клиент действия ROS с помощью sendGoal
или sendGoalAndWait
.
Примечание
В следующем релизе ROS Toolbox будет использовать структуры сообщений вместо объектов для сообщений ROS.
Чтобы использовать структуры сообщений, установите "DataFormat"
аргумент имя-значение в "struct"
. Для получения дополнительной информации см. раздел Структуры сообщений ROS.
Изменение поведения в будущем релизе
Теперь можно создавать сообщения как структуры с полями, соответствующими свойствам объекта сообщения. Использование структур обычно повышает эффективность создания, обновления и использования сообщений ROS, но поля сообщений больше не проверяются при установке. Типы сообщений и соответствующие значения полей из структур проверяются при отправке по сети.
Чтобы использовать сообщения ROS в качестве структур, используйте "DataFormat"
аргумент имя-значение при создании издателей, подписчиков или других объектов ROS. Любые сообщения, сгенерированные из этих объектов, будут использовать структуры.
pub = rospublisher("/scan","sensor_msgs/LaserScan","DataFormat","struct") msg = rosmessage(pub)
Можно также создавать сообщения как структуры непосредственно, но убедитесь, что задали формат данных следующим "struct"
для издателя, подписчика или других объектов ROS. Объекты ROS по-прежнему используют объекты сообщений по умолчанию.
msg = rosmessage("/scan","sensor_msgs/LaserScan","DataFormat","struct") ... pub = rospublisher("/scan","sensor_msgs/LaserScan","DataFormat","struct")
В следующем релизе сообщения ROS по умолчанию будут использовать структуры, а объекты сообщений ROS будут удалены.
Для получения дополнительной информации смотрите Улучшение эффективности ROS с использованием структур сообщений.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.