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

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

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

open_system('rosHeaderAssignmentBlockExampleModel.slx')

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

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

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

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

rosinit
Launching ROS Core...
....Done in 4.6769 seconds.
Initializing ROS master on http://192.168.88.1:54725.
Initializing global node /matlab_global_node_04861 with NodeURI http://ah-avijayar:62285/

Запустите модель. Необходимо видеть обновленные значения для 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_04861 with NodeURI http://ah-avijayar:62285/
Shutting down ROS master on http://192.168.88.1:54725.