Рабочий процесс Pick-Place в Gazebo с помощью ROS

В этом примере показано, как установить сквозной выбор и рабочий процесс места для автоматизированного манипулятора как KINOVA® Gen3 и симулировать робота в средстве моделирования физики, Gazebo.

Панорама

Этот пример идентифицирует и перерабатывает объекты в два интервала с помощью манипулятора КИНОВОЙ Gen3. Пример использует инструменты от пяти тулбоксов:

  • Robotics System Toolbox™ используется, чтобы смоделировать и симулировать манипулятор.

  • Stateflow® используется, чтобы запланировать высокоуровневые задачи в примере и шаге от задачи до задачи.

  • ROS Toolbox™ используется в подключении MATLAB к Gazebo.

  • Computer Vision Toolbox™ и Deep Learning Toolbox™ используются в обнаружении объектов с помощью симулированной камеры в Gazebo.

Этот пример основывается на ключевых концепциях из следующих связанных примеров:

Симуляция робота и управление в Gazebo

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

Этот пример использует виртуальную машину (VM) доступную для скачивания в Виртуальной машине с Мелодичным ROS 2 и Gazebo.

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

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

  • Задайте IP-адрес и номер порта ведущего устройства ROS в Gazebo так, чтобы MATLAB® мог связаться со средством моделирования робота. В данном примере ведущее устройство ROS в Gazebo использует IP-адрес 192.168.203.131 отображенный на Рабочем столе. Настройте rosIP переменная на основе вашего VM.

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

rosIP = '192.168.203.131';   % IP address of ROS-enabled machine  

rosinit(rosIP,11311); % Initialize ROS connection
Initializing global node /matlab_global_node_33097 with NodeURI http://192.168.203.1:60127/

После инициализации мира Gazebo нажатием кнопки значок VM загружает Манипулятор КИНОВОЙ Gen3 на таблице с одной корзиной на каждой стороне. Чтобы симулировать и управлять манипулятором в Gazebo, VM содержит ros_kortex пакет ROS, которые обеспечиваются КИНОВОЙ.

Пакеты используют ros_control, чтобы управлять соединениями к желаемым объединенным позициям. Для дополнительных деталей об использовании VM обратитесь к Начало работы с Gazebo и Симулированным TurtleBot (ROS Toolbox)

Диаграмма Stateflow

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

edit exampleHelperFlowChartPickPlaceROSGazebo.sfx

График диктует, как манипулятор взаимодействует с объектами или частями. Это состоит из основных шагов инициализации, выполненных двумя основными разделами:

  • Идентифицируйте части и определите, куда разместить их

  • Выполните рабочий процесс Pick-Place

Для высокоуровневого описания шагов pick-place см., что Рабочий процесс Pick-Place использует Stateflow в MATLAB.

Открытие и закрытие механизма захвата

Команда для активации механизма захвата, exampleCommandActivateGripperROSGazebo, отправляет запрос действия, чтобы открыть и закрыть механизм захвата, реализованный в Gazebo. Например, чтобы отправить запрос, чтобы открыть механизм захвата, следующий код используется.

[gripAct,gripGoal] = rosactionclient('/my_gen3/custom_gripper_controller/gripper_cmd');
gripperCommand = rosmessage('control_msgs/GripperCommand');
gripperCommand.Position = 0.0;  
gripGoal.Command = gripperCommand;
sendGoal(gripAct,gripGoal);

Перемещение манипулятора к заданному положению

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

Планирование

Планирование пути генерирует простые пространственные траектории задачи от начальной буквы до желаемой настройки задачи с помощью trapveltraj и transformtraj. Для получения дополнительной информации о планировании и выполнении траекторий, см. План и Выполните Задачу - и использование Объединенных пространственных траекторий Манипулятор КИНОВОЙ Gen3.

Объединенный контроллер траектории в ROS

После генерации объединенной траектории для робота, чтобы следовать, commandMoveToTaskConfig производит траекторию на уровне желаемой частоты дискретизации, пакеты это в объединенную траекторию, ROS передает и отправляет запрос действия контроллеру объединенной траектории, реализованному в пакете КИНОВОЙ ROS.

Обнаружение и классификация объектов в сцене

functions commandDetectParts и commandClassifyParts используйте симулированный канал камеры исполнительного элемента конца от робота и примените предварительно обученную модель глубокого обучения, чтобы обнаружить годные для повторного использования части. Модель берет систему координат камеры, как введено и выводит 2D местоположение объекта (положение пикселя) и тип переработки, это требует (синий или зеленый интервал). 2D местоположение на фрейме изображения сопоставлено с базовой системой координат робота.

Обучение модели глубокого обучения: получение и маркировка изображений Gazebo

Модель обнаружения была обучена с помощью набора изображений, полученных в симулированной среде в мире Gazebo с двумя классами объектов (бутылка, может), помещенный в другие места таблицы. Изображения получены от симулированной камеры на борту робот, который перемещен вдоль горизонтальных и вертикальных плоскостей, чтобы получить изображения объектов со многих различных точек зрения камеры.

Изображения затем помечены с помощью приложения Image Labeler, создав обучающий набор данных для модели обнаружения YOLO v2. trainYOLOv2ObjectDetector обучает модель. Чтобы видеть, как обучить сеть YOLO v2 в MATLAB, смотрите, Обучают Сеть YOLO v2 для Обнаружения Транспортного средства (Computer Vision Toolbox).

Обученная модель развертывается для онлайнового вывода на одном изображении, полученном встроенной камерой, когда робот находится в исходном положении. detect функция возвращает позицию изображения ограничительных рамок обнаруженных объектов, наряду с их классами, который затем используется, чтобы найти позицию центра верхней части объектов. Используя простой подход проекции камеры, принимая высоту объектов известен, положение объекта проектируется в мир и наконец используется в качестве ссылочного положения для выбора объекта. Класс, сопоставленный с упакованным ограничением, решает который интервал поместить объект.

Запустите задачу Pick-Place

Эта симуляция использует манипулятор КИНОВОЙ Gen3 с присоединенным механизмом захвата Robotiq. Загрузите модель робота от .mat файл как rigidBodyTree объект.

load('exampleHelperKINOVAGen3GripperROSGazebo.mat'); 

Инициализируйте выбор и разместите координатора

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

initialRobotJConfig =  [3.5797   -0.6562   -1.2507   -0.7008    0.7303   -2.0500   -1.9053];
endEffectorFrame = "gripper";

Инициализируйте координатора путем предоставления модели робота, начальной настройки и имени исполнительного элемента конца.

coordinator = exampleHelperCoordinatorPickPlaceROSGazebo(robot,initialRobotJConfig, endEffectorFrame);

Задайте домашнюю настройку и два положения для размещения объектов.

coordinator.HomeRobotTaskConfig = getTransform(robot, initialRobotJConfig, endEffectorFrame); 
coordinator.PlacingPose{1} = trvec2tform([[0.2 0.55 0.26]])*axang2tform([0 0 1 pi/2])*axang2tform([0 1 0 pi]);
coordinator.PlacingPose{2} = trvec2tform([[0.2 -0.55 0.26]])*axang2tform([0 0 1 pi/2])*axang2tform([0 1 0 pi]);

Запустите и визуализируйте симуляцию

Соедините координатора с диаграммой Stateflow. После того, как запущенный, диаграмма Stateflow ответственна за то, что постоянно прошла состояния обнаружения объектов, собирания их и размещения их в правильном районе сосредоточения войск.

coordinator.FlowChart = exampleHelperFlowChartPickPlaceROSGazebo('coordinator', coordinator); 

Используйте диалоговое окно, чтобы запустить pick-place выполнение задачи. Нажмите кнопку Да в диалоговом окне, чтобы начать симуляцию.

answer = questdlg('Do you want to start the pick-and-place job now?', ...
         'Start job','Yes','No', 'No');

switch answer
    case 'Yes'
        % Trigger event to start Pick and Place in the Stateflow Chart
        coordinator.FlowChart.startPickPlace;       
    case 'No'
        coordinator.FlowChart.endPickPlace;        
        delete(coordinator.FlowChart)
        delete(coordinator);
end

Окончание pick-place задачи

Диаграмма Stateflow закончит выполняться автоматически после 3 неудачных попыток обнаружить новые объекты. Чтобы закончить pick-place задачу преждевременно, не прокомментируйте и выполните следующие строки кода или нажмите Ctrl+C в командном окне.

% coordinator.FlowChart.endPickPlace;        
% delete(coordinator.FlowChart);
% delete(coordinator);

Наблюдайте состояния симуляции

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

Визуализируйте действие Pick-Place в Gazebo

Мир Gazebo показывает робота в рабочей области, когда это перемещает части в корзины. Робот продолжает работать, пока все части не были помещены. Когда шаг обнаружения больше не находит части четыре раза, диаграмма Stateflow существует.

if strcmp(answer,'Yes')
    while  coordinator.NumDetectionRuns <  4
        % Wait for no parts to be detected.
    end
end

Завершите работу сети ROS после окончания примера.

rosshutdown
Shutting down global node /matlab_global_node_33097 with NodeURI http://192.168.203.1:60127/

Copyright 2020 The MathWorks, Inc.

Для просмотра документации необходимо авторизоваться на сайте