Запланируйте захватывающее движение для Kinova Jaco Assistive Robotics Arm, используя быстро исследуемый алгоритм случайного дерева (RRT). В этом примере используется plannerRRTStar объект для выборки состояний и планирования движения робота. Приведенные в качестве примера помощники иллюстрируют определение пользовательских пространств состояний и проверку состояния для приложений планирования движения.
Загрузите модель Kinova Jaco из библиотеки роботов. Эта конкретная модель включает трехпальцевый захват.
kin = loadrobot('kinovaJacoJ2S7S300');Используя примитивы объекта столкновения, добавьте перекрытие, две вершины стола и баллон. Укажите размер и положение этих объектов. На предоставленном изображении показана созданная среда.
floor = collisionBox(1, 1, 0.01); tabletop1 = collisionBox(0.4,1,0.02); tabletop1.Pose = trvec2tform([0.3,0,0.6]); tabletop2 = collisionBox(0.6,0.2,0.02); tabletop2.Pose = trvec2tform([-0.2,0.4,0.5]); can = collisionCylinder(0.03,0.16); can.Pose = trvec2tform([0.3,0.0,0.7]);

Рука Киновы имеет десять степеней свободы (DoF), причём последние три DoF соответствуют пальцам. Используйте только первые семь DoF для планирования и сохраняйте пальцы с нулевой конфигурацией (открытые широко). Один ExampleHelperRigidBodyTreeStateSpace пространство состояний создается для представления пространства конфигурации (пространство соединения). ExampleHelperRigidBodyTreeStateSpace примеры возможных состояний для руки робота. sampleUniform функция пространства состояний чередуется между следующими двумя стратегиями выборки с равной вероятностью:
Равномерно случайная выборка положения конечного эффектора в области цели рабочего пространства вокруг положения цели привязки, затем отображение его в совместное пространство через обратную кинематику. Соблюдаются общие ограничения.
Равномерная случайная выборка в пространстве соединения. Соблюдаются общие ограничения.
Первая стратегия выборки помогает направить планировщик RRT к целевому региону в пространстве задач, чтобы RRT мог быстрее сойтись с решением, а не потеряться в совместном пространстве семи DoF.
Использование области цели рабочего пространства (WGR) вместо одной позы цели увеличивает вероятность поиска решения путем смещения выборок в область цели. WGR определяет континуум приемлемых конечных эффекторных поз для определенных задач. Например, робот может приближаться с нескольких направлений, чтобы захватить чашку воды сбоку, пока он не столкнется с окружающей средой. Концепция WGR впервые предложена Дмитрием Беренсоном и др. [1] в 2009 году. Этот алгоритм позже эволюционировал в области пространства задач [2]. WGR состоит из трех частей:
Twgr_0 - эталонное преобразование WGR в мировых координатах ({0});
Te_w - Преобразование смещения конечного эффектора в {w} координатах, {w} отбирается из WGR
Bounds - матрица границ 6 на 2 в опорных координатах WGR. Первые три строки Bounds задайте допустимое перемещение вдоль осей x, y и z (в метрах) соответственно, а последние три - допустимые вращения относительно допустимых вращений вокруг осей x, y и z (в радианах). Следует отметить, что углы Эйлера RPY используются так, как их можно интуитивно задать.
В одной проблеме планирования можно определить и объединить несколько WGR. В этом примере разрешен только один WGR.
% Create state space and set workspace goal regions (WGRs) ss = ExampleHelperRigidBodyTreeStateSpace(kin); ss.EndEffector = 'j2s7s300_end_effector'; % Define the workspace goal region (WGR) % This WGR tells the planner that the can shall be grasped from % the side and the actual grasp height may wiggle at most 1 cm. % This is the orientation offset between the end-effector in grasping pose and the can frame R = [0 0 1; 1 0 0; 0 1 0]; Tw_0 = can.Pose; Te_w = rotm2tform(R); bounds = [0 0; % x 0 0; % y 0 0.01; % z 0 0; % R 0 0; % P -pi pi]; % Y setWorkspaceGoalRegion(ss,Tw_0,Te_w,bounds);
Настраиваемое средство проверки состояния, ExampleHelperValidatorRigidBodyTree, обеспечивает жесткую проверку столкновений между роботом и окружающей средой. Этот средство проверки проверяет выборочные конфигурации, и планировщик должен отменить недопустимые состояния.
sv = ExampleHelperValidatorRigidBodyTree(ss); % Add obstacles in the environment addFixedObstacle(sv,tabletop1, 'tabletop1', [71 161 214]/256); addFixedObstacle(sv,tabletop2, 'tabletop2', [71 161 214]/256); addFixedObstacle(sv,can, 'can', 'r'); addFixedObstacle(sv,floor, 'floor', [1,0.5,0]); % Skip collision checking for certain bodies for performance skipCollisionCheck(sv,'root'); % root will never touch any obstacles skipCollisionCheck(sv,'j2s7s300_link_base'); % base will never touch any obstacles skipCollisionCheck(sv,'j2s7s300_end_effector'); % this is a virtual frame % Set the validation distance sv.ValidationDistance = 0.01;
Используйте plannerRRT с настраиваемым пространством состояний и объектами средства проверки состояния. Укажите конфигурации начала и цели с помощью inverseKinematics для решения для конфигураций на основе позы конечного эффектора. Укажите GoalReachedFcn использование exampleHelperIsStateInWorkspaceGoalRegion, который проверяет, достигает ли путь целевой области.
% Set random seeds for repeatable results rng(0,'twister') % 0 % Compute the reference goal configuration. Note this is applicable only when goal bias is larger than 0. Te_0ref = Tw_0*Te_w; % Reference end-effector pose in world coordinates, derived from WGR ik = inverseKinematics('RigidBodyTree',kin); refGoalConfig = ik(ss.EndEffector,Te_0ref,ones(1,6),homeConfiguration(ss.RigidBodyTree)); % Compute the initial configuration (end-effector is initially under the table) T = Te_0ref; T(1,4) = 0.3; T(2,4) = 0.0; T(3,4) = 0.4; initConfig = ik(ss.EndEffector,T,ones(1,6),homeConfiguration(ss.RigidBodyTree)); % Create the planner from previously created state space and state validator planner = plannerRRT(ss,sv); % If a node in the tree falls in the WGR, a path is considered found. planner.GoalReachedFcn = @exampleHelperIsStateInWorkspaceGoalRegion; % Set the max connection distance. planner.MaxConnectionDistance = 0.5; % With WGR, there is no need to specify a particular goal configuration (use % initConfig to hold the place). % As a result, one can set GoalBias to zero. planner.GoalBias = 0; [pthObj,solnInfo] = plan(planner,initConfig, initConfig);
Найденный путь сначала сглаживается посредством рекурсивной стратегии углового резания [3], прежде чем движение будет анимировано.
% Smooth the path. interpolate(pthObj,100); newPathObj = exampleHelperPathSmoothing(pthObj,sv); interpolate(newPathObj,200); figure states = newPathObj.States; % Draw the robot. ax = show(kin,states(1,:)); zlim(ax, [-0.03, 1.4]) xlim(ax, [-1, 1]) ylim(ax, [-1, 1]) % Render the environment. hold on showObstacles(sv, ax); view(146, 33) camzoom(1.5) % Show the motion. for i = 2:length(states) show(kin,states(i,:),'PreservePlot',false,'Frames','off','Parent',ax); drawnow end q = states(i,:); % Grab the can. q = exampleHelperEndEffectorGrab(sv,'can',q, ax);
Установите целевую позицию для банки на другой столешнице.
targetPos = [-0.15,0.35,0.51];
exampleHelperDrawHorizontalCircle(targetPos,0.02,'y',ax);
Во время движения удерживайте цилиндр на уровне, чтобы избежать разлива. Укажите дополнительное ограничение для промежуточных конфигураций манипулятора для планировщика RRT. Включите ограничение, установив UseConstrainedSampling свойство имеет значение true.
Tw_0 = trvec2tform(targetPos+[0,0,0.08]); Te_w = rotm2tform(R); bounds = [0 0; % x 0 0; % y 0 0; % z 0 0; % R 0 0; % P -pi pi]; % Y setWorkspaceGoalRegion(ss,Tw_0,Te_w,bounds); ss.UseConstrainedSampling = true; planner.MaxConnectionDistance = 0.05; [pthObj2,~] = plan(planner,q,q);
Визуализация движения.
states = pthObj2.States; view(ax, 152,45) for i = 2:length(states) show(kin,states(i,:),'PreservePlot',false,'Frames','off','Parent',ax); drawnow end q = states(i,:); % let go of the can q = exampleHelperEndEffectorRelease(sv,q,ax);

[1] Д. Беренсон, С. Шриниваса, Д. Фергюсон, А. Колле и Дж. Куффнер, «Планирование манипуляций с целевыми регионами рабочего пространства», в трудах Международной конференции IEEE по робототехнике и автоматизации, 2009, стр. 1397-1403
[2] Д. Беренсон, С. Шриниваса и Дж. Куффнер, «Области пространства задач: рамки планирования манипуляций с ограничением позы», Международный журнал исследований робототехники, том 30, № 12 (2011): 1435-1460
[3] П. Чен и Ю. Хван, «SANDROS: алгоритм динамического поиска графов для планирования движения», IEEE Transaction on Robotics and Automation, Vol. 14 No. 3 (1998): 390-403