Отправьте целевое сообщение в сервер действия
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 и получите целевое сообщение. actClient
возразите подключениям к уже рабочему серверу действия ROS. 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 Используя Структуры сообщения.
Указания и ограничения по применению:
Поддерживаемый только для Типа Сборки, Executable
.
Использование в блоке MATLAB Function не поддерживается.
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.