В этом примере показано, как настроить сквозной процесс выбора и размещения роботизированного манипулятора, такого как Gen3 KINOVA ®, и имитировать робота в физическом тренажере Gazebo .
В этом примере объекты идентифицируются и перерабатываются в две ячейки с помощью манипулятора KINOVA Gen3. В примере используются инструменты из пяти панелей инструментов:
Robotics System Toolbox™ используется для моделирования и моделирования манипулятора.
Stateflow ® используется для планирования задач высокого уровня в примере и перехода от задачи к задаче.
ROS Toolbox™ используется для соединения MATLAB с беседкой.
Computer Vision Toolbox™ и Deep Learning Toolbox™ используются для обнаружения объектов с помощью имитационной камеры в Беседке.
Этот пример основан на ключевых концепциях из следующих связанных примеров:
Планирование и выполнение траекторий задания и совместного пространства С помощью KINOVA Gen3 Manapulator показано, как генерировать и моделировать интерполированные траектории соединения для перехода от начальной позы к требуемой позе конечного эффекта.
Поток операций выбора и размещения с использованием потока состояний для MATLAB
Пример инструментария для компьютерного зрения: Сеть Train YOLO v2 для обнаружения транспортных средств (инструментарий для компьютерного зрения)
Пример панели инструментов ROS: начало работы с беседкой и моделируемым TurtleBot (панель инструментов ROS)
Запустите имитатор на базе ROS для робота KINOVA Gen3 и настройте соединение MATLAB ® с имитатором робота.
В этом примере используется виртуальная машина, доступная для загрузки. Если вы никогда ранее не использовали его, см. раздел Начало работы с беседкой и моделируемым TurtleBot (ROS Toolbox).
Запустите рабочий стол виртуальной машины Ubuntu ®.
На рабочем столе Ubuntu щелкните значок «Gazebo Recycling World», чтобы запустить мир Gazebo, построенный для этого примера.
Укажите IP-адрес и номер порта ведущего устройства ROS в Gazebo, чтобы MATLAB ® мог взаимодействовать с имитатором робота. В этом примере мастер ROS в Gazebo использует IP-адрес 192.168.203.131 отображается на рабочем столе. Отрегулируйте rosIP переменная, основанная на виртуальной машине.
Запуск сети ROS 1 с помощью rosinit.
rosIP = '192.168.203.131'; % IP address of ROS-enabled machine rosinit(rosIP,11311); % Initialize ROS connection
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_36570 with NodeURI http://192.168.31.1:51073/
После инициализации мира Gazebo, щелкнув значок, ВМ загружает руку KINOVA Gen3 Robot на стол с одним мусорным баком с каждой стороны. Для моделирования и управления рукой робота в Беседке ВМ содержит пакет ros_kortex ROS, которые предоставляет компания KINOVA.
Пакеты используют ros_control для управления соединениями в требуемых положениях соединения. Дополнительные сведения об использовании виртуальной машины см. в разделе Начало работы с беседкой и моделируемым TurtleBot (ROS Toolbox)

В этом примере для планирования задач в примере используется диаграмма Stateflow. Откройте диаграмму для изучения содержимого и отслеживания переходов состояний во время выполнения диаграммы.
edit exampleHelperFlowChartPickPlaceROSGazebo.sfxДиаграмма определяет способ взаимодействия манипулятора с объектами или деталями. Он состоит из основных этапов инициализации, за которыми следуют два основных раздела:
Определение деталей и места их размещения
Выполнение потока операций комплектования и размещения

Подробное описание шагов выбора и размещения см. в разделе Рабочий процесс выбора и размещения с использованием потока состояний для 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. Дополнительные сведения о планировании и выполнении траекторий см. в разделе Планирование и выполнение траекторий задач и совместного пространства с помощью манипулятора KINOVA Gen3.
После формирования траектории соединения для робота, чтобы следовать, commandMoveToTaskConfig выполняет выборку траектории с требуемой частотой дискретизации, упаковывает ее в сообщения АФК совместной траектории и посылает запрос на действие контроллеру совместной траектории, реализованному в пакете KINOVA ROS.
Функции commandDetectParts и commandClassifyParts использовать моделируемую конечную эффекторную камеру, подаваемую от робота, и применять заранее обученную модель глубокого обучения для обнаружения рециркулируемых частей. Модель принимает кадр камеры в качестве входного и выводит 2D местоположение объекта (положение пикселя) и требуемый тип повторного использования (синий или зеленый бункер). Местоположение 2D на кадре изображения сопоставляется с базовым кадром робота.

Модель обнаружения была обучена с использованием набора изображений, полученных в моделируемой среде в мире Gazebo, с двумя классами объектов (бутылка, банка), размещенных на разных местах стола. Изображения получают из имитированной камеры на борту робота, который перемещается вдоль горизонтальной и вертикальной плоскостей, чтобы получить изображения объектов из множества различных ракурсов камеры.
Затем изображения помечаются с помощью приложения Image Labeler (Computer Vision Toolbox), создавая обучающий набор данных для модели обнаружения YOLO v2. trainYOLOv2ObjectDetector (Computer Vision Toolbox) обучает модель. Сведения о том, как обучить сеть YOLO v2 в MATLAB, см. в разделе Сеть Train YOLO v2 для обнаружения транспортных средств (панель инструментов компьютерного зрения).
Обучаемая модель развертывается для оперативного вывода на одиночное изображение, получаемое бортовой камерой, когда робот находится в исходном положении. detect Функция (Computer Vision Toolbox) возвращает положение изображения ограничивающих рамок обнаруженных объектов вместе с их классами, которое затем используется для поиска положения центра верхней части объектов. Используя простой подход проекции камеры, предполагая, что высота объектов известна, положение объекта проецируется в мир и, наконец, используется в качестве опорного положения для выбора объекта. Класс, связанный с ограничивающей коробкой, определяет ячейку для размещения объекта.
В этом моделировании используется манипулятор KINOVA 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 отвечает за непрерывное прохождение состояний обнаружения объектов, их сбор и размещение в правильной промежуточной области.
coordinator.FlowChart = exampleHelperFlowChartPickPlaceROSGazebo('coordinator', coordinator); Используйте диалоговое окно для запуска выполнения задачи выбора и размещения. Нажмите кнопку «Да» в диалоговом окне, чтобы начать моделирование.
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 неудачных попыток обнаружения новых объектов. Чтобы преждевременно завершить задачу выбора и размещения, раскомментируйте и выполните следующие строки кода или нажмите Ctrl + C в окне команд .
% coordinator.FlowChart.endPickPlace; % delete(coordinator.FlowChart); % delete(coordinator);
Во время выполнения активные состояния в каждый момент времени подсвечиваются синим цветом на диаграмме Stateflow. Это помогает отслеживать, что делает робот и когда. Можно щелкнуть по подсистемам, чтобы просмотреть подробные сведения о состоянии в действии.

Мир Беседки показывает робота в рабочей области, когда он перемещает части в бункеры рециркуляции. Робот продолжает работу до тех пор, пока не будут размещены все детали. Если шаг обнаружения не находит больше частей четыре раза, диаграмма 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_36570 with NodeURI http://192.168.31.1:51073/
Copyright 2020 The MathWorks, Inc.