Этот пример иллюстрирует, как обновить поле заголовка сообщения 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.
Откройте блок 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 0.81583 seconds. Initializing ROS master on http://192.168.0.10:60476. Initializing global node /matlab_global_node_76923 with NodeURI http://bat1071901glnxa64:34601/
Запустите модель. Необходимо видеть обновленные значения для 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_76923 with NodeURI http://bat1071901glnxa64:34601/ Shutting down ROS master on http://192.168.0.10:60476.