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" — 2 n матрицей, [qRef; qRefDot]. Первые и вторые строки представляют объединенные положения и объединенные скорости, соответственно.

  • "ComputedTorqueControl" — 3 n матрицей, [qRef; qRefDot; qRefDDot]. Первые, вторые, и третьи строки представляют объединенные положения, объединенные скорости и объединенные ускорения соответственно.

  • "IndependentJointMotion" — 3 n матрицей, [qRef; qRefDot; qRefDDot]. Первые, вторые, и третьи строки представляют объединенные положения, объединенные скорости и объединенные ускорения соответственно.

Обратите внимание на то, что jointSpaceMotionModel поддержки все три MotionType упомянули выше, но taskSpaceMotionModel только поддержки "PDControl" MotionType.

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

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

свернуть все

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

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

Классы

Введенный в R2019b