Установите сквозной процесс выбора и размещения для роботизированного манипулятора, такого как Gen3 KINOVA ®.
Рабочий процесс выбора и размещения, реализованный в этом примере, может быть адаптирован к различным сценариям, планировщикам, платформам симуляции и опциям обнаружения объектов. Показанный здесь пример использует RRT для планирования и моделирует робота в Gazebo с помощью Robot Operating System (ROS). Для других рабочих процессов выбора и размещения смотрите:
Этот пример идентифицирует и рециркулирует объекты в два интервала с помощью манипулятора Gen3 KINOVA. В примере используются инструменты из пяти тулбоксов:
Robotics System Toolbox™ используется для моделирования и симуляции манипулятора.
ROS Toolbox™ используется для подключения MATLAB к Gazebo.
Image Processing Toolbox™ и Computer Vision Toolbox™ используются для обнаружения объектов с помощью обработки облака точек и имитированной глубинной камеры в Gazebo.
Этот пример основан на ключевых концепциях из следующих связанных примеров:
Запуск с Gazebo и моделируемым TurtleBot (ROS Toolbox) (ROS Toolbox)
3-D регистрации и сшивания облака точек (Computer Vision Toolbox) (Computer Vision Toolbox)
Запустите симулятор на основе ROS для робота- Gen3 KINOVA и сконфигурируйте соединение MATLAB ® с симулятором робота.
В этом примере используется виртуальная машина (VM), доступная для загрузки. См. пример «Запуск с Gazebo и моделируемым TurtleBot (ROS Toolbox)» (ROS Toolbox).
Запустите рабочий стол виртуальной машины Ubuntu ®.
На рабочем столе Ubuntu щелкните значок Gazebo Recycling World - Depth Sensing, чтобы запустить мир Gazebo, созданный для этого примера.
Укажите IP-адрес и номер порта ведущего ROS в Gazebo, чтобы MATLAB ® мог общаться с симулятором робота. В данном примере мастер ROS в Gazebo использует IP-адрес 172.21.72.160
отображается на рабочем столе. Настройте rosIP
переменная на основе виртуальной машины.
Запустите сеть ROS 1 с помощью rosinit
.
rosIP = '172.21.72.160'; % IP address of ROS-enabled machine rosshutdown; rosinit(rosIP,11311); % Initialize ROS connection
Initializing global node /matlab_global_node_23379 with NodeURI http://172.21.72.67:58523/
После инициализации мира Gazebo путем нажатия кнопки значка VM загружает Gen3 Робота KINOVA на таблицу с одного интервала переработки с каждой стороны. Для симуляции и управления рукой робота в Gazebo ВМ содержит ros_kortex пакет ROS, которые предоставляет KINOVA.
Пакеты используют ros_control для управления соединениями в требуемых положениях соединений. Дополнительные сведения об использовании виртуальной машины см. в разделе Запуске с Gazebo и моделируемым TurtleBot (ROS Toolbox)
Рабочий процесс Pick-and-Place реализован в MATLAB и состоит из основных шагов инициализации, за которыми следуют два основных раздела:
Идентифицируйте детали и определите, где их разместить
Выполните рабочий процесс комплектования и размещения
Для реализации, которая использует Stateflow для планирования задач, смотрите Рабочий процесс выбора и размещения с использованием Stateflow для MATLAB.
Перед запуском задания выбора и размещения робот проходит через набор задач, чтобы идентифицировать сцену планирования в exampleCommandBuildWorld
функция и обнаруживает объекты, которые нужно выбрать, используя exampleCommandDetectParts
функция.
Во-первых, робот переходит к предопределенным сканированным позам один за другим и захватывает набор облаков точек сцены с помощью бортового датчика глубины. В каждом из сканирующих положений текущее положение камеры извлекается путем чтения соответствующего преобразования ROS с помощью rostf
(ROS Toolbox) и getTransform
(ROS Toolbox). Сканирующие положения визуализированы ниже:
Как только робот посетил все сканирующие положения, захваченные облака точек преобразуются из камеры в мировую систему координат с помощью pctransform
(Computer Vision Toolbox) и объединено в одно облако точек с помощью pcmerge
(Computer Vision Toolbox). Конечная точка сегментирована на основе Евклидова расстояния с помощью pcsegdist
(Computer Vision Toolbox). Получившиеся сегменты облака точек затем кодируются как сетки столкновения (см collisionMesh
) будут легко определены как препятствия во время планирования пути RRT. Процесс от облака точек до сетки столкновения показан по одному mesh за раз ниже.
Команда для активации захвата, exampleCommandActivateGripper
, отправляет запрос на действие, чтобы открыть и закрыть захват, реализованный в 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);
Большая часть выполнения задачи состоит из инструкции роботу перемещаться между различными заданными положениями. The exampleHelperMoveToTaskConfig
функция задает планировщик RRT с помощью manipulatorRRT
объект, который планирует пути от начальной до требуемого строения соединений путем предотвращения столкновений с заданными объектами столкновения в сцене. Полученный путь сначала сокращается, а затем интерполируется на желаемом расстоянии валидации. Чтобы сгенерировать траекторию, trapveltraj
функция используется для назначения временных шагов каждой из интерполированных точек пути после трапеций профиля. Наконец, точки пути с их связанными временами интерполируются до желаемой частоты дискретизации (каждые 0,1 секунды). Сгенерированные траектории гарантируют, что робот медленно перемещается в начале и конце движения, когда он приближается или помещает объект.
Плановые пути визуализируются в MATLAB вместе со сценой планирования.
Этот процесс подробно рассматривается в рабочем процессе «Выбор и размещение» с использованием планировщика RRT и Stateflow для примера MATLAB. Для получения дополнительной информации о планировщике RRT смотрите Выбор и размещение использования RRT для манипуляторов. Для более простых траекторий, где пути, как известно, не имеют препятствий, траектории могут быть выполнены с помощью инструментов генерации траекторий и моделированы с помощью моделей движения манипулятора. Смотрите План и Выполнение Траекторий Пространства Задач и Соединений Используя KINOVA Gen3 Manipulator.
После генерации траектории соединения для следования робота, example
C ommandMoveToTaskConfig
функция производит выборку траектории с желаемой частотой дискретизации, упаковывает ее в сообщения ROS совместной траектории и отправляет запрос действия в контроллер траектории соединения, реализованный в пакете ROS KINOVA.
Функции exampleCommandDetectParts
и exampleCommandClassifyParts
используйте имитированную подачу камеры глубины энд-эффектора от робота, чтобы обнаружить рециркулируемые части. Поскольку полное облако точек сцены доступно с шага Build Environment, итерационный алгоритм регистрации ближайшей точки (ICP) реализован в pcregistericp
(Computer Vision Toolbox) определяет, какие из сегментированных облаков точек соответствуют геометриям объектов, которые должны быть выбраны.
В этой симуляции используется манипулятор Gen3 KINOVA с прикрепленным захватом.
load('exampleHelperKINOVAGen3GripperGazeboRRTScene.mat');
rng(0)
Установите начальное строение робота и имя корпуса end-effector.
initialRobotJConfig = [3.5797 -0.6562 -1.2507 -0.7008 0.7303 -2.0500 -1.9053];
endEffectorFrame = "gripper";
Инициализируйте координатора путем присвоения модели робота, начального строения и имени конечного эффектора.
coordinator = exampleHelperCoordinatorPickPlaceROSGazeboScene(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]);
% Task 1: Build world
exampleCommandBuildWorldROSGazeboScene(coordinator);
Moving to scanning pose 1 Now planning... Waiting until robot reaches the desired configuration Capturing point cloud 1 Getting camera pose 1 Moving to scanning pose 2 Now planning... Waiting until robot reaches the desired configuration Capturing point cloud 2 Getting camera pose 2 Moving to scanning pose 3 Now planning... Waiting until robot reaches the desired configuration Capturing point cloud 3 Getting camera pose 3 Moving to scanning pose 4 Now planning... Waiting until robot reaches the desired configuration Capturing point cloud 4 Getting camera pose 4 Moving to scanning pose 5 Now planning... Waiting until robot reaches the desired configuration Capturing point cloud 5 Getting camera pose 5
% Task 2: Move to home position
exampleCommandMoveToTaskConfigROSGazeboScene(coordinator,coordinator.HomeRobotTaskConfig);
Now planning... Waiting until robot reaches the desired configuration
% Task 3: Detect objects in the scene to pick
exampleCommandDetectPartsROSGazeboScene(coordinator);
Bottle detected... Can detected...
% Task 4: Select next part to pick
remainingParts = exampleCommandPickingLogicROSGazeboScene(coordinator);
1
while remainingParts==true % Task 5: [PICKING] Compute grasp pose exampleCommandComputeGraspPoseROSGazeboScene(coordinator); % Task 6: [PICKING] Move to picking pose exampleCommandMoveToTaskConfigROSGazeboScene(coordinator, coordinator.GraspPose); % Task 7: [PICKING] Activate gripper exampleCommandActivateGripperROSGazeboScene(coordinator,'on'); % Part has been picked % Task 8: [PLACING] Move to placing pose exampleCommandMoveToTaskConfigROSGazeboScene(coordinator, ... coordinator.PlacingPose{coordinator.DetectedParts{coordinator.NextPart}.placingBelt}); % Task 9: [PLACING] Deactivate gripper exampleCommandActivateGripperROSGazeboScene(coordinator,'off'); % Part has been placed % Select next part to pick remainingParts = exampleCommandPickingLogicROSGazeboScene(coordinator); end
Now planning... Waiting until robot reaches the desired configuration
Gripper closed...
Now planning... Waiting until robot reaches the desired configuration
Gripper open...
2
Now planning... Waiting until robot reaches the desired configuration
Gripper closed...
Now planning... Waiting until robot reaches the desired configuration
Gripper open...
% Shut down ros when the pick-and-place application is done
rosshutdown;
Shutting down global node /matlab_global_node_23379 with NodeURI http://172.21.72.67:58523/
Мир Gazebo показывает робота в рабочей области, когда он перемещает части в интервалы переработки. Робот продолжает работать до тех пор, пока не будут размещены все детали.
Копирайт 2021 The MathWorks, Inc.