В этом примере показано, как установить сквозной выбор и рабочий процесс места для автоматизированного манипулятора как KINOVA® Gen3 и симулировать робота в средстве моделирования физики, Gazebo.
Этот пример идентифицирует и перерабатывает объекты в два интервала с помощью манипулятора КИНОВОЙ Gen3. Пример использует инструменты от пяти тулбоксов:
Robotics System Toolbox™ используется, чтобы смоделировать и симулировать манипулятор.
Stateflow® используется, чтобы запланировать высокоуровневые задачи в примере и шаге от задачи до задачи.
ROS Toolbox™ используется в подключении MATLAB к Gazebo.
Computer Vision Toolbox™ и Deep Learning Toolbox™ используются в обнаружении объектов с помощью симулированной камеры в Gazebo.
Этот пример основывается на ключевых концепциях из следующих связанных примеров:
Запланируйте и Выполните Задачу - и использование Объединенных пространственных траекторий, которое показывает Манипулятор КИНОВОЙ Gen3, как сгенерировать и симулировать интерполированные объединенные траектории, чтобы переместиться от начальной буквы до желаемого положения исполнительного элемента конца.
Пример Computer Vision Toolbox: Обучите Сеть YOLO v2 для Обнаружения Транспортного средства (Computer Vision Toolbox)
Пример ROS Toolbox: Начало работы с Gazebo и Симулированным TurtleBot (ROS Toolbox)
Запустите ОСНОВАННОЕ НА 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, чтобы запланировать задачи в примере. Откройте график, чтобы исследовать содержимое и следовать за изменениями состояния во время выполнения графика.
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.
После генерации объединенной траектории для робота, чтобы следовать, commandMoveToTaskConfig
производит траекторию на уровне желаемой частоты дискретизации, пакеты это в объединенную траекторию, ROS передает и отправляет запрос действия контроллеру объединенной траектории, реализованному в пакете КИНОВОЙ ROS.
functions commandDetectParts
и commandClassifyParts
используйте симулированный канал камеры исполнительного элемента конца от робота и примените предварительно обученную модель глубокого обучения, чтобы обнаружить годные для повторного использования части. Модель берет систему координат камеры, как введено и выводит 2D местоположение объекта (положение пикселя) и тип переработки, это требует (синий или зеленый интервал). 2D местоположение на фрейме изображения сопоставлено с базовой системой координат робота.
Модель обнаружения была обучена с помощью набора изображений, полученных в симулированной среде в мире Gazebo с двумя классами объектов (бутылка, может), помещенный в другие места таблицы. Изображения получены от симулированной камеры на борту робот, который перемещен вдоль горизонтальных и вертикальных плоскостей, чтобы получить изображения объектов со многих различных точек зрения камеры.
Изображения затем помечены с помощью приложения Image Labeler, создав обучающий набор данных для модели обнаружения YOLO v2. trainYOLOv2ObjectDetector
обучает модель. Чтобы видеть, как обучить сеть YOLO v2 в MATLAB, смотрите, Обучают Сеть YOLO v2 для Обнаружения Транспортного средства (Computer Vision Toolbox).
Обученная модель развертывается для онлайнового вывода на одном изображении, полученном встроенной камерой, когда робот находится в исходном положении. detect
функция возвращает позицию изображения ограничительных рамок обнаруженных объектов, наряду с их классами, который затем используется, чтобы найти позицию центра верхней части объектов. Используя простой подход проекции камеры, принимая высоту объектов известен, положение объекта проектируется в мир и наконец используется в качестве ссылочного положения для выбора объекта. Класс, сопоставленный с упакованным ограничением, решает который интервал поместить объект.
Эта симуляция использует манипулятор КИНОВОЙ 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
Диаграмма Stateflow закончит выполняться автоматически после 3 неудачных попыток обнаружить новые объекты. Чтобы закончить pick-place задачу преждевременно, не прокомментируйте и выполните следующие строки кода или нажмите Ctrl+C в командном окне.
% coordinator.FlowChart.endPickPlace; % delete(coordinator.FlowChart); % delete(coordinator);
Во время выполнения активные состояния в каждом моменте времени подсвечены в синем в диаграмме Stateflow. Это помогает отслеживанию того, что робот делает и когда. Можно щелкнуть через подсистемы, чтобы видеть детали состояния в действии.
Мир 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.