Подпишите следующего робота с ROS в MATLAB

Этот пример показывает вам, как использовать MATLAB®, чтобы управлять симулированным роботом, работающим на отдельном ОСНОВАННОМ НА ROS средстве моделирования по сети ROS. Пример, показанный здесь, использует ROS и MATLAB. Для других примеров с ROS 2 или Simulink®, см.:

В этом примере вы запускаете скрипт MATLAB, который реализует следующий за знаком алгоритм и управляет симулированным роботом, чтобы следовать, путь на основе входит в систему среда. Алгоритм получает информацию о местоположении и информацию о камере от симулированного робота, который запускается в отдельном ОСНОВАННОМ НА ROS средстве моделирования. Алгоритм обнаруживает цвет знака и отправляет скоростные команды, чтобы повернуть робота на основе цвета. В этом примере алгоритм спроектирован, чтобы повернуть налево, когда робот сталкивается с синим знаком, и поверните направо, когда робот сталкивается с зеленым знаком. Наконец робот останавливается, когда он сталкивается с красным знаком.

Свяжите со средством моделирования робота

Запустите ОСНОВАННОЕ НА ROS средство моделирования для робота с дифференциальным приводом и сконфигурируйте связь MATLAB® со средством моделирования робота.

Чтобы следовать наряду с этим примером, загрузите виртуальную машину с помощью инструкций в Начало работы с Gazebo и Симулированным TurtleBot.

  • Запустите рабочий стол виртуальной машины Ubuntu®.

  • В рабочем столе Ubuntu кликните по Последователю Знака Gazebo значок ROS, чтобы запустить мир Gazebo, созданный для этого примера.

  • Задайте IP-адрес и номер порта ведущего устройства ROS в Gazebo так, чтобы MATLAB® мог связаться со средством моделирования робота. В данном примере ведущим устройством ROS в Gazebo является http://192.168.203.131:11311 и вашим адресом хоста - компьютера является 192.168.31.1.

  • Запустите сеть ROS 1 с помощью rosinit.

masterIP = '192.168.203.131';
setenv('ROS_IP','192.168.31.1');
setenv('ROS_MASTER_URI',['http://' masterIP ':11311']);

rosinit(masterIP,11311)
The value of the ROS_IP environment variable, 192.168.31.1, will be used to set the advertised address for the ROS node.
Initializing global node /matlab_global_node_46296 with NodeURI http://192.168.31.1:57058/

Setup коммуникация ROS

Создайте издателей и подписчиков на релейные сообщения к и от средства моделирования робота по сети ROS. Вам нужны подписчики для данных об одометрии и изображения. Чтобы управлять роботом, настройте издателя, чтобы отправить скоростные команды с помощью /cmd_vel.

imgSub = rossubscriber("/camera/rgb/image_raw");

odomSub = rossubscriber("/odom");

[velPub, velMsg] = rospublisher("/cmd_vel", "geometry_msgs/Twist");

Задайте параметры цветового порога обработки изображений. Каждая строка задает пороговые значения для различных цветов.

colorThresholds = [100 255 0 55 0 50; ... % Red
                   0 50 50 255 0 50; ...  % Green
                   0 40 0 55 50 255]';    % Blue

Создайте знак после контроллера Используя график Stateflow®

Этот пример предоставляет помощнику в качестве примера график MATLAB Stateflow®, который берет в размере изображения, координатах от обработанного изображения и положениях одометрии робота. График обеспечивает линейный и скорость вращения, чтобы управлять роботом на основе этих входных параметров.

controller = ExampleHelperSignFollowingControllerChart;
open('ExampleHelperSignFollowingControllerChart');

Запустите цикл управления

Этот раздел запускает контроллер, чтобы получить изображения и переместить робота, чтобы следовать за знаком. Контроллер делает следующие шаги:

  • Получает последнее изображение и сообщение одометрии от сети ROS.

  • Запускает алгоритм для обнаружения функций изображений (ExampleHelperSignFollowingProcessImg).

  • Генерирует команды управления из графика Stateflow® с помощью step.

  • Публикует скоростные команды управления к сети ROS.

Чтобы визуализировать изображение маскированное, робот видит, измените значение doVisualization переменная к true.

ExampleHelperSignFollowingSetupPreferences;

% Control the visualization of the mask
doVisualization = false;

r = rateControl(10);
receive(imgSub); % Wait to receive an image message before starting the loop
receive(odomSub);
while(~controller.done)
    % Get latest sensor messages and process them
    imgMsg = imgSub.LatestMessage;
    odomMsg = odomSub.LatestMessage;
    [img,pose] = ExampleHelperSignFollowingROSProcessMsg(imgMsg, odomMsg);
    
    % Run vision and control functions
    [mask,blobSize,blobX] = ExampleHelperSignFollowingProcessImg(img, colorThresholds);
    step(controller,'blobSize',blobSize,'blobX',blobX,'pose',pose);
    v = controller.v;
    w = controller.w;
    
    % Publish velocity commands
    velMsg.Linear.X = v;
    velMsg.Angular.Z = w;
    send(velPub,velMsg);
    
    % Optionally visualize
    % NOTE: Visualizing data will slow down the execution loop.
    % If you have Computer Vision Toolbox, we recommend using
    % vision.DeployableVideoPlayer instead of imshow.
    if doVisualization
        imshow(mask);
        title(['Linear Vel: ' num2str(v) ' Angular Vel: ' num2str(w)]);
        drawnow('limitrate');
    end
    % Pace the execution loop.
    waitfor(r);
end

Необходимо видеть, что робот перемещается в ОСНОВАННОЕ НА ROS средство моделирования робота как показано ниже.