본문 바로가기
반응형

MATLAB 코딩74

[matlab 공부하자] 1. format short, format long (소수점 아래 4자리 vs 소수점 아래 15자리) 1. format short, format long (소수점 아래 4자리 vs 소수점 아래 15자리) >> a=1.23412531512362132136126 를 매트랩에 입력하면 a = 1.2341 이렇게 소수점 아래 넷째 자리까지만 표현된다. 디폴트 format 이 short이기 때문인데, 포멧을 long으로 바꿔보자. >> format long>>a a = 1.234125315123621 이렇게 소수점 아래 15째자리까지 표현된다. * matlab help에 있는 표입니다. 2019. 7. 1.
<Two Link Manipulator - 2D> 8. Link1 회전 정의하고 움직이기 8. Link1 회전 정의하고 움직이기 이번에는 5,6,7번 강의에서 정의한 함수들을 사용 Link1에 모션을 주겠습니다. "3. Link 회전 정의하기"의 코드를 수정하였습니다. 비교하면서 보시면 이해가 쉬울겁니다. for 문을 추가하여 Link에 모션을 주었습니다. 수정한 코드는 빨간색으로, 이전과 동일한 코드는 파란색입니다. pause(0.2) 코드는 0.2초 정지한다는 뜻입니다. theta1=[0 5 10 15 20 25 30 35 40 45 50 55 60 55 50 45 40 35 30 35 40 45 50 55 60 65 70 65 60 55 50 45 40 35 30];size_theta=size(theta1);t_f=size_theta(1,2); for t=1:1:t_f Link1_a=[.. 2019. 7. 1.
<Two Link Manipulator - 2D> 7. Rotation, Translation 행렬을 Point에 곱해주는 합수 정의 7. Rotation, Translation 행렬을 Point에 곱해주는 합수 정의 Point에 3x3 Rotation matrix나 Translation matrix를 곱하여 Point를 회전시키거나 이동시킬 때,(점의 특성상 Point 자체의 회전운동은 정의되지 않습니다. 이 맥락에서는 원점중심의 회전을 의미한다.)행렬 곱을 수행하기 위해 [x y]를 [x y 1]로 바꿔주어야 하고, 결과로 나온 [x' y' 1]에서 1을 제거하여 다시 Point로 만들어 주어야 합니다. (아래 그림 참고)이 과정을 매번 코드로 나타내는 것은 비효율적이기 때문에 함수로 정의해서 사용하려고 합니다. 코드는 아래와 같습니다. function y=TwoD_RTP(Matrix,Point); Point_1x3=[Point(1.. 2019. 7. 1.
<Two Link Manipulator - 2D> 6. 3x3 Translation 함수 정의 6. 3x3 Translation 함수 정의 x,y축으로 움직일 거리를 을 입력하면Translation matrix를 만들어 주는 matlab 함수를 정의해 봅시다. unction y=TwoD_TMat(a,b); y=...[... 1 0 a;... 0 1 b;... 0 0 1;... ]; 함수는 m파일로 저장합니다.해당 m파일이 들어있는 폴더를 matlab 경로에 추가해줍니다. 함수를 한번 사용해보겠습니다. x축으로 3만큼, y축으로 2만큼 회전시키는 3x3 Translation matrix를 만들어 봅시다. a=3;b=2TMat1=TwoD_TMat(3,2) 코드를 입력한 결과입니다. 2019. 7. 1.
<Two Link Manipulator - 2D> 5. 3x3 Rotation 함수 정의 5. 3x3 Rotation 함수 정의Rotation angle θ 을 입력하면Rotation matrix를 만들어 주는 matlab 함수를 정의해 봅시다. function y=TwoD_RMat(Theta); y=Rotation_Matrix =...[... cosd(Theta) -sind(Theta) 0;... sind(Theta) cosd(Theta) 0;... 0 0 1;... ]; 함수는 m파일로 저장합니다.해당 m파일이 들어있는 폴더를 matlab 경로에 추가해줍니다. 함수를 한번 사용해보겠습니다. 30도 회전시키는 3x3 Rotation matrix를 만들어 봅시다. Theta=30;RotMat1=TwoD_RMat(Theta) 코드를 입력한 결과입니다. 2019. 7. 1.
<Two Link Manipulator - 2D> 4. 3x3 Transformation 행렬 설명 (2x2 회전행렬의 한계 극복) 4. 3x3 Transformation 행렬 설명 (2x2 회전행렬의 한계 극복) 이전 강의에서 회전행렬을 2x2로 정의했습니다. 링크가 하나이고 Origin에 연결되어 있는 경우에는 상관이 없지만Rotation과 함께 Translation이 발생하는 경우 굉장히 불편해 집니다. 예를들어 어떤 Point가 30도 회전하고 (2,3)만큼 움직이고 30도 회전하고 (5,4)만큼 움직이고 다시 30도 회전했다고 해 봅시다. 이를 수식으로 표현하면 아래와 같이 다중 괄호로 되어 있습니다. 다물체 동역학에서는 '역 과정'을 구해야 하는 경우가 있는데 수식이 다중 괄호로 되어 있으면 이를 전부 전개해서 풀어야 합니다. 이러한 한계를 극복하기 위해 등장한 것이 3x3 Transformation 행렬입니다. 굉장히 놀.. 2019. 7. 1.
<Two Link Manipulator - 2D> 3. Link 1 회전 정의 (2x2 회전행렬 이용) 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 .. 2019. 7. 1.
<Two Link Manipulator - 2D> 2. Link 1 추가하기 2. Link 1 추가하기 지난 강의에서 만들었던 Global Coordinate System에 Link 1 을 추가해 보도록 하겠습니다. Link 1 의 길이는 3으로 설정하였습니다. Link1_a=[0 0];Link1_b=[0 3]; 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 axis([-2 5 -2 5]);daspect([1,1,1]); plot 기능을 사용하여 링.. 2019. 7. 1.
<Two Link Manipulator - 2D> 1. Global Coordinate System 그리기 1. Global Coordinate System 그리기 두개의 링크로 구성된 로봇 팔을 메트랩으로 표현해보고 회전 행렬을 이용해서 움직이는 예제입니다. 먼저 글로벌 좌표계를 그려보도록 하겠습니다. 매트랩 코드는 빨간색 글씨로 되어있습니다. 먼저 세 점을 정의합니다. Global_Origin=[0 0]; Global_x=[1 0];Global_y=[0 1]; plot 기능을 사용하여 좌표계를 그려줍니다. 원점과 (1,0)을 연결하여 x축을 만들고원점과 (0,1)을 연결하여 y축을 만듭니다. x축은 빨간색 선으로, y축은 녹색 선으로 설정합니다. '-r' 에서 - 는 실선을 의미하고 r은 red를 의미합니다. Global_Origin=[0 0]; Global_x=[1 0];Global_y=[0 1]; pl.. 2019. 7. 1.
[Matlab으로 STL파일 다루기] 5. Remesh (refine mesh) , 화면분할 그래프 STL 매쉬가 지저분해서 remesh를 해주었습니다. 매트랩에는 적당한 함수가 없어서(못찾았을 수도), 다른 프로그램을 이용해서 remesh를 했습니다. remesh 전과 후 STL을 첨부하겠습니다. remesh 전과 후의 stl을 모두 불러오고 그래프로 비교하는 코드입니다. subplot이라는 함수를 이용했는데요. 아래와 같은 원리로 사용합니다. subplot(세로방향 화면분할 수, 가로방향화면분할 수, 몇번째인지) 아래는 전체 코드와 실행 결과입니다. fv1=stlread('hammer.stl'); fv2=stlread('hammer_remesh.stl'); subplot(1,2,1);patch('Faces',fv1.faces,... 'Vertices',fv1.vertices,... 'FaceColo.. 2018. 11. 21.
[Matlab으로 STL파일 다루기] 4. View 변경 3. STL 보는 법 STL을 그림으로 출력할 때, VIEW 각도를 변경해봅시다. 지난시간에 출력한 그림은 아래와 같습니다. VIEW 각도를 바꾸려면 아래 코드를 추가해주면 됩니다. view(azimuth, elevation) 우리말로 바꾸면 아래와 같습니다. view(방위각, 높이) 둘 다 45도로 설정해주겠습니다. view(45,45) 설정 결과 그림입니다. 2018. 11. 17.
[Matlab으로 STL파일 다루기] 3. STL 보는 법 3. STL 보는 법 STL을 불러왔으면 어떻게 생겼는지 눈으로 확인해야 겠죠? patch 함수를 사용합니다. 이번시간부터는 편집기를 사용합시다. 1) 새로만들기를 누르고 m파일을 하나 생성해줍니다. 2) stl파일을 불러옵니다. 편집기에 코드를 입력하고 '실행' 또는 F5를 눌러주면 됩니다. 3) patch 함수를 사용합니다. 색 입력 외에도 더 많은 기능이 있지만 오늘은 색 지정까지만 사용하겠습니다. 출력 결과는 아래와 같습니다. 2018. 11. 17.
[Matlab으로 STL파일 다루기] 2. STL 불러오기 2. STL 불러오기 1) MathWorks 홈페이지에서 STL Files Reader를 다운받습니다. 2) 다운받으면 STLRead라는 폴더가 받아지는데, MyFunction이라는 폴더를 만들어서 안에 넣어줍니다. 앞으로 사용할 함수들은 MyFunction 폴더에 넣어주겠습니다. 3) 매트랩을 열고 MyStl 폴더와 MyFunction 폴더를 경로에 추가해줍니다. 4) 아래와 같은 코드를 입력합니다. Structure가 불러와집니다. 내부를 열어보겠습니다. faces에는 stl 의 각 면을 구성하는 점의 번호가 저장되어 있습니다.vertices에는 stl 점들의 좌표가 저장되어 있습니다. STL에는 하나의 정보가 더 있습니다. 각 face의 법선벡터인 normal 정보인데요. 이 정보도 함께불러오는 방.. 2018. 11. 15.
[Matlab으로 STL파일 다루기] 1. STL 생성하기 1. STL 생성하기 STL 예제로 사용하기 위해서 망치를 하나 모델링했습니다. 일반적으로 3D 설계툴(UG, 솔리드웍스 등)에서 stl을 export하면 지저분하게 패치(patch)가 생성됩니다. ㅁㅁMyStl 이라는 폴더를 만들고 hammer.stl 이라는 이름으로 저장합니다. 2018. 11. 13.
반응형