Эти примеры показывают, как получить, задать, сравнить, и манипулировать параметрами ROS в Simulink®. Чтобы запустить эти примеры, необходимо сначала настроить сеть ROS с помощью rosinit
. Чтобы задать параметры всей сети и поделиться значениями со всей сетью, запустите сервер параметров ROS с помощью rosparam
. Следуйте этим примерам, чтобы увидеть, как работать с параметрами в Simulink, включая использование строковых параметров.
Эта модель получает и устанавливает параметры ROS с помощью Simulink ®. Этот пример иллюстрирует, как использовать параметры ROS в Simulink и обмениваться данными по сети ROS. Целое значение задается как параметр в сети ROS. Это целое число извлекается из сервера параметров и сравнивается с константой. Логический выход из сравнения также задано в сети. Измените константу в верхнюю часть слева (синем), когда вы запускаете модель, чтобы задать параметры сети на основе условий входа пользователя.
Вы должны быть подключены к сети ROS. Функции rosinit
в командной строке MATLAB ®.
Чтобы создать свой строковый параметр, используйте блок String Constant и преобразовайте его в uint8 с помощью блока MATLAB function. Преобразованная строка uint8 передается в блок Set Parameter вместе с дополнительным входом Length, заданным вторым блоком Constant. Длина относится к максимально ожидаемой длине строки и требуется для всех строковых параметров. Для получения дополнительной информации смотрите блок Set Parameter.
В сетях 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. Он извлекается как 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);