Эти примеры показывают, как получить, установить, сравнивают и управляют параметрами ROS в Simulink®. Чтобы запустить эти примеры, необходимо сначала настроить сеть ROS с помощью rosinit
. Чтобы установить настройки всей сети и стоимость акций с целой сетью, запустите сервер параметра ROS с помощью rosparam
. Последуйте этим примерам, чтобы видеть, как работать с параметрами в Simulink, включая использование строковых параметров.
Эта модель получает и устанавливает параметры ROS с помощью Simulink®. Этот пример иллюстрирует, как использовать параметры ROS в Simulink и осуществлять обмен данными по сети ROS. Целочисленное значение установлено в качестве параметра в сети ROS. Это целое число получено из сервера параметра и по сравнению с константой. Выходная булевская переменная от сравнения также установлена в сети. Измените постоянный блок левого верхнего (синего) цвета, когда вы запустите модель, чтобы установить сетевые параметры на основе условий ввода данных пользователем.
Вы должны быть соединены с сетью ROS. Вызовите rosinit
в командной строке MATLAB®.
Чтобы создать ваш строковый параметр, используйте блок String Constant и преобразуйте его в uint8 с помощью блока MATLAB function. Конвертированная строка uint8 передается в блок Set Parameter наряду с дополнительным входом, Длиной, заданной со вторым блоком Constant. Длина относится к максимальной ожидаемой длине строки и требуется для всех строковых параметров. Для получения дополнительной информации смотрите блок Set Parameter.
В сетях ROS параметры строк хранятся как uint8
массив. Когда вы добираетесь от строковых параметров с сервера, они возвращены как char
массив. В Simulink® они сняты как uint8
, таким образом, необходимо использовать uint8
векторы символов, когда по сравнению со строковыми параметрами ROS. Можно использовать это сравнение, чтобы инициировать подсистемы для больших моделей или подтвердить настройки для определенных алгоритмов.
Соединитесь с сетью ROS. Настройте дерево Параметра ROS.
rosinit ptree = rosparam;
Initializing ROS master on http://bat6346glnxa64:42719/. Initializing global node /matlab_global_node_59485 with NodeURI http://bat6346glnxa64:34229/
Установите параметр 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");
Сеть Shutdown ROS.
rosshutdown
Shutting down global node /matlab_global_node_59485 with NodeURI http://bat6346glnxa64:34229/ Shutting down ROS master on http://bat6346glnxa64:42719/.
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 ptree = rosparam;
Initializing ROS master on http://bat6346glnxa64:45325/. Initializing global node /matlab_global_node_73797 with NodeURI http://bat6346glnxa64:43261/
Установите "/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®. Булев выход питается операцию И с IsNew выход блока Subscribe, который получает изображение от сети. Если значение параметров правильно, и новое сообщение получено, Подсистема "Изображение Процесса" инициирована.
Запустите модель и используйте кнопки в модели, чтобы изменить параметр формата изображения и проверить strcmp
функция работает. eq
выведите должен быть 1, когда параметр устанавливается на 'jpeg'
. В то время как модель запускается, ожидается, что сообщения изображений публикуются в сети.
open_system("rosImageFormatParameter")
Закройте сеть ROS.
rosshutdown
Shutting down global node /matlab_global_node_73797 with NodeURI http://bat6346glnxa64:43261/ Shutting down ROS master on http://bat6346glnxa64:45325/.
strcmp
функция в Функциональном блоке MATLAB® задана как:
function eq = strcmp(s1, n1, s2) %#codegen
% Convert to proper strings
string1 = char(s1(1:n1));
string2 = char(s2);
eq = strcmp(string1, string2);