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