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)");

Figure contains an axes. The axes with title Joint Position (Solid) vs Reference (Dashed) contains 14 objects of type line.

В этом примере показано, как создать и использовать 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 секунды с помощью жесткого решателя, чтобы более эффективно захватить динамику робота . Использование 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

Figure contains an axes. The axes contains 26 objects of type line, patch. These objects represent base_link, Shoulder_Link, HalfArm1_Link, HalfArm2_Link, ForeArm_Link, Wrist1_Link, Wrist2_Link, Bracelet_Link, EndEffector_Link, Shoulder_Link_mesh, HalfArm1_Link_mesh, HalfArm2_Link_mesh, ForeArm_Link_mesh, Wrist1_Link_mesh, Wrist2_Link_mesh, Bracelet_Link_mesh, base_link_mesh.

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

свернуть все

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

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

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

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

Опорные скорости конечного эффектора в пространстве задач, заданные как шестиэлементный вектор действительных значений, заданные как [omega v]. omega представляет вектор-строку с тремя скоростями вращения вокруг x, y, и z осей, заданных в радианах в секунду, и v представляет вектор-строку с тремя линейными скоростями вдоль x, y, и 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-element строка скоростей соединений, а qDDot - вектором n-element строка ускорений соединений. n - количество соединений в связанной rigidBodyTree от motionModel.

См. также

Классы

Введенный в R2019b