exponenta event banner

производная

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

Описание

пример

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 , который определяет свойства модели движения.

Положения и скорости соединения представлены в виде 2n-элементного вектора, указанного как [q; qТочка]. 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-элементной строки скоростей соединения, а qDDot - вектор n-элементной строки ускорений соединения. n - количество соединений в связанном rigidBodyTree из motionModel.

См. также

Классы

Представлен в R2019b