Main Content

Simulink에서 역기구학으로 엔드 이펙터 궤적 추적하기

Simulink®를 사용하여 역기구학을 계산하려면 강체 로봇 모델을 사용합니다. 로봇 엔드 이펙터의 궤적을 정의하고 점들을 순회하면서 이 궤적을 추적하는 로봇 컨피규레이션을 구합니다.

URDF(Unified Robot Description Format) 파일에서 로봇 모델을 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

역기구학을 수행하는 모델을 엽니다. MATLAB®에 정의된 xyz 좌표는 동차 변환으로 변환되어 원하는 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

참고 항목

객체

블록

관련 항목