Этот пример иллюстрирует, как обновить поле заголовка сообщения 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.