본문 바로가기
MATLAB 코딩/로봇동역학

<Two Link Manipulator - 2D> 3. Link 1 회전 정의 (2x2 회전행렬 이용)

by bigpicture 2019. 7. 1.
반응형

3. Link 1 회전 정의 (2x2 회전행렬 이용)



Link 1의 회전 행렬을 정의합니다. 

회전 행렬을 Link 1의 Point에 곱하여 나온 결과를 다시 Link 1 의 Point에 넣어줍니다. 

아래 코드는 Link1 을 30도 회전시키는 코드입니다.

cosd는 60분법 각도를 받아들입니다. d를 제거하면 라디안 각을 받습니다. 

 

theta1=30;

 

Rotation_Matrix=[cosd(theta1) -sind(theta1);...

                        sind(theta1) cosd(theta1)];


Link1_a=(Rotation_Matrix*Link1_a');

Link1_b=(Rotation_Matrix*Link1_b');

 

회전 행렬이 추가된 전체 코드는 아래와 같습니다. 

 

Link1_a=[0 0];

Link1_b=[3 0];


theta1=30;


Rotation_Matrix=[cosd(theta1) -sind(theta1);...

       sind(theta1) cosd(theta1)];


Link1_a=(Rotation_Matrix*Link1_a');

Link1_b=(Rotation_Matrix*Link1_b');


Global_Origin=[0 0];


Global_x=[1 0];

Global_y=[0 1];


plot([Global_Origin(1) Global_x(1)],[Global_Origin(2) Global_x(2)],'-r');

hold on


plot([Global_Origin(1) Global_y(1)],[Global_Origin(2) Global_y(2)],'-g');

hold on

 

plot([Link1_a(1) Link1_b(1)],[Link1_a(2) Link1_b(2)],'-k',...

'Marker','o',...

     'LineWidth',2,...

     'MarkerSize',10,...

     'MarkerEdgeColor','b',...

    'MarkerFaceColor',[0.5,0.5,0.5]);

hold on

 

axis([-2 5 -2 5]);

daspect([1,1,1]);


코드를 실행한 결과입니다.


 


회전하기 전 Link1과 비교하는 코드를 추가해보겠습니다.  


Link1_a_old=[0 0];

Link1_b_old=[3 0];


Link1_a=[0 0];

Link1_b=[3 0];


theta1=30;


Rotation_Matrix=[cosd(theta1) -sind(theta1);...

sind(theta1) cosd(theta1)];

Link1_a=(Rotation_Matrix*Link1_a');

Link1_b=(Rotation_Matrix*Link1_b');


Global_Origin=[0 0];


Global_x=[1 0];

Global_y=[0 1];


plot([Global_Origin(1) Global_x(1)],[Global_Origin(2) Global_x(2)],'-r');

hold on


plot([Global_Origin(1) Global_y(1)],[Global_Origin(2) Global_y(2)],'-g');

hold on


plot([Link1_a(1) Link1_b(1)],[Link1_a(2) Link1_b(2)],'-k',...

'Marker','o',...

     'LineWidth',2,...

'MarkerSize',10,...

'MarkerEdgeColor','b',...

'MarkerFaceColor',[0.5,0.5,0.5]);

hold on


plot([Link1_a_old(1) Link1_b_old(1)],[Link1_a_old(2) Link1_b_old(2)],'--k',...

'Marker','o',...

'LineWidth',2,...

  'MarkerSize',10,...

  'MarkerEdgeColor','b',...

'MarkerFaceColor',[0.5,0.5,0.5]);

hold on


axis([-2 5 -2 5]);

daspect([1,1,1]);


'--k'에서 '--'는 점선을 의미합니다. 

코드 실행 결과입니다. 




반응형

댓글