본문 바로가기
반응형

매트랩50

[matlab 공부하자] 25. symbolic data type 25. symbolic data type matlab에는 symbolic 이라는 자료형이 있습니다. 보통 메트랩에서는 a=[1 3]; 이렇게 문자에 값을 지정해주는데요. symbolic같은 경우는 문자만 선언하고 변수로 사용할 수 있습니다. syms x 이런식으로 선언후 사용합니다. 2019. 7. 3.
[matlab 공부하자] 24.mod 함수 (나머지를 반환) 24.mod 함수 (나머지를 반환) 오늘은 나머지를 반환해주는 mod 함수를 배워봅시다. mod(5,4) 이렇게 쓰면5를 4로 나눈 나머지를 반환해줍니다. >> mod(5,4) ans = 1 벡터나 행렬을 넣어도 됩니다. >> mod([1,2,3,4,5],2) ans = 1 0 1 0 1 각 요소를 2로 나눈 결과를 반환해줬죠? >> a=[1 2 3;4 5 6] a = 1 2 3 4 5 6 >> mod(a,2) ans = 1 0 1 0 1 0 2019. 7. 3.
[matlab 공부하자] 6. find 함수 (심화) 6. find 함수 (심화) 이번에는 find함수에 조건을 붙여봅시다. 디폴트는 0이 아닌 값을 찾는 것이었는데. 0인 값만 찾으려면 어떻게해야 할까요? 이렇게 하면 됩니다. >> a=[1 2 0;0 3 4;5 6 0;0 0 9] a = 1 2 0 0 3 4 5 6 0 0 0 9 >> [row col]=find(a==0) row = 2 4 4 1 3 col = 1 1 2 3 3 0 뿐만 아니라 다른 숫자도 찾을 수가 있겠죠? 논리 연산자를 많이 알 수록 find 함수를 더 다양하게 활용할 수 있겠군요. 2019. 7. 1.
[matlab 공부하자] 5. find 함수 (기본) 5. find 함수 (기본) find 함수는 특정한 조건을 걸어주면 해당되는 행과 열을 찾아주는 함수입니다. 예를 들어볼게요. >> a=[0 2 1 5 3 0 2 4 0] a = 0 2 1 5 3 0 2 4 0 >> find(a) ans = 2 3 4 5 7 8 find(a)라는 함수를 썼는데 뭘 찾았죠?0 이 아닌 열을 찾았습니다. 2,3,4,5,7,8 열이 nonzero 값입니다. 디폴트가 뭔지 아시겠죠? 그냥 find 함수를 쓰면 0이 아닌 열을 찾아줍니다. 열만 찾아주는건 아니겠죠? 아래 예시를 보시죠 >> b = [1; 2; 0; 0; 1; 3; 0; 3] b = 1 2 0 0 1 3 0 3 >> find(b) ans = 1 2 5 6 8 이번에는 0 이 아닌 행을 찾아줍니다. ans가 세로로 .. 2019. 7. 1.
[matlab 공부하자] 4. size 함수 4. size 함수 size 함수는 행렬의 크기를 반환해주는 함수입니다. 예를들어보죠. >> A=round(10*rand(3,4)) A = 6 3 3 6 5 2 5 3 0 8 2 7 3행 4열의 행렬을 만들었습니다. size함수를 써보죠. >> size(A) ans = 3 4 이렇게 사용할 수도 있습니다. >> size(A,1) ans = 3 >> size(A,2) ans = 4 2019. 7. 1.
[matlab 공부하자] 3. rand 함수 3. rand 함수 rand 함수는 0~1 사이의 임의 값을 생성해주는 함수입니다. 한번 사용해보죠 >>rand(3) ans = 0.4898 0.7094 0.6797 0.4456 0.7547 0.6551 0.6463 0.2760 0.1626 0~1 사이 값을 같는 3x3행렬이 만들어졌습니다. 원하는 size의 행렬을 만들 수 있는데요. 2X3 행렬을 만들어 볼게요. >> rand(2,3) ans = 0.1190 0.9597 0.5853 0.4984 0.3404 0.2238 0~10 사이의 숫자를 만들고 싶으면 어떻게 하면 될까요? 10을 곱해주면 됩니다. >> 10*rand(2,3) ans = 7.5127 5.0596 8.9090 2.5510 6.9908 9.5929 0~10 사이의 정수를 만들려면??반.. 2019. 7. 1.
[matlab 공부하자] 2. 반올림 (round) , 올림(ceil), 버림(floor), 0을 향해 버림 또는 올림(fix) 2. 반올림 (round) , 올림(ceil), 버림(floor), 0을 향해 버림 또는 올림(fix) matlab에는 반올림을 해주는 함수가 내장되어있습니다. round라는 함수인데, 일단 한번 사용해봅시다. >>a=1.12424>>round(a) ans = 1 흠..디폴트가 '정수까지 반올림하라' 임을 알 수 있습니다.소수점 몇째짜리까지 반올림할지를 결정할 수 있는데 아래처럼 하면 됩니다.둘째자리까지 반올림해보겠습니다. >>a=1.12424>>round(a,2) ans = 1.1200 이정도만 알아도 충분하지만 조금 더 알아보죠.유효숫자의 개념으로 사용할 수도 있습니다. 유효숫자의 개수를 설정해주는 것이죠. >>b=21.345>>round(b,3,'significant') ans = 21.3000 이.. 2019. 7. 1.
[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파일 다루기] 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.
반응형