개발동기개발목표개발환경 특징상세내용사용방법
수치해석 삼각함수, 필터외 3D 설계 인벤터, 솔리드웍스, Cad 로봇을위한다양한편의성과호환성을통해제시된로봇제어솔루션 통신 TCP/IP, RS232 모션 기구학 (Kinematics)
단지 DLL 일뿐 (OpenJigWare.dll) 설치가필요없다. (DLL 참조만필요 ) Windows 기반 C# 개발환경 ( 부분적으로라즈베리파이 ( 리눅스 ) 에서부분적으로포팅이되어있다.)
InputBox/Messge 기능 각종변환함수모음 모든수학 / 알고리즘함수모음 Forward / Inverse 관련 ( 컴파일러포함 ) Matlab 과유사한구조를갖는다. 2D 를그려주는함수, 3D 도가능 Socket/Serial 구현 (Simple): 유사한구현방식 3D 를그려주는함수 (OpenGL) 마우스제어관련 모터제어관련 간단한타임그래프 ( 최소코드 3줄 ) 조이스틱제어관련시스템제어관련 (Shutdown, 중복실행제어등 ) 영상스트리밍 (Jpeg, Mjpeg) 구현- 2줄개발자본인이추가해서사용할 Class
Education ( 교육 ) 선생님과학생도사용할수있는시스템 선생님 - 3D 로로봇만들기, 수식입력, 모터정의및상관관계입력 - 다양한로봇을학생들에게접하게할수있고로봇의수식을바로적용가능 - 클릭하는로봇의부품에따라회전, 직교, Forward/Inverse 수식적용여부선택가능 - Forward Kinematics 를직접눈으로예를들어보이면서설명이가능 - D-H Notation 을파라미터만으로 3D 모델링가능학생 - C# 을이용해서간략히 5 줄로 3D 로봇시뮬레이터를개발프로그램에넣을수있다 ( 실제로봇과연동가능 ) - 학생들이직접, 구동방식에상관없이어떠한종류의로봇이라도손쉽게제어할수있는 SW 체계. Development ( 개발 ) 개발자를위한최적화시스템 - 다양한로봇을하나의 DLL 을사용해재사용이가능 - 다양한수식을넣기쉽고하나의로봇에 255 개까지의고속수식연산을각파트별로넣는것이가능. - Message History, Timer, Joystick, Graph, 암호화, File 저장 / 불러오기, 레지스터등실제현업에서잘사용되는기능이정의되어있어사용이간편. -3D 모델링의사용이간편하고실제모터파라미터를정의할수있어실제제어에사용이가능 - 프로그램의수정을모델링의수정만으로가능하기때문에프로그램유지보수에훨씬유리하다.
< 실제 OpenJigWare 에서모델링한로봇들 >
개발동기 개발목표 개발환경
로봇에사용되는수식은너무어렵다 하지만그래도배워야한다. 모션등을만들기가너무어렵다. 모션을쉽게만들었으면좋겠다. 로봇은종류가너무많다. 로봇의종류 ( 바퀴, 관절, 직교, 델타형등 ) 에상관없이세상의모든로봇을다대응할수있는것이없을까?
알고리즘 교육하기어렵고적용하기어려운 Kinematics 로봇 SW 수식 복잡한수식에대한 SW 적용성 형태 휴머노이드 / 바퀴형 / 직교좌표형태에따른 SW
Using OpenJigware.dll Education Development Teacher Student Engineer Modeling Tool 실행 Drawing(3D) Motor 정의 (Limit, 기어비클릭이벤트등 ) 교육하고자하는수식입력 만들어진파일학생에게전달 Visual Studio C# 실행 프로그래밍따라하기 ( 최소코딩라인 5 줄 ) Modeling Tool 실행 제어할타입 ( 델타, 직교, 다관절, 바퀴형외 ) 결정후 Drawing(3D) Motor 정의 (Limit, 기어비클릭이벤트등 ) 사용하고자하는수식입력 프로그램제작
Like Iron man System Making the suit https://youtu.be/xne9erfz3wc
필요성 Jig 개발에최적화되어있다. 모션제작및튜닝에최적화 3D 모델링의빠른구현제어기능의빠른구현교육적내용포함쉬운사용 & 다른 Tool 과접목가능 ROS 가있는데이건무슨필요? ROS 사용난이도상 사용자제한 사용환경복잡 Open Jig 개발, 교육용등활용성 다양한호환성 GUI 기반솔루션
Microsoft Visual Studio 2010 C# 개발환경 ( with Tao frame work :OpenGL ) https://youtu.be/l_qerqfrazk https://youtu.be/gy4muxbbw20
Open Source Source & DLL [ DLL - 사용만할거라면여길참조 ] https://github.com/ojw5014/released_dll [ 모델링프로그램, 모션프로그램등 (DLL 내에서실행가능하나편의를위해공개 ) ] https://github.com/ojw5014/tool [ Source ] https://github.com/ojw5014/openjigware [ RaspberryPi - 라즈베리파이용 OpenJigWare ] https://github.com/ojw5014/raspberrypi Manual [ 동영상 ] www.youtube.com OpenJigWare 로검색후 [Example] 로되어있는동영상참고 Ex ) https://www.youtube.com/watch?v=tqgso_pa_cu [ 예제 - 사용방법에대한간단한예제들 ] https://github.com/ojw5014/examples [ Document - 매뉴얼 & PPT ] https://github.com/ojw5014/document [Online] 오로카 (http://cafe.naver.com/openrt) 에서 OpenJigWare 로강의명개설
특징 상세내용
Open Source Message History 내가원하는메시지를 MessageBox 와연결하여 History Message 를남길수있고원하는경우이를파일로에러와구분해서저장이가능 Convert 가직관적으로쉽다. 문자변환등형변환관련 (StrToInt, StrToDouble, StrToBytes ) Parameter 파일생성및 Loading 이쉽다. 모터의제어를쉽게해준다. Dst robot( 전동부로봇 ) 의허큘렉스시리즈, 로보티즈모터지원 ( 이경우 Rpm 제어를 Time 제어로변환가능 ) 3D 모델링의속도저하가우려되면 2D 함수를이용해 3D 모델링을그릴수있다. Forward / Inverse Kinematics 지원 - Forward : 파라미터만넣으면자동으로 3D 모델링이그려지고논문에넣기쉽게행렬수식함수가자동으로만들어져서출력. - Inverse : Matlab 과유사한사용법으로제작, 총 255 개의수식함수를자신이원하는부위에골라서넣을수있다. -> Python 지원 : 교육적효과를위해수식부를 Python 으로설정해사용할수있다.
2D 그래픽을이용해 3D 그래픽을구현한모습
초보자에게쉬워야한다. 코딩라인 5 줄이내로 3D 모델링이가능 ( 참조구문, 변수선언포함 ) 전문가에의한코딩의다양화가가능해야한다. 내부 OpenGL 을활용한세부적접근가능 교육적컨텐츠가가능해야한다. Forward / Inverse Kinematics 의활용가능 수식의결과행렬을얻어서눈으로확인이가능해야한다. 속도가느려선안된다. 모델링파일을불러들이는단계에서컴파일과정을거쳐실속도에맞게운용가능 Cad 데이터의모델을가져올수있어야한다. ASE, OBJ, STL(text/binary) 파일이용가능 모터의모든정보가들어가야한다. 기어비, 회전방향, Mirror 모터, 모터의별칭, Limit, 모터의타입 ( 속도제어 / 포지션제어등 ), 그룹정보, 실제 ID, Flip 동작시동작규정 ( 역회전, 동작없음, Mirror 모터싱크 ) 모델링, 구현, 모션제작툴의구분 다른구분으로는교육자 / 교육대상자 모든종류의로봇에대응이가능해야한다. 바퀴형, 다관절형, 델타형, 직교로봇, 가변트랙등.
Modeling tool Motion tool
모델링툴 / 수식구현 모델링 모델링툴, 수식구현 https://youtu.be/sruzrimfd8k 수식구현 https://youtu.be/ber_5czqk-w 교육대상자의프로그래밍실습 혹은모델링파일 (*.ojw) 을가지고있는사람의프로그래밍실습 https://www.youtube.com/watch?v=ol29at-4owc
모델링툴예제 Cad 를넣어보자. Step 1 가지고있는 Cad 파일 (obj, ase, stl 파일을실행폴더에넣어준다. 구버전에서는 ase 폴더에넣어준다.)
Cad 를넣어보자. Step 2 모델링툴예제 모델링툴안에서 DispObject 항목의이름을가지고있는파일의이름으로바꿔준다. # 으로시작하는이름은내부에정의된 17 가지패턴을의미 Ase 파일은확장자없이적어도상관없다. 다른파일들은확장자를반드시기록.
Cad 를넣어보자. Step 3 모델링툴예제 들어간모델을확인후원하는위치로이동및회전후 Add 한다. 1. Offset 으로 100 이동후 45 도회전 2. Y 축으로 50 이동, Y 축 45 도회전 1. Offset 은실회전과상관없이현재의자세를결정 2. Trans / Rotation 은실제적이이동및회전을의미 ( 일반적인 OpenGL 3D 모델링에서의회전및이동의이미와동일 )
모델링툴예제 Cad 를넣어보자. Step 4 장치를 Add 한다.( 마우스우클릭 ) 추가후새롭게나타나는 Virtual Object( 추가하기전까지는실제로모델링에적용되지않는다.) 커서가위치한선택된모델링의색이변한다. 커서를놓은위치의모델링의정보가나타나게되는 Property grid. 여기서정보의수정이가능하다.
모션제작툴 불러들이는모델의종류에따라모션툴의기능이다양하게변화한다. 관절의역할에따라색을달리정하는것이가능하다. 클릭된위치에따라어떤식의 동작을할것인지정의하는 것이가능 바퀴 ( 휠 ) Manipulator
우측팔 / 다리의모션이좌측팔 / 다리로바뀌었고, 머리는반대방향으로, 허리는변화없는것을볼수있다. 모션제작툴 ( 휴머노이드모델링의경우 ) 모델별변화되는기능예 : Switch 프레임복사 테스트를위해모션한프레임을만들어본다. 보는바와같이우측팔과우측다리를들고머리를우측으로돌리며허리를숙인것을볼수있다. 비교를위해아래에 Ctrl^C, Ctrl^V 하여프레임복사를한다. 이후 Switch 버튼클릭 Switch 클릭
모션제작툴 (HexaPod 모델링의경우 ) 모델별변화되는기능예 : Switch 프레임복사 테스트를위해모션한프레임을만들어본다. 보는바와같이우측관절은정해진초기위치가아닌사용자가입력한모션을취하고있다. 비교를위해아래에 Ctrl^C, Ctrl^V 하여프레임복사를한다. 이후 Switch 버튼클릭 Switch 클릭 우측관절전체의모션이좌측관절로바뀐것을알수있다. 참고 : 이모델링파일은그룹구분이되어있지않아색구분이없이주황색으로통일된상태
실행프로그램 한줄더추가하면
모델링데이터는어디서구할까? [1/2] 직접그린다. 솔리드웍스, Maya, 3D Max 및기타 3D 모델링툴이용 ( 파일저장은 obj, ase, stl[binary or Text] 로한다.) Autodesk 123Design 같은툴을사용한다.( 무료 ) 주의사항 정점이많으면 Drawing 하는데시간이걸리므로프로그램이느려지는효과가나타난다.
모델링데이터는어디서구할까? [2/2] 난그릴줄몰라!!! 다운로드한다. 3D 프린터와동일, Thingiverse, Yeggi 등의사이트이용 http://www.thingiverse.com http://www.yeggi.com/
Kinematics 왜 Kinematics 를풀까?
Kinematics Forward kinematics Joint Angle Cartesian space(x, y, z) Simple and Unique solution Inverse kinematics Cartesian space(x, y, z) Joint Angle It is not a unique solution, difficult(but delta system) Sometimes we have singular position or some position we cannot go
Kinematics Forward Kinematics(1/2) Translation to Matrix
Kinematics Forward Kinematics (D-H Notation) T(Transformation Matrix) It has rotation and translation in their 4 * 4 matrix Parameter Define X(i+1) and Z(i) is orthogonal X(i+1) and Z(i) has a matching point
Kinematics D-H Notation Matrix
단순히 2 Dof 의모델이지만 3 개의행렬을정의하고곱을해야한다. 헷갈리는요소가많다. Kinematics 실제 Forward Kinematics 를풀면 http://cdn.intechweb.org/pdfs/379.pdf 문서의 Page 14 Example 2 를봐보자.
Kinematics 어렵다 헷갈린다 Open-Jig 적용한 Kinematics
Kinematics Forward-Kinematics 를눈으로보면서직접값을넣어보자 예제 OpenJigWare 로 DH 를그려보자 View DH-Skeleon 을체크하면 DH 좌표축이나타나게된다.( 헷갈리지않는다.) 그린 DH-Skeleton 에서실제사용된수식과 3D 모델링을자동으로얻을수있다. https://youtu.be/iqyh0rnnddo Y 축 Z 축 X 축
Kinematics OpenJigWare 로 DH 를그려보자 파라미터입력시자동으로그림이그려진다. 임의로 L1 을 30, L2 를 50 으로정의해보고그려보자. [ 버튼클릭 ] Get : 현로봇의끝점을 X, Y, Z 로보여줌 Set : 설정된위치 (X, Y, Z) 를이용해각모터의각도값으로바꿔줌 Y 축 계산방식의차이로인해파라미터를넣는순서는문서와약간다를수있다. Z 축 X 축 Θ1 => Axis 에 1 Θ2 => Axis 에 2 로표기 이마지막행렬의식이 D-H 최종결과행렬이다.
Kinematics 교사 대표적인프로그램사용방법 내부 DLL 의함수를이용해 3D 모델링툴을불러와모델링을그린다.( 직접그리거나 3D 프린터공개자료사이트 -thingiverse, yeggi 등 - 활용 ) 내부에제어에필요한수식을넣어두고이모델링파일을학생에게전달 참고 모델링파일을불러오는순간내부의수식및모터정보, 각부분명칭및모터의세부기어비등의 detail 한로봇정보가전체적으로같이들어오게된다. 학생 - 내부 DLL 함수를이용해모션툴을불러와모션을작성한다. : 로봇종류에따라모션툴은자동으로변한다. - 주어진 DLL 과모델링파일을이용해 3D 시뮬레이터를프로그래밍 - 작성한모션을 DLL 함수를이용해불러사용하거나혹은모터를직접제어한다.
Kinematics 성과 kinematics D-H Notation 교육 2 시간만에상당수학생들이 D-H 파라미터를이용한 3D 매니퓰레이터제작성공 자신이스스로 3D 매니퓰레이터를제작한것에흥미를가짐 D-H Notation 에대한이해를쉽게가짐. 헷갈리면그려보면된다 0
D-H Notation 눈으로확인해보기 https://youtu.be/7lqsjnfkxe8
D-H Notation a d θ α 0 [ 0, -246, 0, 0] 1 [ 0, 0, 0, -90] 2 [ 0, 190, θ2, 0] 3 [ 0, 200, 0, 0] 4 [ 0, 0, 90, 90] 5 [625, 0, θ3+90, 0] 6 [482, 0, θ4, 0] 7 [ 0, 0, θ5, 0] // Orientation Add Rotation(θ5) C(t4) -S(t4) 0 482*C(t4) S(t4) C(t4) 0 482*S(t4) 0 0 1 0 0 0 0 1 C(t3+90) -S(t3+90) 0 625*C(t3+90) S(t3+90) C(t3+90) 0 625*S(t3+90) 0 0 1 0 0 0 0 1 0 0 1 0 1 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1-246 0 0 0 1 1 0 0 0 0 0 1 0 0-1 0 0 0 0 0 1 C(t2) -S(t2) 0 0 S(t2) C(t2) 0 0 0 0 1 190 0 0 0 1 1 0 0 0 0 0 0 0 0 0 1 200 0 0 0 1 https://youtu.be/detjvr1dg08
장점 모델링파일이있는경우하나의모델링파일안에모든로봇의세부적인정보가수식을포함하여전부들어있다. 추후프로그래밍수정이필요없이모델링파일만수정하는것으로프로그램의유지보수도가능하다. 로봇의종류에상관없이모든로봇에제어가가능 ( 바퀴, 회전 / 직동관절, 체인, 병렬제어등 ) 문제점 현재개발되어있는모터제어함수가한정되어있다. 모터구매비용이너무비싸요 ~ ㅠ. ㅠ Visual Studio C# 에서만사용가능. 현재라즈베리파이에서부분포팅이되어있습니다.
3D 모델링을그리게되면이게 STL 파일로저장되거나아님바로 Gcode 로 slice 를해서 3D 프린팅과연동이되었으면... Myo, Leap Motion, Arduino 등의디바이스연계가되었으면... 리눅스 ( 라즈베리파이 ), 안드로이드, Unity 에포팅이되었으면... 현재리눅스는 Herculex2 Class 가포팅되어있다. 수식컴파일러가프로그래밍스타일도가능했으면... 현재 Python 으로선택시프로그래밍스타일로수식을넣을수있다.