Отправить сообщение о цели на сервер действий
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)
Отключитесь от сети АФК.
rosshutdown
Shutting down global node /matlab_global_node_18287 with NodeURI http://192.168.203.1:55284/
client - клиент действия ROSSimpleActionClient дескриптор объектаКлиент действия ROS, указанный как SimpleActionClient дескриптор объекта. Этот простой клиент действий позволяет отслеживать одну цель одновременно.
goalMsg - сообщение о цели действия АФКMessage дескриптор объекта | структураСообщение цели действия ROS, указанное как Message дескриптор объекта или структура. Обновите это сообщение с помощью сведений о цели и отправьте его клиенту действия ROS с помощью sendGoal или sendGoalAndWait.
Примечание
В следующем выпуске Панель инструментов ROS будет использовать структуры сообщений вместо объектов для сообщений 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.