2012년 11월 29일 목요일

[창작용 프로그래밍] processing, scratch


* processing 언어 (계보 : Java -> Processing)

홈페이지 http://www.processing.org  http://openprocessing.org
다운로드  http://www.processing.org/download/


* scratch 언어 (계보 : 스몰톡 -> Squeak -> Scratch)

홈페이지 http://scratch.mit.edu/
다운로드 http://info.scratch.mit.edu/ko/Scratch_1.4_Download



둘 다 MIT의 미디어랩에서 나온 결과물이다.
processing은 미디어 아티스트를 위한 저작도구 개념이고
scratch는 그보다 더 쉬운 거다.

특히 scratchED 라는 툴은
초등학생에게 프로그래밍을 가장 쉽게 가르칠 수 있는 도구이다.
이걸 가지고 애들 가르친 부모들 커뮤니티를 들여다보니,
2살짜리 아들이랑 함께 이걸 가르치면서 하는 아빠도 있더라는...  영재인가.

http://scratched.media.mit.edu/

scratchED를 이용해서 간단한 애니메이션이나 게임 같은 것을 만들 수 있고
타이핑을 해서 코딩하는게 아니고 마우스로 집어다가 옮기면 되는 RAD 개념에
초딩들이 좋아할 만한 디자인을 가진, 아주 만만하게 보이는 IDE를 구성해 놨다.



Intro to Scratch from ScratchEd on Vimeo.

scretch의 한국어 포럼도 제공된다.
http://scratch.mit.edu/forums/viewforum.php?id=33

한국어 번역도 하고 있다.
http://info.scratch.mit.edu/ko/Languages





한편


processing 언어의 경우에는, 잡다한 Java 프로그래밍의 사족들을 다 숨겨버리고
그냥 핵심이 되는 것만 프로그래밍해 주면 되도록 해 놨다.
기본적으로 제일 앞 부분에 셋팅 함수 설정해서 내용 적어주고
그 다음 함수에 하고 싶은 일들을 죽 적으면 되는 식이다.

단 몇 줄 만으로 아주 간지폭발하는(?) 그래픽을 보여준다.

게다가 이두이노라는 하드웨어와 연계해서 하드웨어 제어까지 되도록 하고
플랫폼을 가리지 않고 다 된다.  심지어 안드로이드 포팅도 끝났고
비공식적으로는 ios에서도 되는가 보다.

결과물은 웹으로 띄워줄 수도 있는데, 이때는 웹브라우저에서 JDK가 필요하다.
리눅스에서 보니깐, 우분투에 기본으로 깔려 있는 OpenJDK/Icedtea는 호환이 안 되는 것 같다.
정품(?) 오라클 JDK를 저장소 찾아서 깔아주고, 그걸 기본으로 셋팅해 준 후, 크롬 웹브라우저에서 Java 항상 실행 되도록 설정해 주고 나면 잘 된다.


--> 절차 -------------------------------------------
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-jdk7-installer

이렇게 깔아주고 나서

sudo apt-get purge openjdk*

해 주면 openjdk는 뻥 사라진다..
크롬 웹브라우저에서 Java 어플이 항상 돌아가도록 하려면, 주소창에

chrome://plugins

쳐주고 들어가서 해당 오라클 JDK를 항상 실행되도록 설정 해 주면 된다.
---------------------------------------------------


processing을 이용하여 활용할 만한 부분은....

미디어 아티스트가 수학함수를 이용해서 아주 멋진 구조를 만들어서 보여준다던가
애니메이션 멋지게 만들어서 공연용 대형 디스플레이를 장식해 준다던가
등으로 물론 활용 가능하겠지만
현실적으로 "최고로 멋진 프리젠테이션"을 하려면
이걸 사용하면 궁극적인 해답이 되지 않을까 한다.


processing (IDE besed on JAVA) + JOCL (OpenCL for JAVA)
Simulation Demo


Presentation 응용사례 - http://nytlabs.com/projects/cascade.html


데이타를 3차원으로 분위기있게 돌려가면서 뿌려주고,
동적으로 변화추이를 보여주고 하면
아주 그냥 사람들이 홀라당 넘어갈 기세다.

라이브러리도 잘 찾아보니 좋은게 있는 듯..  GUI 관련 http://www.sojamo.de
동영상 강좌도 있다.   http://funprogramming.org/  핀란드 사람의 영어강의라는 점만 빼면 도움이 된다.


processing 튜토리얼의 한글판은 없나 했는데, 찾아보니

프로세싱 베타버전 개요 (번역) http://physics.snu.ac.kr/~kclee/Env/Environment_K.htm
프로세싱 튜토리얼 (번역) http://physics.snu.ac.kr/~kclee/tutorial/tutorial_KDraft.htm

번역하신 분이 서울대 물리학과 교수로 계시다가 정년퇴직한 이구철 교수라는 분이시다..
연세가 1935년생이신데 엄청나다...  그 연세에 정말 대단하신 분 같다.



python 기초 강좌


* 파이썬 마을 http://python.kr/

* 다이빙 파이썬 강좌 http://coreapython.hosting.paran.com/dive/chap02.html

* 왕초보를 위한 PYTHON 2.7 http://wikidocs.net/read/book/136

* The WxPython Linux Tutorial http://wiki.wxpython.org/index.cgi/AnotherTutorial#wx.Window

* FreeCAD Python Script http://sourceforge.net/apps/mediawiki/free-cad/index.php?title=Power_users_hub

* Mayavi ---> 이건 소프트웨어 설치하면 오프라인으로 설명서 제공됨


[Github] Gear 관련 참고할 수 있는 python 오픈소스 모음


(1) https://github.com/phillbaker/non-circular-gears-generator

UC버클리의 제프 스코너라는 학생이 2002년도에 숙제로 해 온 걸 오픈시켜 준 소스.
클리포드 울프의 소스를 참고해서 변형한 것이라고 한다.

발표자료는 프로포절, 중간보고서, 완료보고서로 잘 나와 있다.


(2) https://github.com/TinHead/FreeCAD-scripts

FreeCAD 소프트웨어를 위한 스크립트이다.
스크립트를 돌려보니 잘 그려진다.
다만 너무 간단해서 쓸만한 아웃풋이 나오지는 않는데
대신 FreeCAD 상에서 아주 간단하게 QT기반 GUI 입력창 만들어주고
데이타 뿌려주는데 굉장히 효율적인 것 같다.
FreeCAD에서는 DXF,IGES,STEP 등등 가리지 않고 마음껏 익스포트 시킬 수 있으므로
여기서 기본적인 형상을 그려낸 다음,
다른 상용 CAD에서 임포트시켜 추가 작업을 해도 좋을 것 같다.


(3) https://github.com/cfinch/IGES-File-Reader

2년 전에 중단된 것 같은데,
IGES 파일을 바로 읽어들이도록 python으로 날코딩해서 만들려고 한 것 같다.


(4) https://github.com/nmz787/nanoengineer

'나노캐드(Nanotech CAD)'라길래 뭔가 했더니,
놀랍게도 분자단위의 기계를 가상적으로 구현해 볼 수 있는 설계도구이다.
실제 원자단위, 분자단위로 직접 매니퓰레이팅을 해서
원하는 형상을 마음대로 만들기는 어려우나
AFM 같은 기술이 잘 발달해서 이게 쉽게 된다면
이런 분야의 설계툴이 필요하게 될 지도!!!


(5) https://github.com/elmom/MCAD

OpenSCAD 라는 오픈소스 CAD 툴을 개발하는 프로젝트가 있는 모양인데
이것의 목표는 제대로 된 Parametric 기반으로 만들어보자는 것 같다.
아무튼 여기서 사용할 라이브러리를 구축하는 모양인데
기어 관련 함수들도 python으로 구현되어 포함되어 있다.
gear(), bevel_gear() ....  뭐 이런 식으로 막 호출해서 쓰도록 하나보다.
확장자는 .scad 라고 되어 있긴 한데 열어보니 그냥 python인 듯...




2012년 11월 28일 수요일

OpenCascade 6.5 헉헉헉!


리눅스에 OpenCascade 6.5 자체를 까는 것은 문제가 없었다.
직접 컴파일 하는 것은 불필요하다고 생각되고
우분투에서 패키지로 제공되는 것들을 그대로 이용하기로 하였다.
다만 정확히 무엇을 깔아야 되는지는

https://launchpad.net/ubuntu/+source/opencascade

를 참고할 수 있었다.
체크 완료.

여기에 추가하여 Python-occ를 설치하기 위해

http://lists.en.qi-hardware.com/pipermail/discussion/2011-July/008480.html

이곳을 참고한다.

여기 설명된 선행작업으로 Python-occ 소스 배포본 안에 들어있는
SMESH를 컴파일하는 것은 큰 문제없이 끝났다.
GEOM를 컴파일할 때는 Fatal Error가 하나 뜨는데

------------------------------------------------------------------
디렉토리../Partition_Loop2d.cpp:35:45: fatal error: BRepOffset_DataMapOfShapeReal.hxx: 그런 파일이나 디렉터리가 없습니다

compilation terminated.
------------------------------------------------------------------

대충 이런 내용이 나온다.

즉 Partition_Loop2d.cpp 소스를 컴파일하다 보니깐
BRepOffset_DataMapOfShapeReal.hxx 파일이 없어서 중단한다는 거다.

B-Rep은 Boundary Representation 이니깐 앞서 이미 설치된 OpenCascade 패키지안의 파일일 터.
따라서 /usr/include/opencascade 디렉토리에 들어가서 뒤져보니,
과연 해당 파일이 누락되어 있다.

결론적으로 Ubuntu에서 제공되는 OpenCascade 6.5 의 배포판 자체에 이 파일이 빠져있어서 배포되고 있다는 이야기.

구글링을 해 보니, 데비안 버그리포트가 하나 나온다.


여기서 확인되듯이 Debian 에서 원래 제공하는 OpenCascade 6.5 배포판 자체가 문제가 있다는 것이다.  위 버그리포트에서는 Netgen을 컴파일하다가 누가 발견해서 보고한 모양이다.
데비안 측에서도 심각한 버그라고 인정하고 다음판에 반영하겠다고 하는 모양이다.


아무튼 나로서는 이 문제를 어떻게 떼워넣어야 할 것이므로
일단 누락된 BRepOffset_DataMapOfShapeReal.hxx 파일을 구해야 한다.

OpenCascade.org 에서 제공하는 원본 소스코드 (버전 6.5.4) 의 소스코드 전체를 다운로드 받아둔 것이 있기 때문에 여기서 찾아봤다.
그런데 없는거다...  

황당

결국 문제는 데비안이나 우분투 배포판 제작자가 실수한게 아니고
OpenCascade 쪽에서 해당 파일을 빼먹은 것으로 생각된다.
이 헤더파일이 6.5 버전으로 오면서 불필요해졌다고 하더라도, 하위호환성을 위해서 그대로 유지해 주거나 해서 에러가 안 나게 해 줬으면 좋았을 것을.


결국 다시 구글링 해서 버전 6.3에 들어있는 해당 파일을 복사해서 /usr/include/opencascade 디렉토리 안에 복사해 넣어줬다.




이게 다가 아니고, 또 이 인클루드 파일이 또 인클루드 하는 다른 파일이 더 있는데 그놈들도 빠져있다.


Handle_BRepOffset_DataMapNodeOfDataMapOfShapeReal.hxx
Interface_DataMapOfIntegerTransient.hxx
Handle_BRepOffset_DataMapNodeOfDataMapOfShapeReal.hxx
Interface_DataMapIteratorOfDataMapOfIntegerTransient.hxx

대충 이런 것들이 줄줄 빠져 있는데
아무튼 전부 버전 6.3에서 갖다 넣어준다.



원래 python-occ 0.5 가 OpenCascade 6.3 에 맞춰져 있기 때문에 할 수 없는 듯 하다.

OpenCascade 6.3을 스스로 컴파일해서 
우분투에 설치할 능력(?)이 있다면 처음부터 그렇게 했으면 좋았을지도 모른다.


아무튼 이렇게 패치해 주고 나니깐 make가 별 문제없이 끝난다.


이렇게 make 된 SMESH 및 GEOM을 make install을 각각 해 주면
각각 또 에러가 하나씩 뜨는데, 어떤 .so 파일을 /usr/local/lib 안에 복사해 넣어줄 수 없다는 이야기이므로, 슈퍼유저 상태로 그냥 강제로 해당 파일들을 복사해 넣어줬다.



그 다음...
이제 python-occ의 소스코드 디렉토리로 와서


python setup.py build -j4

때려주고 빌드 시도하니깐


Building pythonOCC-0.5 for linux2
Checking OCC Standard_Transient.hxx header ... found
Checking OpenCASCADE libraries  BinLPlugin  not found Missing library BinLPlugin. Compilation aborted.



이렇게 나온다.

매 단계마다 뭐가 하나씩 빠졌다고 나오는 판에 그냥 돌아버릴 지경이다...  ㅠㅠ

BinLPlugin은 또 뭐하는 물건이길래 빠졌다는 건지...

또 구글링 해 보니


https://github.com/tpaviot/oce/issues/245


이 모듈은 OpenCascade 6.5 버전에서 '드랍' 되었다는 답변이 달려있다.


http://pl.digipedia.org/usenet/thread/11246/620/

또 여기서의 답변을 보면..



Hi Oliver,  The pythonOCC SWIG files have to be re-generated from the new release header files, since there might have been changes from 6.3.0 to 6.5.0 in the OCC API. Some other changes are perhaps necessary (for instance remove the BinLPlugin dependency, as you reported).  The plan is then as follows: - first manage to get OCC 6.5.0 compiled on MacOSX (I've been playing with it for two hour, and it fails) - just wait for a couple of months to know whether OCC 6.5.0 can actually be trusted. I'm quite sure that, in the following weeks, many messages on the OCC forum will come with patches to the build system (the OCC team did not make any progress with automake) - hack the current pythonOCC so that it becomes compliant with this new OCC release. This part of the work will be a very good opportunity to check the robustness of the wrapper, since it is automatically generated. It took 3 years to generate a wrapper for 6.3.0, I hope it take 3 days to do the same for 6.5.0!  Of course any help/feedback is welcome regarding this topic.  The next release will also come with the refactored wrapper from Henrik Rustrom, as well as a Sphinx based documentation.  Regards,  Thomas


발번역

python-occ SWIG 파일들이 새로운 릴리즈의 헤더파일들로 재생성되어야 한다고 한다.
이유는 OpenCascade가 6.3 에서 6.5로 바뀌면서 API들도 바뀌었기 때문에....
이것 말고 다른 변경들도 있을 것이므로, 해결책으로는
(1) OCC 6.5의 소스코드를 잘 관리해서 새로 컴파일할 것 (2시간동안 해 봤는데 결국 실패)
(2) OCC 6.5가 믿을만 할 때 까지 몇달 더 기다릴 것.  (최근 수주간에 걸쳐 포럼에 많은 메시지가 오고 있으므로 빌드 시스템에 패치가 이루어질 것 같음.  OCC 팀은 automake 프로세스 개발에 별 진전을 보이지 못하고 있음.)
(3) python-occ 코드를 해킹할 것 (OCC 6.5에 호환되도록)
이런 일은 wrapper의 신뢰성을 체크하는 좋은 기회가 될 것이다.  이렇게 함으로써 자동 생성이 가능해질 수 있을 것이다.  OCC 6.3.0의 wrapper가 만들어지는데 3년이나 걸렸다!
OCC 6.5.0의 wrapper 작업은 딱 3일 걸렸으면 좋겠다!
이하생략...  궁시렁 궁시렁



(1), (3)번 즉 '해킹'을 해야 해결이 된다는 이야기군화...  멘붕 ㅠㅠ

결국 (2)번 - "무작정 기다리기"가 사용자 입장에서 할 일인 듯 하다.

포기...  ㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠㅠ




-----> 결론

최신버전 우분투 계열에서는 OCC 6.5가 제공되기 때문에
OCC 6.3에 맞춰서 개발된 python-occ 0.5는 이용 불가능하다는 소리.

python-occ가 버전업 되거나
OCC 6.5가 안정화 및 하위호환성 확보 되거나
둘 중의 하나가 이루어져야 한다는 것...








[팟캐스트] 강태욱의 Computer Graphics Digest


http://mini.podics.com/129821329216


강태욱의 Computer Graphics digest



이곳의 팟캐스트 방송을 보고 깜짝 놀랐는데
기술적인 뒷 이야기 같은 것들을 잘 설명해 주시고 있어서
너무 좋았다.

가장 최신 방송이 




이거였는데, 오픈캐스케이드를 아직 제대로 인스톨도 못 시키고 있는
나로서는 오픈캐스케이드가 대체 뭔가 하는걸 명확하게 설명해 주시고 있어서
너무 고마웠더라능...

생각보다 Open Cascade에 대해서 꽤 혹평을 하고 있다.
오래된 오픈소스의 특성 때문인지 너무 지저분하다는 것.
세부적인 정밀도 같은데서 오류가 잘 난다는 것. 등등.


OpenCascade를 윈도우에 깔려면 그냥 바이너리 설치본을 받아다가 깔면 되는 모양인데
(까는건 쉽지만, 개발환경 구축하려면 패스 잡아주고 어쩌고 하면서 또 복잡해지는 모양)
리눅스에서 깔려고 하니깐 아주 환장하게 어려웠다.

일단 우분투 같은곳의 저장소에서는 OpenCascade 라이브러리가 다 등록은 되어 있길래
거의 다 받아다가 깔았는데, 제대로 깔렸는지 자체를 알 도리가 없어서
(DRAWEXE 실행은 성공했지만)

원본 소스를 받아다가 컴파일 하려고 해 봤는데
컴파일 자체가 너무 어려움... ㅠㅠ
의존성 있는 선행 패키지가 너무 복잡해서 하나 해결하고 나면
다음번에서 다른 문제로 또 중단되고...  ㅠㅠㅠㅠㅠㅠ

하루종일 붙잡고 있다가 머리 쥐어 뜯으면서 결국 포기 ㅠㅠ

아무튼 현실적으로,

STEP,IGES 파일을 자유롭게 Import,Export 해 주려면 이 라이브러리가 꼭 필요한 듯 하고
화면에 간지나게 뿌려주기 위해서도 꼭 필요하긴 한 것 같은데
도저히 안되면 이 라이브러리의 사용은 포기해야 하지 않나 싶기도 하다.






2012년 11월 27일 화요일

python 공학용 환경 구축


현재 사용중인 리눅스 버전은 "리눅스 민트 13 마야 시나몬".
우분투와 거의 발을 맞추고 있으므로,
우분투 저장소에서 제공되는 소프트웨어들도 거의 같을 것이다.

파이썬은 2.7

일단 소프트웨어 저장소에서 다음 것들을 설치해 준다.

(1) python 2.7 : 일단 깔려 있는지 확인.
(2) ipython : 인터액티브 콘솔
(2) numpy : 수치해석용 라이브러리 (행렬등)
(3) scipy : 과학기술용 라이브러리
(4) matplotlib : 플랏팅 라이브러리
(5) mayavi2 : 3D 비주얼라이제이션 라이브러리 및 IDE (?)
(6) sfepy : FEM 모듈

헌데 이중에
(2)~(5)번은 기본 저장소에 등록되어 잘 제공된다.  그냥 선택해서 깔아 주기만 하면 OK.




(6)번 sfepy 소프트웨어는 기본 저장소에서 제공해 주지 않는 것 같다.

http://sfepy.org/doc

여기 가서 튜토리얼 보면서 깔아준다.
의존성 있는 패키지들이 좀 있는데

(1) 필수 : numpy, scipy, cython
(2) sympy 사용시 의존성 있는 것들 : matplotlib, pyparsing, umfpack, pytables
(3) schroedinger.py 사용시 의존성 있는 것들 : pysparse, pexpect, gmsh (2D), tetgen (3D)
(4) log.py (live plotting) 사용시 의존성 있는 것들 : multiprocessing, matplotlib with GTKAgg
(5) isfepy 사용시 의존성 있는 것들 : ipython, matplotlib with WXAgg
(6) postproc.py 사용시 의존성 있는 것들 : mayavi2
(7) 도큐먼트 (재)생성을 위해 필요한 것들 : sphinx, numpydoc, LaTeX

의존성 있는 것들 중 빠진 것들을 볼드체로 표시했다.
우분투 계열 리눅스에서 필수 의존성 패키지들을 포함해서 한꺼번에 까는 명령은


sudo aptitude install python-scipy python-matplotlib python-tables python-pyparsing libsuitesparse-dev python-setuptools mayavi2 python-dev ipython python-sympy cython python-sparse


이렇게 소개되고 있다.
이미 설치되어 있는 패키지는 빼버리고 명령을 줘도 될 것이다.
기타 의존성 있는 것들도 마찬가지로 명령을 주면 될 것이다.

이렇게 준비 한 후,
sfepy 패키지는 tar 패키지로 따로 다운로드 받은 후에
sfepy 디렉토리를 만들어 준비해서 풀어넣어 주고 나서


python setup.py build_ext --inplace


이렇게 해 주면 몇 분 정도 걸려서 컴파일이 된다.


./runTests.py


이후 이걸 실행시켜서 제대로 컴파일이 되었는지 확인하면 됨.

리눅스 말고 윈도우 쪽에서 환경을 구성하는 것은 설명대로 따라가면 될테니
그리 어렵지는 않을 것이라고 생각된다.



한편, (5)번 mayavi2 의 경우 자체적인 환경도 가지고 있는데
여기서 기능점검 같은 걸 해 가면서 하는 것도 좋은 것 같다.
자체적인 튜토리얼도 아주 쉽게 잘 되어 있는 것 같다.


mayavi2 환경에서 IDE(?)를 실행시키는 아이콘이 따로 등록되지 않으므로
터미널상에서 mayavi 명령어를 때려주면 일단 실행이 되고
아이콘 등록해 주고 싶으면 /usr/bin/mayavi 를 아이콘으로 등록해 주면 된다.







































이제 활용을 생각해 보면,


ipython 환경에서 기본적인 것들을 인터액티브하게 연습을 하고,
에디팅은 Geany 에디터 같은 것을 사용하고,
mayavi 띄워서 3D 비주얼라이제이션이나 GUI를 쉽게 만들어 나갈 수 있고,
sfepy를 이용해서 간단한 FEM도 가능해진다.

이것들을 활용해서 필요한 어플리케이션을 구성하는 것이 충분히 가능하다고 생각된다.


최종적으로, 작성된 프로그램을 독립적인 바이너리 패키지로 만들어야 할 텐데
윈도우에서는 py2exe, pyinstall 이나 기타 패키지화 시켜주는 것들이 있을 것이고
리눅스 쪽에서 패키징 해 주는 방법은 아무래도 따로 서칭해 보아야 할 것 같다.

일단 눈에 띄는 것은 cx_Freeze (멀티 플랫폼) 또는 freeze.py (리눅스용) 같은 것들...



2012년 11월 26일 월요일

트레드스톤 근사화 방법 - 베벨기어 설계 관련



베벨기어를 제작하기 위한 일반적인 도면은 아래와 같이 표시된다.

( 그림 출처 : http://nptel.iitm.ac.in/courses/IIT-MADRAS/Machine_Design_II/pdf/2_13.pdf )
인도 NPTEL(인도 국립 기술 향상 교육 프로그램)의 교육자료 중 발췌
저자 Prof. K.Gopinath & Prof. M.M.Mayuram


























베벨기어의 치형은 엄밀하게 하자면, 구(Sphere)에 투영시켜 나타내어야 하는데
그렇게 할 경우 위 도면에 나타난 어덴덤,디덴덤 값들과 정확히 일치시켜 맞추기가 힘들다.
왜냐면 이 형식의 도면은 구면이 아니고 'Back Cone'이라는 원뿔형에 투영시킨 것을
염두에 두고 그린 표준적인 것이기 때문이다.

왜 이렇게 했을까.
당연히 구형에 투영시킨 치형을 창성해서 제작하거나 다루기가 힘들었기 때문이다.
즉 구면이 아니고 'Back Cone'으로 대체시켜 투영시켜도 어차피 큰 오차가 없으니
그냥 그렇게 하자고 했고, 그게 지금은 표준 비슷하게 되어 있다.


( 그림 출처 : http://books.google.co.kr/books?id=iauMTmKxfBoC&pg=PA88&dq=Exact+Spherical+Involute&hl=ko&sa=X&ei=gEa0UMDWHqfriQLK8YDoCQ&ved=0CDEQ6AEwAQ#v=onepage&q=Exact%20Spherical%20Involute&f=false     88쪽 )
A TREATISE ON GEARWHELS by George B. Grant, 1907년 초판후 2000년에 10쇄된 것





















위 그림을 보면, 구면에 원뿔(Back Cone)을 얹어서,
그 원뿔에 치형을 투영시켜 표현한다는 방법을 잘 이해할 수 있다.

( 그림 출처 : http://www.scribd.com/doc/13657874/Machine-Design-RS-Khurmi-JK-Gupta-Chapter30    6쪽 )
Machine Design by RS Khurmi / JK Gupta






















위 그림을 보면, Back Cone은 해당 구면에 접하도록 설정한다는 점을 참고할 수도 있다.

이상과 같은 근사화 방법을
'트레드스톤 근사화(Tredstone Approximate)' 또는
'트레드스톤 방법(Tredstone's Method)'이라고 부른다.

트레드스톤 근사화 방법을 따르지 않고, 원래의 엄밀한 형상
즉 구면에 직접 투영시켜 설계된 베벨기어는 별도로
"엄밀한 베벨 기어(Exact Bevel Gear)"라고 부른다.


기본이 되는 원래의 스퍼 기어열을 변형시켜 갈 때
2개의 회전축을 서로 바로 각도를 주면 --> 베벨기어가 되고
2개의 회전축을 서로 꼬아서 각도를 주면(Scew) --> 90도 지점에서 웜기어가 되며
베벨기어 상태에서 2개의 회전축을 서로 오프셋(Offset) 시켜 주면 --> 하이포이드 기어가 된다.
또 여기서 기어 치형의 두께를 줄 때 역시 각도를 줘서 꼬아주면 --> 헬리컬 기어가 된다.


즉 모든 상황에 다 대응이 가능한 기어열의 일반식을 도출하는 것이 가능하지 않나 싶다.
아직은 그 일반식을 도출한 사례는 보지 못했다.
기어열의 일반식을 이용하여 컴퓨터 연산을 시킬 경우,
수학적인 문제는 극한 문제에 직면하게 될 텐데
일반 컴퓨터 언어로는 극한을 표현할 수 없으므로, 특별한 알고리즘이 필요할 것이다.
이런 분야를 "Computational Mathematics" 라고 한다는데
이와 관련한 라이브러리가 따로 있다고 한다.
제대로 구현하려면 이런 라이브러리를 끌어다 써야 할 것이다.
(예를 들면 오픈소스 라이브러리 중에 CGAL 같은 것들)

CGAL을 이용해서 극한문제를 해결한 투영 알고리즘을 사용한 그래픽 결과물로
재미있는게 있던데 한 번 볼 만 하다.

http://acg.cs.tau.ac.il/projects/internal-projects/arr-geodesic-sphere/movie/aos-xvid.avi








V,U로 표시된 점이 각각 북극,남극으로 모아진다.
이렇게 투영될 때, 위와 아래의 변이 0으로 극한으로 수렴하게 되는데
일반적인 수치연산을 하면 에러가 날 것인데
이 부분을 해결하기 위해 CGAL 같은 것이 필요한 듯 하다.



2012년 11월 25일 일요일

GPG V0.8


네이버 블로그에 있던 것을 이쪽으로 옮겨야 할 것 같다.
네이버에는 가끔 이상한 사람이 엉뚱한 메일을 보내거나 하는 등 환경이 좀 좋지 않은 것 같다.

WINDOWS용 설치본 다운로드 (설명서 포함)

소스코드 (LabWindows/CVI 개발환경이 필요함)





참고자료 - NASA 논문 및 도큐먼트들



NASA Technical Reports Server 에서 찾은 좋은 도큐먼트들을 정리해 본다.

기어 관련 사항들 중 좋은 것들을 추출해 보았다.


(1) Failure of Harmonic Gears During Verification of a Two-Axis Gimbal for the Mars Reconnaissance Orbiter Spacecraft

화성탐사선(The Mars Reconnaissance Orbiter Mission)에 사용되는
2축 짐벌 메커니즘을 위한 하모닉 드라이브 기어의 내구성 관련한 논문이다.
플렉스플라인의 기어 마모 상태나 양상을 참고하기에 좋다.


(2) CARRIER-LESS, ANTI-BACKLASH PLANETARY DRIVE SYSTEM

특허문서.
위성기어에 붙이는 캐리어를 생략하고, 대신 링기어를 출력축으로 하는 구조이고
안티-백래쉬를 위해 위성기어를 2단으로 구성하는 구조이다.
입력축과 출력축이 이탈되지 않도록 스크류 락킹으로 묶어주고,
그 사이에 베어링을 사용하도록 한 아이디어도 좋은 것 같다.


(3) MODULAR GEAR BEARINGS

특허문서.
(2)번의 발전형이다.  보다 더 상세한 도면이 첨부되어 있다.
요약문서는 Phase-Oriented Gear Systems 참고.


(4) GEAR BEARING DRIVE

특허문서.
(3)번의 발전형이다.  모터를 썬기어 내부에 삽입하도록 일체형으로 했다.
즉, 자석을 썬기어 안쪽면에 어레이로 부착시켜놓아서 돌아가도록 하고
그 안쪽에는 스테이터 코일이 들어가서 고정되어 있는 형태이다.
그외에 몇가지 아이디어가 더 들어가 있다.
'기어 베어링' 개념의 선행특허는 GEAR BEARING 참고.
'기어 베어링'의 특징으로는 이렇게 설명되고 있다.

"This system utilizes a planetary gear arrangement that eliminates conventional bearings by placing a contact surface at each gear's pitch diameter.
The system utilizes a one-tooth difference between input and output pinion gears.
The contacting surfaces maintain proper meshing and allow the gear set to operate with minimal vibration.
Reliability is also increased due to the decrease in part count and overall complexity.
Also inherent to the gear bearing design is the ability to achieve a large range of gear ratios using the same mechanisms, for example, from 1:1 to 1:2000 by only changing the number of teeth of each gear.
The gear bearing system in this patent includes a single roller per gear that locks the system together using the ends of the gear teeth."

"이 시스템은 유성기어 배열에서 기존에 사용되던 일반적인 베어링을 제거하고 각 기어의 피치 직경의 면접촉으로 대체하여 기능이 발휘되도록 한 것이다.
이 시스템은 입력축과 출력축 기어간에, 1개의 기어 이빨 갯수의 차이를 둬서 기능을 발휘한다.
표면 접촉은 적절한 메슁이 유지되며, 최소한의 진동만이 발생하도록 이루어진다.
전체적인 복잡성과 부품갯수가 줄어들기 때문에, 신뢰성도 역시 증대된다.
또한 동일 메커니즘을 사용하여 대감속비를 구현하는 것도 가능하다.
예를 들어, 각 기어의 이빨 숫자만을 조절함으로써 1:1에서 1:2000까지 가능하다.
기어 베어링 시스템은 기어당 하나씩의 롤러만을 포함하며,
이것은 기어 이빨의 끝단을 사용하여 전체 시스템을 묶어준다."


기타 참고할 만한 기어 관련 기구학 도큐먼트들은....

(5) ANALYSIS AND SYNTHESIS OF MECHANISMS

일반 기구학 교과서다.


(6) Development of Gear Technology and Theory of Gearing

기어 기술과 이론에 관한 설명과 함께, 마지막 챕터에는 기어 기술 발전에 공헌한 중요한 인물들을 열거하고 그들에 관한 소개들이 잘 되어 있다.
엔지니어들은 보통 퍼스낼리티가 잘 드러나지 않는데, 이렇게 중요한 엔지니어들의 면면을 소개하는 것도 참 중요할 것 같다.


(7) Theory of Gearing

기어 이론 설명이 제일 잘 되어 있는 도큐먼트다.
앞 부분에는 선형대수학적인 좌표변환 같은 기초 개념 설명과 예제가 잘 나와있고
뒷 부분에는 본격적으로 선형대수학 기반으로 기어 이론이 설명되는데 특히
행렬 형태로 기어 커브의 표현을 하는 방법이 잘 되어 있다.
8장 부터는 기어 서피스가 설명된다.
19장 부터는 Force 관련한 부분까지 들어간다.




2012년 11월 24일 토요일

기어 설계 오픈소스


뭐 여러가지 오픈소스 사례들이 있을 수 있겠지만
대부분 완성도가 좋지 않다.
사실상 제대로 된 솔루션이 없는 상태라고 해도 무방할 것이다.

엑셀 같은 걸로 만든 완성도가 낮은 솔루션조차 상용으로 판매하고 있는 지경이니...
(예 : MITCalcSGear )


2006년도에 내가 스스로 만들었던 GPG 0.8을 아직도 쓰고 있는 것도 한심한 상황이다.
GPG 0.8은
최대한 만들기 쉽게 하기 위해 LabWindows/CVI 라는 상용 RAD툴을 이용하여
C 프로그램으로 작성하였었다.

이것을 활용해서 그래프도 편하게 함수만 불러다가 그릴 수 있었고
배포판도 쉽게 만들어서 좋긴 했는데
불행히도 상용 라이브러리에 의존하고 있기 때문에
오픈소스화할 수가 없었다.

처음부터 새로 구조를 잘 잡아서 만들고 싶은데
개발도구로는 일단 파이썬, SCILAB 등을 고려중이다.

파이썬을 사용할 경우
실행파일로 만들수도 있고, matplotlib도 지원되고 해서 참 좋긴 한데
3D 그래픽을 제대로 구현하려면 phython-occ 라이브러리를 사용해야 되는 점이 있다.
python-occ를 아직 내 시스템에 제대로 인스톨도 못하고 있다는...
아마 사용된 다른 라이브러리들과의 버전이 안 맞아서 그런 듯 한데
개발환경 구성하기가 내게는 아직 너무 어렵다.

SCILAB을 사용하게 된다면 실행속도는 파이썬보다 훨씬 더 느려지게 될 것이고
버그도 많게 될 것으로 예상된다.
3D 화면을 어찌 띄운다 해도 맨날 다운될 것만 같다.
왠지 신뢰가 안 가는....


github나 sourceforge 가서 이리저리 찾아보니
PYGEAR 같은 프로젝트가 눈에 띄는데
개발 자체가 지지부진 한 듯 하다.

파이썬, python-occ, wxpython 같은 걸로 GUI까지 제대로 구현하려고 하는 것 같은데
일단 제대로 프로그램을 띄워보기도 어려우니..  원!

소스코드나 조금 보고 참고해야겠다.

************* 사족 ***************
(1) python-occ 설치 관련 참고할 만한 블로그 : http://cad-3d.blogspot.kr/2011/10/pythonocc-open-source-interactive-cad.html  매킨토시용 설치 레시피이긴 하지만 참고할 만 한 듯..
현재의 python-occ 0.5 버전은 설치본을 보니 의존성 설정에서 python 2.5 이상 2.7 미만으로 되어 있다.  python 2.6을 사용하라는 이야긴데, 지금 내 컴퓨터에 설치된 것은 2.7 및  3 버전이므로 곤란한 면이 있다.  2.6을 따로 설치해서 보던가 검토 필요...

(2) http://lists.en.qi-hardware.com/pipermail/discussion/2011-July/008480.html
이곳을 참조해서 python-occ 소스파일을 직접 받아서 컴파일을 해 볼 수도 있다.
python 버전이 맞지 않긴 하지만 제대로 동작할 지...
*********************************



그리고,
STEP 파일 포멧 관련해서는

http://stepmod.sourceforge.net/

같은 오픈소스 라이브러리 프로젝트가 있는 모양인데
나한테 별 도움이 안 될 듯....



IGES, STEP 포멧


기어의 치형 형상 데이타가 있을 경우,
이 데이타를 CAD 툴 안으로 집어넣기 위해
표준적인 데이타 포멧을 만들어줄 필요가 있다.

고려할 수 있는 포멧은
DXF, IGES, STEP 같은 것들을 들 수 있다.

필요한 형상만 집어넣으면 되므로 (원점, 좌표계, 기준선, 기어치형 서피스 따위)
상대적으로 간단하게 생성 가능할 것이다.

DXF, IGES, STEP AP203 같은 경우는 특히 텍스트파일 포멧으로 작성 가능하므로
더욱 간단하게 만들 수 있다고 생각된다.

어느쪽을 사용하든 상관은 없으나, 명색이 3D 데이타이므로 DXF 포멧은 일단 제외한다.

IGES는 매우 안정적이고, 심플하다.
포멧 구현을 위한 도큐멘테이션은 이것을 참조해 볼 수 있다,.

http://www.uspro.org/documents/IGES5-3_forDownload.pdf


STEP은 상대적으로 더 복잡하다.
구현을 위한 스터디에 시간이 더 걸릴 것이다.
ISO표준이므로, 해당 표준 문서를 구하는데도 공짜로(?) 구하려면 좀 힘든 점이 있다.
복잡한 정보가 들어갈 필요는 없으므로, 오래된 AP203 포멧이면 될 것으로 사료된다.
참고할 만한 도큐멘테이션은 이것을 참조해 볼 수 있다.

http://www.steptools.com/support/stdev_docs/express/ap203/recprac203v8.pdf

이외에
국제표준인증종합정보센터( http://www.standard.go.kr ) 사이트에 가서
KS B ISO 10303-21:2005 를 검색하면, 온라인상태에서 공짜로 표준 문서를 볼 수 있다.
(프린트, 다운로드 안됨)

---- 사족 ----
온라인으로 해당 문서를 열람하고자 할 때 문제가 있는데
윈도우7에서 이걸 보려면 파수닷컴의 DRM 클라이언트 프로그램을 깔아줘야 되는데
제대로 안된다는 것이다.  에러가 나서 아예 실행이 안된다.

때문에 보려면 윈도우즈XP 컴퓨터에서 해당 프로그램을 다운로드 받아다 볼 수 밖에 없다.
파수닷컴의 DRM 솔루션은 버그와 비호환성으로 원체 악명이 높기 때문에
컴퓨터가 갑자기 느려지거나, 바이러스처럼 언인스톨도 제대로 하기 힘들다거나,
갑자기 다운 되거나 얼어붙는 현상 등등이 발생해도
그건 전적으로 파수닷컴의 개발력이 부족해서 발생한 일일 것이다.
-------------



아무튼 현실적으로 그나마 자세한 문서가 확보되고(위의 링크에 있는 pdf 파일)
안정적이며 대부분의 환경에서 문제없이 잘 되는
IGES 포멧을 사용하는게 좋겠다고 생각된다.

PTC CREO2를 이용해서 (0,0,0)에서 (10,10,0)으로 선분을 하나 스케치해 준 파일을
IGES로 저장한 파일의 예제를 보면...



---- 예제 : prt0001.igs ----


 PTC IGES file: prt0001.igs                                             S      1

1H,,1H;,7HPRT0001,11Hprt0001.igs,                                       G      1

52HCreo Parametric by Parametric Technology Corporation,7H2012130,32,   G      2

38,7,38,15,7HPRT0001,1.,2,2HMM,32768,0.5,15H20121124.145536,0.00173198, G      3

17.3205,4HDONG,7HUnknown,10,0,15H20121124.145536;                       G      4

     314       1       1       1       0       0       0       001000200D      1

     314       0       7       1       0                   COLOR       1D      2

     314       2       1       1       0       0       0       001000200D      3

     314       0       4       1       0                   COLOR       2D      4

     314       3       1       1       0       0       0       001000200D      5

     314       0       1       1       0                   COLOR       3D      6

     314       4       1       1       0       0       0       001000200D      7

     314       0       1       1       0                   COLOR       4D      8

     314       5       1       1       0       0       0       001000200D      9

     314       0       2       1       0                   COLOR       5D     10

     314       6       1       1       0       0       0       001000200D     11

     314       0       8       1       0                   COLOR       6D     12

     314       7       1       1       0       0       0       001000200D     13

     314       0       8       1       0                   COLOR       7D     14

     314       8       1       1       0       0       0       001000200D     15

     314       0       8       1       0                   COLOR       8D     16

     314       9       1       1       0       0       0       001000200D     17

     314       0       8       1       0                   COLOR       9D     18

     314      10       1       1       0       0       0       001000200D     19

     314       0       5       1       0                   COLOR      10D     20

     314      11       1       1       0       0       0       001000200D     21

     314       0       8       1       0                   COLOR      11D     22

     110      12       1       1       0       0       0       000000001D     23

     110       0      -1       1       0                    LINE       1D     24

     406      13       1       1       0       0       0       001000000D     25

     406       0       0       1      15                    PROP       1D     26

     402      14       1       1       0       0       0       000000300D     27

     402       0       0       1       7                   LAYER       1D     28

314,0D0,6D1,8D1;                                                       1P      1

314,1.1D0,1.2D0,1D2;                                                   3P      2

314,3.92D1,1.2D0,1.2D0;                                                5P      3

314,4.1D1,0D0,2.2D1;                                                   7P      4

314,6D1,4D1,2D1;                                                       9P      5

314,6.952D1,7.426D1,7.9D1;                                            11P      6

314,7.84314D1,7.84314D1,7.84314D1;                                    13P      7

314,8.784D1,9.49D1,1D2;                                               15P      8

314,9.6D1,9.6D1,9.6D1;                                                17P      9

314,9.8D1,6.27D1,0D0;                                                 19P     10

314,1D2,1D2,9.49D1;                                                   21P     11

110,0D0,0D0,0D0,1D1,0D0,-1D1;                                         23P     12

406,1,19H03___PRT_ALL_CURVES;                                         25P     13

402,1,23,0,1,25;                                                      27P     14

S      1G      4D     28P     14                                        T      1




-------------

S로 파일을 시작하고 T로 끝난다.
중간에 G로 글로벌한 정보들이 있고
그 다음에 D로 디렉토리 정보가 나오고
그 다음에 P로 형상정보들이 들어가 있다.

더 세부적인 내용은 문서를 참고해서 분석해 보면 될 일이다.


아무튼, 그렇게 해서 기어치형의 형상 서피스를 만들어 내면
그것을 CAD 툴로 임포트 시킨 후 사용할 수 있다.


위 동영상의 사례를 보면, 
엑셀 기반의 프로그램을 이용하여 igs 형상 파일을 만들고
그것을 CAD 툴에서 임포트시켜 모델링하고 있음을 할 수 있다,.


이 프로그램은 상용이라서 그냥 쓸 수가 없을 뿐만 아니라
사용자 친화적이지도 않고, 또 엑셀 기반이라서 더 마음에 안 든다.



베벨기어 형상 원리



베벨기어를 3D 모델링할 때 엄밀하게 하기가 힘들다.
따라서 대부분의 경우 근사화된 모델링으로 만족하는데
FEM이나 접촉해석을 할 때는 이정도로는 곤란하다.

근사화된 모델링을 하는 사례로는 아래의 것을 들 수 있다.

http://gtrebaol.free.fr/doc/catia/bevel_gear.html


이 방법의 경우,
평면상에 작도한 인볼류트 프로파일 커브를,
원뿔면 서피스에 그대로 프로젝션 시키고 있다.

(1) 프로젝션의 방향은 월드좌표계에 일치시키고 있는 듯 하고
(2) 프로젝션의 방법은 CAD 툴에서 제공하는 제한적인 방법(보통 서피스에 노말하게 투영시키거나, 또는 참조한 평면에 노말하게 투영하는 2가지 방법이 제공된)을 사용할 수 밖에 없게 된다.

이것은 엄밀하지도 않고 정확하지도 않다.

따라서 이 상태로 기어를 돌려보면, 간섭이나 미끄러짐 등이 실제와는 전혀 다른 거동을 보이게 될 것이다.  기어면 자체도 실제와는 오차가 상당히 나게 된다.

일반적인 CAD 툴에서 제공하는 기어 모델링 방법들은 대부분 이정도 수준이기 때문에
설계자 입장에서는 곤란한 경우가 발생한다.

엄밀하게 데이타를 생성하는 툴들은 전부 상용 프로그램들 뿐이다.
오픈소스 쪽에서 오랫동안 찾아봤지만 제대로 된 것을 본 적이 없다.


일단, 베벨기어 형상의 원리를 이해하려면 아래의 2가지 동영상을 참고해 보면
이해가 쉬울 것이다.

평면에서 작동하는 일반적인 스퍼기어의 2개의 회전축은 서로 0도의 각도를 가진다.
이 상태에서 조금이라도 각도가 발생하게 되면, 반드시 만나는 지점이 생기고
그 지점을 중심축으로 하여 베벨기어가 성립하게 된다.

보통 베벨기어는 2개의 회전축간의 각도가 90도로 하므로, 이런 점을 참고할 수 있다.


또한, 2개의 회전축간에 각도가 있어서 만나는 지점은
구의 중심점이 된다.
달리말해 일반 평행 스퍼기어열은 구의 반지름이 무한대인 경우라고도 말할 수 있다.

결론적으로
엄밀한 베벨기어의 치형을 작도하기 위해서는 다음의 절차를 거쳐야 한다.

(1) 평면상에 일반적인 인볼류트 치형을 작도한다.
(2) 이것을 임의의 반지름을 가진 구면에 투영시킨다.
(3) 투영 시키는 방법은, 구의 중심점에서 바라본 시점을 보도록 해 준다.

'구의 중심점에서 바라본 시점을 보도록 투영시킨다'는 말의 의미는
일반적인 지도 제작법에서, 흔히 쓰는 스테레오 투영법(Stereographic Projection)과는 좀 다르다는 이야기다.

지도에서의 스테레오 투영법은,
구의 중심점에서 바라보는게 아니고
반대 극점(북극)에서 바라본 시점을 보도록 투영시키는 방법이다.

때문에 투영시킬 때 사용하는 수식(Notaion)이 좀 달라지게 될 것이다.