exponenta event banner

Обновление поля заголовка сообщения ROS в Simulink

®

В этом примере показано, как обновить поле заголовка сообщения ROS с помощью Simulink ®.

Некоторые сообщения ROS содержат определенное поле Header, которое соответствует std_msgs/Header тип сообщения. Поле Header содержит временную метку и информацию кадра координат сообщения ROS. В этом примере модели показано, как использовать блок назначения заголовка для обновления этой информации для сообщения ROS в Simulink ® .

open_system('rosHeaderAssignmentBlockExampleModel.slx')

Блок «Пустое сообщение» создает пустое сообщение ROS типа sensor_msgs/LaserScan. Любой другой тип сообщения, содержащий поле Header типа std_msgs/Header вместо этого можно использовать здесь. Выходные данные блока «Пустое сообщение» затем подаются в блок «Назначение заголовка», который обновляет поле «Заголовок» этого сообщения. Для отображения, frame_id и stamp значения обновленного сообщения ROS Header выбираются из списка элементов шины с помощью блоков выбора шины. Кроме того, пробел /rosgraph_msgs/Clock создается сообщение, и пользовательское время, основанное на текущем времени моделирования, публикуется в /clock тема в сети АФК.

Обновление значений идентификатора рамки координат и метки времени в заголовке

Откройте блок «Назначение заголовка» для отображения его параметров. Опция Задать идентификатор кадра (Set Frame ID) выбрана, а имя рамки координат, связанной с сообщением, указано в текстовом поле как lidar_link. Это будет установлено как frame_id значение для заголовка. Также выбран параметр Set Timestamp, который устанавливает stamp значение параметра Header для текущего системного времени ROS по умолчанию. Для параметра Имя поля заголовка установлено значение Use the default Header field name поскольку имя поля Header в пустом сообщении является значением по умолчанию, header. При использовании сообщения ROS с пользовательским именем для поля Заголовок можно выбрать Specify your own в раскрывающемся списке и укажите имя поля Заголовок в текстовом поле.

Перед запуском модели вызовите rosinit для подключения к сети ROS.

rosinit
Launching ROS Core...
Done in 0.73932 seconds.
Initializing ROS master on http://192.168.0.10:60651.
Initializing global node /matlab_global_node_62987 with NodeURI http://bat6315glnxa64:41309/

Запустите модель. Необходимо просмотреть обновленные значения для frame_id и stamp поля сообщения ROS на соответствующих экранах.

sim('rosHeaderAssignmentBlockExampleModel')

Обновление значения метки времени в заголовке на основе пользовательского тактового сигнала

В некоторых случаях полезно устанавливать временную метку сообщения ROS на основе времени, опубликованного сервером синхронизации, чем системное время ROS. Сервер синхронизации - это специализированный узел ROS, который публикует отметку времени для /clock тема в виде rosgraph_msgs/Clock тип сообщения. Чтобы включить это поведение для блока назначения заголовка, установите /use_sim_time Параметр ROS для true.

rosparam set /use_sim_time true

Это настраивает блок назначения заголовка для поиска /clock раздел в сети ROS и соответствующим образом обновить временную метку сообщения ROS. Если /clock раздел не публикуется, отметка времени будет равна нулю. Поскольку блок назначения заголовка обновляется при каждом попадании образца, точность временной метки всегда зависит от размера шага решателя. Меньшие значения размера шага приводят к более точным значениям временных меток. Запустите модель. Вы должны увидеть время в stamp поле сообщения АФК на основе опубликованного /clock тема, а не текущее системное время ROS.

sim('rosHeaderAssignmentBlockExampleModel')

Завершите работу сети ROS.

rosshutdown
Shutting down global node /matlab_global_node_62987 with NodeURI http://bat6315glnxa64:41309/
Shutting down ROS master on http://192.168.0.10:60651.