Параметры ROS в Simulink

Эти примеры показывают, как получить, задать, сравнить, и манипулировать параметрами ROS в Simulink®. Чтобы запустить эти примеры, необходимо сначала настроить сеть ROS с помощью rosinit. Чтобы задать параметры всей сети и поделиться значениями со всей сетью, запустите сервер параметров ROS с помощью rosparam. Следуйте этим примерам, чтобы увидеть, как работать с параметрами в Simulink, включая использование строковых параметров.

Получите и установите параметры ROS

Эта модель получает и устанавливает параметры ROS с помощью Simulink ®. Этот пример иллюстрирует, как использовать параметры ROS в Simulink и обмениваться данными по сети ROS. Целое значение задается как параметр в сети ROS. Это целое число извлекается из сервера параметров и сравнивается с константой. Логический выход из сравнения также задано в сети. Измените константу в верхнюю часть слева (синем), когда вы запускаете модель, чтобы задать параметры сети на основе условий входа пользователя.

Вы должны быть подключены к сети ROS. Функции rosinit в командной строке MATLAB ®.

Установите строковый параметр в сети ROS

Чтобы создать свой строковый параметр, используйте блок String Constant и преобразовайте его в uint8 с помощью блока MATLAB function. Преобразованная строка uint8 передается в блок Set Parameter вместе с дополнительным входом Length, заданным вторым блоком Constant. Длина относится к максимально ожидаемой длине строки и требуется для всех строковых параметров. Для получения дополнительной информации смотрите блок Set Parameter.

Сравнение строковых параметров ROS

В сетях ROS параметры строк сохраняются как uint8 массив. Когда вы получаете от строковых параметров с сервера, они возвращаются как char массив. В Simulink ® они приводятся как uint8, поэтому вы должны использовать uint8 векторы символов при сравнении с параметрами строки. Можно использовать это сравнение, чтобы инициировать подсистемы для больших моделей или проверить настройки для определенных алгоритмов.

Подключение к сети ROS. Настройте дерево параметров ROS.

rosinit
Launching ROS Core...
Done in 0.76143 seconds.
Initializing ROS master on http://192.168.0.10:55549.
Initializing global node /matlab_global_node_35139 with NodeURI http://bat6315glnxa64:38417/
ptree = rosparam;

Установите параметр ROS, /camera_format, к строке значению. Можно использовать строковые скаляры или векторы символов. Значение сохранено как uint8 массив на сервере параметров ROS и возвращенный как 'jpeg' в MATLAB ®.

set(ptree,"/camera_format","jpeg")
pause(1)
pvalue = get(ptree,"/camera_format")
pvalue = 
'jpeg'

Запустите присоединенную модель Simulink ®. Эта модель проверяет, называется ли ранее установленный параметр формата камеры 'jpeg'. Чтобы вывести параметр с сервера, используйте блок Get Parameter. Затем сравните параметр с вектором символов, приведенной как uint8 из блока Constant, с использованием блока MATLAB function. Выход 1 означает, что параметры совпадают.

open_system("rosStringParameterCompare")
sim("rosStringParameterCompare");

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

rosshutdown
Shutting down global node /matlab_global_node_35139 with NodeURI http://bat6315glnxa64:38417/
Shutting down ROS master on http://192.168.0.10:55549.

The stringCompare функция определяется как:

function y = stringCompare(str1,str2)
%#codegen
minLength = min(length(str1),length(str2));
st1 = str1(1:minLength);
st2 = str2(1:minLength);
y = all(st1(:)==st2(:));

Проверьте параметр кодировки изображений для ROS Image Message

Эта модель показывает, как получить доступ к строковым параметрам и использовать их для запуска операций подсистемы. Он получает формат изображения от установленного сервера параметров ROS. Он извлекается как uint8 массив, который сравнивается с помощью strcmp Блок MATLAB function. Когда новое изображение получено от блока Subscribe, и формат uint8('jpeg'), он запускает блок «Process Image», чтобы выполнить задачу с данными изображения.

Подключитесь к сети ROS и настройте сервер параметров ROS.

rosinit
Launching ROS Core...
Done in 0.70103 seconds.
Initializing ROS master on http://192.168.0.10:58132.
Initializing global node /matlab_global_node_09733 with NodeURI http://bat6315glnxa64:38027/
ptree = rosparam;

Установите "/camera/rgb/image_raw/compressed/format" Параметр и настройте издателя для "/camera/rgb/image_raw/compressed" тема.

set(ptree,"/camera/rgb/image_raw/compressed/format","jpeg")
pub = rospublisher("/camera/rgb/image_raw/compressed","sensor_msgs/CompressedImage");

Откройте модель Simulink ®. Эта модель проверяет параметр формата изображения и сравнивает значение с uint8 приведение вектора символов, uint8('jpeg') использование блока MATLAB ® Function. Логический вывод подается на оператор AND с выходом IsNew блока Subscribe, который выводит изображение из сети. Если значение параметров верно и получено новое сообщение, срабатывает Подсистема «Process Image».

Запустите модель и используйте кнопки в модели, чтобы изменить параметр формата изображения и проверить strcmp функция работает. The eq выход должен быть равен 1, когда параметр установлен в 'jpeg'. Пока модель работает, ожидается, что в сети публикуются изображения сообщений.

open_system("rosImageFormatParameter")

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

rosshutdown
Shutting down global node /matlab_global_node_09733 with NodeURI http://bat6315glnxa64:38027/
Shutting down ROS master on http://192.168.0.10:58132.

The strcmp функция в блоке MATLAB ® Function определяется как:

function eq = strcmp(s1, n1, s2)
%#codegen
% Convert to proper strings
string1 = char(s1(1:n1));
string2 = char(s2);
eq = strcmp(string1, string2);

См. также

|