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

®

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

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

open_system('rosHeaderAssignmentBlockExampleModel.slx')

Блок Blank Message создает пустое сообщение ROS типа, sensor_msgs/LaserScan. Любой другой тип сообщения, который содержит поле Header type std_msgs/Header можно использовать здесь, вместо этого. Выход блока Blank Message затем подается в блок Header Assignment, который обновляет поле Header этого сообщения. Для отображения, frame_id и stamp значения обновленного сообщения ROS Header выбираются из списка элементов шины с помощью блоков Bus Selector. Кроме того, пустой /rosgraph_msgs/Clock создается сообщение, и в /clock публикуется пользовательское время, основанное на текущем времени симуляции тема в сети ROS.

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

Откройте блок Header Assignment, чтобы отобразить его параметры блоков. Выбрана опция Set Frame ID, и имя координатной системы координат, связанной с сообщением, задано в текстовом поле следующим lidar_link. Это будет задано как frame_id значение для заголовка. Также выбрана опция Set Timestamp, которая устанавливает stamp значение заголовка текущего системного времени ROS по умолчанию. Значение поля имени опции Header установлено на Use the default Header field name потому что имя поля Header в пустом сообщении является его значением по умолчанию, header. Если вы используете ROS-сообщение с пользовательским именем для поля Header, можно выбрать Specify your own опция из выпадающего списка и укажите имя поля Header в текстовом поле.

Перед запуском модели вызовите 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 тип сообщения. В порядок включения этого поведения для блока Header Assignment установите /use_sim_time Параметр ROS для true.

rosparam set /use_sim_time true

Это конфигурирует блок Header Assignment для поиска /clock тема в сети ROS и соответствующим образом обновляйте временную метку сообщения ROS. Если /clock тема не публикуется, временная метка будет нули. Поскольку блок Header Assignment обновляется во время каждого попадания выборки, точность временной метки всегда зависит от размера шага решателя. Меньшие значения размера шага приводят к более точным значениям временной метки. Запустите модель. Вы должны увидеть время в stamp поле сообщения ROS на основе опубликованных /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.