Проследите траекторию исполнительного элемента конца с инверсной кинематикой в Simulink

Используйте модель робота твердого тела, чтобы вычислить инверсную кинематику с помощью Simulink®. Задайте траекторию для исполнительного элемента конца робота и цикла через точки, чтобы решить настройки робота, которые прослеживают эту траекторию.

Импортируйте модель робота из URDF (объединенный формат описания робота) файл как RigidBodyTree объект.

robot = importrobot('iiwa14.urdf');
robot.DataFormat = 'column';

Просмотрите робота.

ax = show(robot);

Задайте траекторию робота. Эти xyz-координаты чертят N-форму перед роботом.

x = 0.5*zeros(1,4)+0.25;
y = 0.25*[-1 -1 1 1];
z = 0.25*[-1 1 -1 1] + 0.75;

hold on
plot3(x,y,z,'--r','LineWidth',2,'Parent',ax)
hold off

Откройте модель, которая выполняет инверсную кинематику. Xyz-координаты, заданные в MATLAB®, преобразованы в гомогенные преобразования и введены как желаемый Pose. Выход обратно-кинематическое решение возвращен как исходное предположение для следующего решения. Это исходное предположение помогает отследить положение исполнительного элемента конца и сгенерировать сглаженные настройки.

Можно нажать кнопку коллбэка, чтобы регенерировать модель робота и траекторию, которую вы только задали.

close
open_system('sm_ik_trajectory_model.slx')

% Запустите симуляцию. Модель должна сгенерировать настройки робота (configs) это следует за заданной траекторией для исполнительного элемента конца.

sim('sm_ik_trajectory_model.slx')

Цикл через настройки робота и отображение робот для каждого временного шага. Сохраните положения исполнительного элемента конца в xyz.

figure('Visible','on');
tformIndex = 1;
for i = 1:10:numel(configs.Data)/7
    currConfig = configs.Data(:,1,i);
    show(robot,currConfig);
    drawnow

    xyz(tformIndex,:) = tform2trvec(getTransform(robot,currConfig,'iiwa_link_ee'));
    tformIndex = tformIndex + 1;
end

Чертите итоговую траекторию исполнительного элемента конца как черная линия. Рисунок показывает исполнительный элемент конца, прослеживающий N-форму, первоначально заданную (красная пунктирная линия).

figure('Visible','on')
show(robot,configs.Data(:,1,end));

hold on
plot3(xyz(:,1),xyz(:,2),xyz(:,3),'-k','LineWidth',3);
plot3(x,y,z,'--r','LineWidth',3)
hold off

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

Объекты

Блоки

Похожие темы