derivative

Производная времени состояний модели манипулятора

Описание

пример

stateDot = derivative(taskMotionModel,state,refPose,refVel) вычисляет производную времени движения, основанного на модели на текущем состоянии и командах движения с помощью модели пробела задачи.

stateDot = derivative(taskMotionModel,state,refPose, refVel,fExt) вычисляет производную времени на основе текущего состояния, команд движения и любых внешних сил на манипуляторе с помощью модели пробела задачи.

пример

stateDot = derivative(jointMotionModel,state,cmds) вычисляет производную времени движения, основанного на модели на текущем состоянии и командах движения с помощью модели объединенного пробела.

stateDot = derivative(jointMotionModel,state,cmds,fExt) вычисляет производную времени на основе текущего состояния, команд движения и любых внешних сил на манипуляторе с помощью модели объединенного пробела.

Примеры

свернуть все

В этом примере показано, как создать и использовать jointSpaceMotionModel объект для робота манипулятора на объединенном пробеле.

Создайте робота

robot = loadrobot("kinovaGen3","DataFormat","column","Gravity",[0 0 -9.81]);

Настройте симуляцию

Установите промежуток составлять 1 с с размером такта 0,01 с. Установите начальное состояние быть роботами, домашней настройкой со скоростью нуля.

tspan = 0:0.01:1;
initialState = [homeConfiguration(robot); zeros(7,1)];

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

targetState = [pi/4; pi/3; pi/2; -pi/3; pi/4; -pi/4; 3*pi/4; zeros(7,1); zeros(7,1)];

Создайте модель движения

Смоделируйте систему с вычисленным управлением крутящим моментом и ошибочной динамикой, заданной умеренно быстрым переходным процессом с 5%-м перерегулированием.

motionModel = jointSpaceMotionModel("RigidBodyTree",robot);
updateErrorDynamicsFromStep(motionModel,.3,.05);

Симулируйте робота

Используйте производную функцию модели как вход к ode45 решатель, чтобы симулировать поведение более чем 1 секунда.

[t,robotState] = ode45(@(t,state)derivative(motionModel,state,targetState),tspan,initialState);

Постройте ответ

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

figure
plot(t,robotState(:,1:motionModel.NumJoints));
hold all;
plot(t,targetState(1:motionModel.NumJoints)*ones(1,length(t)),"--");
title("Joint Position (Solid) vs Reference (Dashed)");
xlabel("Time (s)")
ylabel("Position (rad)");

В этом примере показано, как создать и использовать taskSpaceMotionModel объект для манипулятора манипулятора на пробеле задачи.

Создайте робота

robot = loadrobot("kinovaGen3","DataFormat","column","Gravity",[0 0 -9.81]);

Настройте симуляцию

Установите отрезок времени составлять 1 секунду с размером такта 0,02 секунд. Установите начальное состояние на домашнюю настройку робота со скоростью нуля.

tspan = 0:0.02:1;
initialState = [homeConfiguration(robot);zeros(7,1)];

Задайте ссылочное состояние с целевым положением и обнулите скорость.

refPose = trvec2tform([0.6 -.1 0.5]);
refVel = zeros(6,1);

Создайте модель движения

Смоделируйте поведение как систему под управлением пропорциональной производной (PD).

motionModel = taskSpaceMotionModel("RigidBodyTree",robot,"EndEffectorName","EndEffector_Link");

Симулируйте робота

Симулируйте поведение более чем 1 второе использование жесткого решателя, чтобы более эффективно получить робота dynamics. Используя ode15s включает более высокую точность вокруг областей с высоким показателем изменения.

[t,robotState] = ode15s(@(t,state)derivative(motionModel,state,refPose,refVel),tspan,initialState);

Постройте ответ

Постройте исходное положение робота и отметьте цель X.

figure
show(robot,initialState(1:7));
hold all
plot3(refPose(1,4),refPose(2,4),refPose(3,4),"x","MarkerSize",20)

Наблюдайте ответ путем графического вывода робота в цикле на 5 Гц.

r = rateControl(5);
for i = 1:size(robotState,1)
    show(robot,robotState(i,1:7)',"PreservePlot",false);
    waitfor(r);
end

Входные параметры

свернуть все

taskSpaceMotionModel объект, который задает свойства модели движения.

jointSpaceMotionModel объект, который задает свойства модели движения.

Объединенные положения и скорости, представленные как вектор 2n-элемента, заданный как [q; qDot]. n является количеством соединений в связанном rigidBodyTree из motionModel. q, представляет положение каждого соединения, заданного в радианах. qDot представляет скорость каждого соединения, заданного в радианах в секунду.

Ссылочное положение исполнительного элемента конца на пробеле задачи в метрах, заданных как гомогенная матрица преобразования 4 на 4.

Ссылочные скорости исполнительного элемента конца на пробеле задачи, заданном как вектор с шестью элементами действительных значений, заданных как [omega v]. omega представляет вектор-строку из трех скоростей вращения о xY, и z оси, заданные в радианах в секунду и v, представляют вектор-строку из трех линейных скоростей вдоль xY, и z оси, заданные в метрах в секунду.

Управляйте командами, указывающими на желаемое движение. Размерности cmds зависьте от свойства MotionType модели движения. Для "PDControl", cmds вектор с 2 n матрицей, [qRef; qRefDot], для объединенных положений и скоростей. Для "ComputedTorqueControl" и "IndependentJointMotion", cmds 3 n матрицей, [qRef; qRefDot; qRefDDot], который включает объединенные ускорения.

  • "PDControl" — 2 n матрицей. Первые и вторые столбцы представляют объединенные положения и объединенные скорости, соответственно.

  • "ComputedTorqueControl" — 3 n матрицей. Первый, второй, и третий столбец представляет объединенные положения, объединенные скорости и объединенные ускорения соответственно.

  • "IndependentJointMotion" — 3 n матрицей. Первый, второй, и третий столбец представляет объединенные положения, объединенные скорости и объединенные ускорения соответственно.

Внешние силы, заданные как m - вектор элемента, где m является количеством тел в связанном rigidBodyTree объект.

Выходные аргументы

свернуть все

Производной времени на основе текущего состояния и заданных команд управления, возвращенных как 2 n матрицей действительных значений, [qDot; qDDot], где qDot является n - вектор-строка элемента из объединенных скоростей и qDDot, является n - вектор-строка элемента из объединенных ускорений. n является количеством соединений в связанном rigidBodyTree из motionModel.

Смотрите также

Классы

Введенный в R2019b