레이블이 MEDIA_ART인 게시물을 표시합니다. 모든 게시물 표시
레이블이 MEDIA_ART인 게시물을 표시합니다. 모든 게시물 표시

2015년 5월 10일 일요일

Open Source CAE Toolchain 13 - FEM with Elmer by Linear Elascticity and Scanning time varient normal force


Open Source CAE Toolchain 13 에서는 MATC 문법을 이용해서 Time Varient Displacement를 연습해 보았는데, 너무 단순한 감이 있어서 약간 다르게 연습해 보기로 했다.
어떻게 했는지 과정 역시 좀 자세하게 기술해서, 한 명도 없을 것 같지만(?) 혹시나 필요한 사람이 있을 수도 있으므로 도움이 될 수 있도록 해 본다.

기본적인 아이디어는 간단하다. 

FEM의 가장 기본적인 Linear Elastic 해석을 하는데, 해석 대상이 되는 물체에 가해지는 힘을 1초 단위로 바꿔주는 것이다.
그리고 그걸 여러 샷을 얻어내서 동영상을 구성해 주는 것이다. 

이렇게 할 경우, 단순히 Static 해석을 하는 것 보다 좀 더 좋은 가시화 효과를 얻을 수 있다.
또 다른 목적으로도 응용성이 넓어질 것이다.
(예를 들어, Elmer와 MBDyn을 Connect 시켜서 MFBD 해석 비슷하게 해 볼수도 있지 않을까)



1. 3D 모델링

여러가지 방법이나 소프트웨어를 사용해서 3D 모델을 만들어둔다.
여기서는 GPG를 이용해서 Involute Gear Profile을 얻어낸 후, PTC CREO로 Import하고 적당히 편집하면서 Extrude 시킨 것이다.
그려진 모델을 *.stp 포멧으로 저장한다.
이때, PTC CREO의 기본 치수 단위는 mm 단위로 되어 있으므로 유의해 둔다.



2. 매쉬 생성

본 예제에서는 별도의 외부 매쉬 소프트웨어를 사용하지 않고, Elmer에 내장된 nglib를 사용하였다.  따라서 매쉬 생성 규칙을 세밀하게 셋팅해 주기는 어렵지만, 가장 간단하게 해 볼 수 있다.


ElmerGUI 프로그램 실행후 *.stp 모델을 불러들이면 일단 자동으로 매쉬가 만들어지는데, 위 그림과 같이 너무 성글기 때문에 더 촘촘하게 매쉬를 만들기 위해 Mesh > Configure 메뉴로 들어간다.



그리고 위 그림과 같이, Max H 값을 0.05로 변경해 주었다.
Max H 값은, 생성될 매쉬의 셀의 가장 큰 사이즈 한계를 정해주는 것이다.  따라서 이 값을 줄이면 줄일수록 전체적으로 촘촘하게 되고, 아주 큰 셀이 만들어지지 않도록 해준다.
Gear Module이 0.3에 불과한 아주 작은 기어 치형이기 때문에 기어 치형을 더 잘게 쪼개주기 위해서이다.

Fineness 값의 의미는 나도 정확히 모르겠다.
이 값을 변경해 줘도 매쉬에 변화가 없다.  그래서 그냥 둔다.

좀 더 세밀한 옵션을 줘서 매쉬 작업을 제대로 해야 한다면, 다른 매쉬 소프트웨어를 사용하도록 일반적으로 권장된다.



아무튼 위의 옵션을 줘서 이렇게 나왔다.



3. 해석 조건 설정

Model > Setup 메뉴에 들어가서 아래와 같이 설정해 준다.


Simulation type은 Steady State가 디폴트로 되어 있는데, 일반적인 Static 구조해석을 하려면 이렇게 해서 하나의 샷만 얻어내면 될 것이다.
다만 이번 경우에는 가해지는 힘을 바꿔가면서 볼 것이기 때문에, Scanning으로 했다.
Transient로 설정하는 것은 Linear Elastic Equation을 쓸 때는 당연히 안 먹는다.

왜냐면 Linear Elastic Equation은 Implicit Equation이기 때문에 시간이 매개변수로 고려되지 않는 구조이기 때문이다.  하지만 유체동역학을 해석할 수 있는 Navier-Stokes Equation 같은 것은 당연히 시간 변수가 들어가 있기 때문에 Transient 옵션이 먹는다.

Timestep intervals 옵션은, 전체 샷의 개수를 써 넣는 것이다.  이번 경우에는 100개의 샷을 얻어내기로 했다.
Timestep sizes 옵션은, 각 샷의 시간 간격이다.  이번 경우에는 간단히 1초 간격으로 하기로 했다.  (Elmer FEM의 포럼에 가서 보니깐, Linear Elastic으로 Scanning 할 경우에는 가급적 시간 간격을 충분히 길게 주는 것이 좋다고 한다.  너무 짧게 잡으면 수렴성이 저하되기 때문이다.)

마지막으로, Free text에 위 그림과 같이 써 넣어 준다.
Free text에 써 넣는 코드는 case.sif 파일에 추가적으로 삽입되는 내용들을 자유롭게 써 넣도록 해 주는 것이다.  Remark 목적이 아니므로 유의한다.
본 예제에서 Coordinate Scaling = Real 0.001 이라고 써 준 이유는, 불러들여진 3D 모델이 mm 단위로 모델링 된 것이기 때문에, m 단위의 SI 단위계로 내장된 물성치들이 모두 통일되어 있는 Elmer에 맞춰주기 위한 것이다.

Elmer 개발팀에서는 추후에, 불러들여진 3D 모델의 스케일링을 GUI에서 지원해 주는 기능을 넣을 것을 고려하고는 있는 모양이다.

아무튼 Apply하고 창을 닫는다.
이제 Model > Equation 메뉴로 들어간다.



본 예제에서는 Linear elastic Equation만 사용한다.
따라서 위 그림과 같이, 이것만 Active 시켜주고, 또 이것을 Body1에 적용시켜준다.
Caculate Stresses 역시 체크해 줘서 응력 결과값도 얻어낼 수 있도록 해 준다.

OK 해 주고 나오고 난 후,
이제 Model > Material  메뉴로 들어간다.


Material library를 눌러서 Material을 골라준다.
본 예제에서는 Steel (carbon - generic) 을 선택해 주었다.
그러면 모든 물성치들이 한꺼번에 먹여진다.
물성치를 바꾸고 싶다면 직접 Youngs modulus 및 Poisson ration를 써 넣어줘도 당연히 무방하다.

OK 해 주고 나오고 난 후,
이제 Model > Boundary Condition  메뉴로 들어간다.


fixed 라고 이름을 지어준 후에, Displacement 1,2,3을 모두 0으로 묶어줘서 고정시키는 것으로 한다.
좌표계 차원이 x,y,z가 아니라 왜 1,2,3으로 되어 있냐면, 사용자의 필요에 따라 Setup에서 직교좌표계가 아니라 원통좌표계나 구형좌표계 등 좌표계를 바꿔서 설정해 줄 수도 있기 때문에 이와 같이 일반적인 이름으로 해 준 것이다.
Elmer의 특징 중의 하나가 이렇게 좌표계를 바꿔서 다룰 수 있도록 해 준 것이다.  모든 Elmer의 내장된 Solver들은 역시 당연히 이런 좌표계 변경에 대응 가능하도록 일반좌표계 형태로 코딩되어 있다고 한다.

이제 OK하고 닫는다.
그리고 다시 Model > Boundary Condition  메뉴로 들어가서 Boundary Condition을 아래와 같이 forced라는 이름으로 하나 더 만든다.


기어 치면에 가해 줄 힘을 정의하는 것이다.
Normal Force 부분에 Variable time으로 적어놓는다.
그리고 아래로 스크롤해서...


Free text input 란에다가 위와 같이 써 준다.
굳이 Free text input에다가 써 줄 필요 없이, 앞에 variable time이라고 써 준 뒤에 그냥 이어서 죽 써줘도 된다. (사실 그게 더 맞는 것 같다.)

그러면 나중에 case.sif 파일을 생성해서 들어다 보면,


Normal Force = Variable time
 Real MATC "-100*sin(tx*3.14159/100)"


이렇게 되어 있음을 확인할 수 있을 것이다.
즉 Normal Force에다가 집어넣어줄 값을, Variable time으로 정해준 다음, 그 값을 Real 자료형으로 주는데 그냥 상수가 아니고 시간을 매개변수로 한 함수 형태로 써 주는 것이다.
함수 표현을 해 주기 위해서 MATC 툴을 써서 "-100*sin(tx*3.14159/100)" 이렇게 표현했다.
tx라는 변수가 바로 시간 변수이다.
아까 위에서 Setup 메뉴 부분에서 Timestep intervals = 100, Timestep sizes = 1 으로 정해줬는데 그 설정에 따라서 tx 변수는 1, 2, 3, ... 100 까지 갈 것이다.
(매개변수가 시간 하나가 아니고 여러개로 늘어날 때는, tx(0), tx(1)...  이런 식으로 표현되는 것 같은데, 아직 이렇게 여러개의 매개변수를 써서 연습해 보지는 못했음)

MATC 문법은 그냥 우리가 흔히 쓰는 수식 형태가 큰 무리없이 다 먹는다.
sin() 같은 삼각함수도 그냥 먹어들어가고...

기호를 마이너스(-)로 해 준 것은 Normal force의 방향이 기어 표면을 눌러주는 방향으로 해 주기 위해서이다.

앞의 100은 최고점에 달했을 때의 힘이다.  즉 100N이다.
sin() 함수 안에 있는 3.14159/100은, Timestep intervals = 100이기 때문에 이렇게 100번 돌아갈 동안 sin()함수의 반주기가 되도록 맞춰준 것이다.

아무튼 이제 OK하고 닫는다.

이상 Boundary Condition을 fixed, forced 이름으로 2개 만들어 주었다.
이것들을 어느 Surface에 적용할 것인지를 GUI를 이용해서 직접 지정해 주는 순서로 들어간다.

일단 선행 작업을 먼저 해 준다.


마우스로 위 영역을 더블클릭하면 빨갛게 선택이 된다.
이 면에 모두 힘을 주고싶지는 않기 때문에, 이 면을 분할해서 일부에만 힘을 주고 싶다.
이 상태에서 Mesh > Devide surfaces 메뉴를 선택한다.
그러면 Sharp edge angle 옵션을 정하는 팝업창이 나온다.
디폴트값은 20도이다.

면의 형상을 보면 굉장히 완만하게 넘어가고 있기 때문에, 이걸 Devide 하기 위해 0.5도의 작은 값을 준다.


그러면 이렇게 분할이 된다.
잘 보면 동떨어져 분할된 면의 조각이 나오는데, 이것은 Ctrl키를 누른 상태에서 마우스 더블클릭을 해 가면서 합치고 싶은 것들을 선택해 준 다음에 Mesh > Unify surfaces 해 주면 합쳐진다.
그렇게 정리해 주고 일단 선행 작업을 마친다.

이제 Model > Set boundary properties 메뉴를 선택해 주면, 체크가 된다.

이 상태에서 이제 원하는 면을 더블클릭해 주면 Boundary Condition을 지정해 주는 팝업창이 뜨기 때문에, 앞서 만들어둔 fixed 또는 forced를 선택해서 조건을 설정해 줄 수 있다.

위 그림의 면에는 forced 조건을 설정해 주었다.


위 그림의 빨갛게 선택된 면과 그 반대쪽 면에는 fixed 조건을 주어서 고정시켰다.
그러면 이상 Boundary Condition을 원하는 면에 모두 지정해 주었다.

이상 살펴본 바와 같이, Elmer는 노드(node)가 아닌 면(surface)을 가지고 선택을 해 주도록 해 놓았다.  사용자 편의성을 위해 이렇게 단순하게 만들어 놓았을 것이다.
이렇게 하면 세밀한 설정이 어렵다는 단점이 있는 반면에, 입문자가 다루기에는 굉장히 심플하므로 진입장벽을 낮추는 효과가 있다.



4. case.sif 파일 만들기

대부분의 해석 소프트웨어는, solver에 입력될 파라미터 및 조건들을 간단히 넣어주기 위해 텍스트파일로 된 설정파일을 전처리 과정에서 생성하도록 되어 있다.
Elmer의 경우에는 그 역할을 하는 것이 바로 case.sif 파일이다.

sif > Generate 메뉴를 선택하면 자동으로 만들어진다.
그 다음에 sif > Edit 하면 텍스트에디터가 뜨면서 그 내용을 볼 수 있게 된다.
이걸 그대로 저장한다.  저장할 때 이름을 반드시 case.sif로 해 준다.
(Setup에서 그렇게 이름이 디폴트로 지정되어 있기 떄문이다.)

이 상태 그대로 해석을 실시해도 되는데, 그렇게 하면 결과 데이타는 case.ep 파일로 저장된다.
case.ep 파일은 텍스트파일인데 Elmer 전용 결과 데이타 포멧이다.
따라서 Elmer에 내장된 ElmerPost 및 ElmerVTK는 이 파일을 불러들여서 데이타를 가시화 해 준다.
하지만 더 좋은 후처리기로 보고 싶다면, 다른 포멧의 결과 데이타 파일을 출력해 줘야 한다.

이를 위해 case.sif 파일에 다음 내용을 추가해서 저장해 준다.



Solver 2
 Exec Solver = after timestep
 Equation = "result output"
 Procedure = "ResultOutputSolve" "ResultOutputSolver"
 Output File Name = "case"
 Output Format = String "vtu"
 Binary Output = True
 Single Precision = True
 Save Geometry Ids = True
End



그리고 이 부분의 내용을 수정해 준다.


Equation 1
 Name = "Equation 1"
 Calculate Stresses = True
 Active Solvers(1) = 1 2
End


위에 Active Solvers(1) = 1 이라고 원래 되어 있는데, 2를 하나 더 추가해 주는 것이다.
(그런데, 이렇게 추가해 주지 않아도 Solver2는 잘만 돌아가더라능...)


VTK 포멧의 xml 형식인 *.vtu 파일도 만들어주라는 내용이다.
그 기능을 해 주는 것이 바로 "result output" 이라는 것인데, 이것도 Linear elastic Equation 처럼 하나의 독립된 Solver 취급을 받고 있다.  독특한 구조다.

Elmer는 이런 식으로 미리 만들어진 여러 Solver들이 대략 46가지 정도 있는 것 같다.
물론 ElmerGUI 상에서 Equation 메뉴 들어가면 Solver 탭이 몇 개 안 보인다.
나머지는 숨어있다.

Elmer가 설치된 디렉토리에서 ../share/ElmerGUI 를 들여다 보면,
edf 및 edf-extra 라는 디렉토리가 보인다.

edf 디렉토리 안에는 ElmerGUI에서 보여지는 솔버들의 GUI 구성 내용이 xml 형식으로 각각의 별도 파일로 들어가있다.

edf-extra에는 GUI상에 안 보이는 다른 솔버들의 GUI 구성 내용들이 역시 들어있다.

가장 간단하게는, edf-extra 안의 파일들을 그냥 복사해서 edf 으로 넣어주는 방법이 있다.
이렇게 해 버리면 ElmerGUI 상에서 Equation 메뉴를 열면 솔버 선택하는 탭들이 아주 많이 생긴 것을 볼 수 있다.

하지만 이렇게 해 버리는 것은 좀 무식하고 비정상적인 방법이고, 정석적인 방법은 File > Definitions 메뉴에 들어가서 메뉴를 편집해 주는 것이다.
편집해 주고 나면 ElmerGUI를 다시 시작할 필요 없이 그냥 바로 적용되어 있다.
그래서 원하는 솔버를 선택해서 case.sif 생성해서 돌리면 된다.

편집해 준 내용을 저장하지 않고 ElmerGUI를 종료할 경우에는, 다음에 실행시킬 때는 초기화되어 보인다.  또는 편집 내용을 저장해 주면 다음부터 변경된 메뉴대로 보일 것이다.
사용자 마음대로 하면 된다.

지저분해 지는게 싫다면 편집하지 않고 그냥 디폴트로 해 놓고 쓰다가 필요한 솔버는 그때그때 불러다 쓰는게 나을지도 모른다.


ElmerGUI의 단점이 하나 있는데, 그것은 위에서처럼 case.sif 파일을 편집기로 직접 수정해 줄 경우에, Save Project 해 주면 편집해 준 내용이 다 날아가 버린다는 것이다.
왜 이렇게 만들었는지는 모르겠는데, 내용이 날아가버리는 것에 대비해서 수동으로 편집해 준 case.sif 파일은 이름을 바꿔서 백업해 두는 것이 좋겠다.



5. Run

Run > Parellel settings 메뉴에서 병렬연산용 CPU 코어 개수를 정해줄 수 있다.
ElmerSolver_mpi.exe 라는 유틸리티가 내부적으로 작동해서 계산영역을 자동으로 파티셔닝해서 이루어지는 것 같은데...  이게 잘 되는 케이스도 있고 안되는 케이스도 있다.
이번 예제에서는 안 먹고 에러가 나온다.  그래서 병렬연산 셋팅을 해제하고 싱글코어로 그냥 했다.
Nvidia CUDA 그래픽카드 병렬연산은 아마 지원하지 않는 듯 하다.
이걸 하려면 아마 Elmer에 사용된 핵심 포트란 라이브러리들을 CUDA와 엮어서 어떻게 재컴파일하던가 해야 할 것 같다.  그렇게 하기는 현실적으로 힘들기 때문에, 결국 비싼 그래픽카드는 필요없다.

이제 Run > Start solver 한다.


이 케이스에서의 수렴 그래프 모양은 좀 독특한 것 같은데 일단 뭐 결과는 나오므로 그냥 둔다.
전체 해석 시간은 6655.98 초 걸렸다.
100번의 샷을 연산했으므로 시간이 오래 걸렸다.



6. 결과 보기

결과를 보기 위해 Paraview를 실행시키고, 만들어진 case.vtu를 열어본다.
100번의 샷이므로 작업 디렉토리에는 case0001.vtu ... case0100.vtu 으로 100개의 파일이 만들어져 있다.




그리고 Paraview 상에서 결과를 애니메이션으로 이리저리 저장해 주고, 그것들을 모아서 동영상을 만든다.






이상의 과정을 연습해 보니깐 Elmer에 대해서 어느정도 감이 잡히는 것 같다.



2015년 3월 22일 일요일

Making Tensegrity


Tensegrity가 무엇인지에 대해서는 다음 참고.


간단히 만들기 위해 기본단위가 되는 스트럿(Strut)을 먼저 제작했다.


생각보다 알맞는 Strut을 제작하기가 어려웠는데,
이유는 빨대의 강도가 낮아서 고무줄이 당겨지면 버클링 되어 버리기 때문이었다.
일반적인 고무밴드와, 
이에 맞도록 버클링되지 않는 수준으로 적절한 빨대 길이를 몇번의 시행착오끝에 찾았다.
빨대 길이는 9cm로 하면 된다.

가위로 빨대의 양 끝을 약 1cm 가량씩 가운데를 따준다.
고무줄을 끼우기 위해서다.
그리고 고무줄을 위 사진과 같이 전부 끼워준다. 



그리고 이런 Strut을 많이 만든다.
약간의 노가다의 압박이 있긴 하지만
다른 방식으로 수선을 떨면서 돈들여 Strut을 만드는 것 보다
빨대에 칼집만 내면 되도록 많이 간단하기 때문에
감사하게 생각하는게 낫겠다.


먼저 가장 만들기 쉬운
6-Strut Icosahedron (스트럿 6개짜리 정20면체)을 만들어 본다.
이걸 만드는 방법은 Youtube 같은데 보면 잘 나온다.

우리나라 사람이 만든 동영상
요건 한국말로 해서 좋긴 한데, 만드는 순서가 좀 희안하게 되어 있다.

이쪽 동영상이 좀 더 참고가 된다.


암튼 쉬운거 해 봤으니 좀 복잡한 거에 도전해 본다.
30-Strut Dodecahedron (스트럿 30개짜리 정12면체)...

만드는 순서는 이런 걸 참고하였다.


헐 어렵네...



막 헷갈리기 시작한다.



어찌어찌 다 연결은 했는데
팍삭 찌그러진 모양이 되었다.
모양을 예쁘게 잡으려면 고무줄 길이를 상당히 정교하게 통제할 필요가 있을 것 같다.
귀챦아서 그냥 둠.



그래도 자꾸 보니 정이 든다.



헥헥헥...


암튼 다 만든걸로 탱탱함을 검증해 본다.







하지만 찌그러진 모양이 마음에 안 든다.
내구성도 안 좋다...

그래서 다음 날 새로 재조립...



고무줄이 빠지지 않도록,
종이테잎으로 일일이 꼭지점들을 모두 둘둘 감아 막아버렸다.
고무줄 길이도 좀 주의하면서 잘 맞춰 보았다.
그러니깐 모양이 좀 나은 것 같다.

이제 이걸로 테스트...



찌그러짐과 내구성을 한 번 살펴보고...



드랍 테스트.



적당한 빨대를 마트에서 사준 마눌님에게 감사를 드린다.


Tensegrity에 관한 정보가 종합적으로 제일 잘 정리된 곳은
이곳인 듯 하다.

Robotics에 응용하는 곳은 버클리대 BEST 연구팀과
그로부터 파생된 NASA SuperBall Bot 같은 것들이 해외토픽 같은데서 최근에 나왔다.


Tensegrity Robotics는 나도 오래전부터 구상은 해 왔지만 
몇가지 치명적인 현실적 문제가 걸림돌이 되는 것 같다.


1. 와이어의 텐션을 조절하는 직동 액츄에이터가 필요하다.
그런데 이것의 요구 사양이 상당히 까다로와진다.
장력 측정 센서 내지는 최소한 위치센서 같은건 필수로 있어야 할 거고...
아주 컴팩트하면서 매우 높은 장력을 버텨낼 수 있는 신뢰성이 요구된다.
현재까지 이런 요구조건을 만족하는 제품은 없으므로,
직접 개발할 필요가 있는데 설계적으로 간단한 문제는 절대 아니다.

2. 자유도가 너무 높아진다.
물론 장력이 분산되므로 각 액츄에이터에 가해지는 부하는 줄어들지만,
자유도가 높은 만큼 사용되는 액츄에이터의 개수가 많아지게 된다.
이는 몇가지 파생 문제점을 만들어낸다.
제어가 복잡하고 어려워지고,
액츄에이터 개수만큼 제작 원가가 올라가며,
케이블링 복잡도도 기하급수적으로 올라간다.

3. 해석이 어렵다.
자유도가 높은 만큼, 해석하는데 들어가는 계산량도 그만큼 올라간다.
일종의 유한요소해석(FEM)을 매 제어시간(Iteration Time)마다
실시간으로 수행해야 하는 꼴일 것이다.
이렇게 되면, 동적인 전체 제어(Dynamic Whole-body Control)은
일반적인 다른 로봇보다 훨씬 더 어려워질 것이다.

4. 조립이 어렵다.
부품개수가 매우 많아지고, 조립방법이 헷갈리기 때문에
숙련된 사람이 아니면 하기 어렵다.



그럼에도 불구하고, 구조 자체가 가지는 거부할 수 없는 매력 덕분에
연구자들의 관심을 오랫동안 끄는 것 같다.


1. 매우 가볍다.
대체로 다른 트러스구조에 비해 중량을 40% 수준까지 더 경감 가능하다고 한다.

2. 내충격성이 매우 좋다.
장력 와이어가 충격을 전부 받아줄 뿐만 아니라,
충격은 전체 구조로 분산된다.

3. 수학적으로 아름답다.
대칭성, 규칙성 때문에 아름답다고 느껴진다.


결국 BEST나 NASA에서 찾아낸 어플리케이션은
토성의 위성인 타이탄을 탐사하는 착륙선을 이것으로 만드는 것이었다.
실제로 이 프로젝트가 현실화 단계까지 살아남을 수 있을지는 모르겠으나
희박한 대기, 부족한 연료, 실시간 통제 불가능 상황에서
미지의 땅에 거칠게 들이받아도 착륙선을 살아남게 만드는 목적 자체는
훌륭하게 부합할 수 있을 것 같다.







2014년 11월 14일 금요일

Heart Plot V0.1

Heart Plot V0.1









// Heart Plot V0.1
// 20141115
// by DongKim


Heart Heart1;
int pX=0;
int pY=0;
int pScale=10;

void setup() {
    size(640,480);
    background(255,230,200);
    smooth();
    frameRate(2);
    noStroke();
    fill(255,0,0);
    
    Heart1 = new Heart(this);
} 

void draw()
{
    background(255,230,200);
    pX=random(0,width);
    pY=random(0,height);
    pScale=random(1,10);

    pushMatrix();
    translate(pX,pY);
    rotate(random(0,2*PI));
    Heart1.Plot(pScale,random(200,255),random(0,200),random(0,200));
    popMatrix();

}

class Heart
{
    float scale;
    int R,G,B;
    
    void Heart()
    {
        scale=30.0;
        R=255;  G=0;  B=0;
    }
    
    void Plot(float temp_scale, int temp_R, int temp_G, int temp_B)
    {
        int i=0;
        float t=0.0;
        float x,y;
        
        scale=temp_scale;
        R=temp_R;  G=temp_G;  B=temp_G;

        fill(R,G,B);

        while (i<2000)
        {
            i++;
            t=t+(2*PI)/float(i);
            x=16*pow(sin(t),3);  x=scale*x;
            y=13*cos(t) - 5*cos(2*t) - 2*cos(3*t) - cos(4*t);  y=scale*y;
            ellipse(x,-y,1,1);
        }
    }
}





아... 잠이 안온다. 불안장애 같은건가.


2014년 11월 3일 월요일

Google Ara project에 관한 생각


Google Ara project에 관한 생각







구글 아라 프로젝트를 계속 관찰해 왔는데
온라인에서 우리나라 사람들의 반응은 대체로
"사업성은 별로 없어 보인다"라는 것이다.
사람들은 이 제품이
삼성 갤럭시나 애플 아이폰 같은거랑 경쟁할 거라고 본다.
(물론 내 생각은 전혀 다르다)

실제로 이 프로젝트의 컨셉트 자체는 그다지 특별할 것이 없다.
누구나 흔히 한 번쯤 생각해 보는 전형적인 노말한 아이디어다.

그런데 이걸 실제로 구현하는 일에 착수한 한국인은 없다.
아마 아이디어 단계에서 사장되기 때문일 것이다.

이런 종류의 아이디어의 성공 여부는
제품 자체 보다는 '에코 시스템'을 얼마나 잘 키우느냐에 있다고 본다.

Ara는 원래 스마트폰을 구현한다는 목표를 가지고 있지만
사실 이게 꼭 스마트폰이어야 한다는 법도 없다.
써드파티 제작자가 스마트폰 기능을 빼버린
핵심 제어 모듈을 제공한다면
이건 그냥 작은 태블릿PC가 될 수도 있는거다.
아니면 작은 개인용 서버도 될 수 있고.
또는 기타 다른 용도의 컴퓨팅 플랫폼이 될 수도 있다.


따라서 Ara의 에코시스템이 어떻게 발달하느냐에 따라서
이 제품의 핵심 용도가 정해질 것이다.

나라면 이것을 어떻게 사용할 것인가?


스마트폰으로 사용하려면 이것 말고 그냥 다른 제품 살 것이다.
Ara는 다른 스마트폰 보다
더 크고 무겁고 약하고 느릴 것이기 때문이다.

대신 다른 스마트폰이 갖지 못한 특별한 기능을 가진
컴퓨팅 플랫폼이라면?

Raspberry Pi 또는 Arduino를 사용하는 Physical Computing 내지는 Media artist 들이 사용할지도 모른다.
이 사람들은 Processing 같은 쉬운 언어를 사용하기 때문에
안드로이드 전용 앱을 만들기 위해
복잡한 라이브러리를 습득하고 자바 문법을 익히고
에클립스 IDE 사용법을 연습하는 사람들이 아니다.
그냥 Processing으로 간단히 구현해서 곧바로 돌릴 플랫폼이 필요한 사람들이다.

기존의 Raspberry Pi 또는 Arduino와 비교해서
Ara는 더 작고 가볍고 깔끔하며 훨씬 더 강력한 컴퓨팅 파워를 가진다.
가격은 좀 더 쎄겠지만...
아무튼 이런 분야에서 비교우위가 생기는 것이다.

실제로 구글에서도 Ara를 가지고 무슨 스마트폰 시장을 뒤집어버리겠다던가 하는 따위의 생각을 하고 있지는 않을 것이다.  Ara 개발팀 스스로도 그럴 것이다.

다만 Ara 고유의 에코시스템이 형성되기 시작하면
가속도가 점점 붙어나가고
Ara에 각종 Hacking이 이루어지면서
뭔가 대단한 어플리케이션이나 용도가 툭 튀어나올 것이다.


내년에 아마 개발자용 킷이 본격적으로 배포 단계에 들어갈 것인데
분위기를 계속 주시해 볼 필요가 있을 것 같다.


조금 슬픈 점은...
이런 종류의 프로젝트는 한국에서는 절대 살아남기 힘들다는 점이다.
나라가 문화적으로 발전하려면
'벽(癖)을 가진 사람'이 필요하다고 한다.

"벽(癖)"이 무엇일까.
간단히 말해 Geek, Paranoia, Mania, Otaku 같은 인간들일 것이다.
돈을 보지 않고 비젼이나 크리에이티비티 그 자체에 몰두하는 사람.

천민자본주의가 너무 득세하는 시대인지라
한국에서는 그런 사람들이 씨가 말라가고 있는 듯 하다.




2014년 10월 22일 수요일

Processing.js in Blogger (TEST)







<html>
<head>
    <script src="https://raw.githubusercontent.com/processing-js/processing-js/v1.4.8/processing.min.js" type="text/javascript"></script>
</head>


<body>
<script type="application/processing">

소스코드 from https://github.com/whyi/Delaunay/blob/master/delaunay.pde

</script>
<canvas></canvas>
</body>
</html>




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년생이신데 엄청나다...  그 연세에 정말 대단하신 분 같다.