Отправка сообщения цели на сервер действий
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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.