2017년 1월 20일 금요일

목재 스프레이 / 페인팅 하기

이 글에서는 아트, 건축, 파빌리온, 오브제 전시, 가구, 목공  등 에서 많이 사용되는 목재의 표면을 페인팅하는 방법을 간단히 요약한다. 페인트 작업은 손이 많이 가는 작업이다. 그리고, 첫 작업 결과가 다음 작업의 결과에 큰 영향을 준다. 처음 작업할 때 계획을 잘 세우고 진행하는 것이 좋다.

1. 개요
여러가지 이유로 페인트나 스프레이를 사용해야할 때가 있다. 이 경우, 가공의 편의상 목재를 재료로 많이 사용한다. 목공에 많이 사용하는 목재 중 하나인 MDF는 톱밥 등을 접착, 압축해 만든 재료이다. MDF는 가공이 쉽고 저렴해서 많은 곳에 사용된다. 800 X 1500 mm 크기 MDF 한장이 대략 10,000 ~ 15,000원 정도이다.

MDF 가공하기

MDF같은 목재에 직접 페인팅이나 스프레이를 뿌려보면, 재료가 페인트 수분을 빨아들여 실제 원하는 색이 안나오는 것을 알 수 있다. 보통, 이런 문제를 해결하기 위해, 재료에 젯소(gesso)란 도료로 칠한 후, 페인팅하고, 바니쉬(varnish)로 코딩한다.

목재의 페인트 수분 흡수로 인한 문제 
2. 순서
페인팅이나 스프레이 칠하는 순서는 다음과 같은 과정을 거쳐야 한다.

1. 평평한 곳에 페인트 칠할 재료 놓기
   평평한 곳에 재료를 놓지 않고 페인트를 하면, 페인트 흘러내린 자국들이 생긴다.
2. 재료 사포질 및 먼지 제거
   재료 표면이 거칠거나 먼지가 묻어 있다면, 페인트 칠한 표면이 매끄럽지 않다.
3. 표면에 젯소(gesso) 칠하기
   붙의 끝에서 중간 정도까지만 젯소를 적당히 묻힌 후, 재료에 골고루 칠한다.
   재료에 칠한 부분은 서로 적당히 겹치도록 해, 빈 곳이 없도록 한다.
4. 1~2시간 건조하기
5. 다시 사포질해서 거친 부분 다듬기
6. 이제 페인팅이나 스프레이 뿌리기
7. 1~2시간 건조하기
8. 수성 바니쉬(varnish)로 표면 코팅하기

다음은 이와 관련된 튜토리얼 영상이다.

젯소 페인트

젯소(Gesso) 사용 방법

바니쉬(varnish) 사용 방법

참고로, 젯소는 보통 1L에 만원 정도 한다. 수성바니쉬는 1L에 만원 정도이다. 다음 영상은 스프레이하는 방법에 대한 것이다. 스프레이는 이전 스프레이한 구간과 15% 정도 오버랩되도록 분사한다. 참고로, 락커 스프레이는 하나에 천오백원정도이다.

스프레이 사용법

만약, 스프레이가 원하지 않는 곳에 칠해졌다면, 락카 신너를 사용해, 락커 스프레이를 지울 수 있다.

3. 기타 사항
페인트 작업 시 페인트가 주변에 튀기도 하므로, 주변을 잘 정리하고 작업하는 것이 좋다. 집에서 페인트할 때는 신문지 등을 깔아 놓고 작업한다. 페인트나 스프레이 작업을 할 때 더러워져도 되는 옷을 입고 작업하는 것이 좋다.

페인트할 때는 공간이 클 수록 좋다. 초벌만으로 칠해진 페인트는 농도가 낮고, 불균일 한 경우가 많다. 잘 말린 후 두세번 걸쳐 칠하는 것이 좋다. 그래서, 재료에 칠해진 페인트가 잘 말려지도록 바닥에 널어 놓고 작업하는 것이 좋다. 작업 공간이 부족하면, 선반 등에 페인트 된 재료를 널어 놓고 말리는 것이 좋다.
베란다에서 페인트 칠하기(그리 권장하고 싶지는 않다ㅎ 간이 커야 함)

냄새가 그리 몸에 좋지는 않으므로, 환기가 잘 되는 곳에서, 마스크, 장갑 등 보호 장구를 착용하고 작업하는 것이 좋다.

페인트 작업이 끝나면, 다음 작업을 위해, 사용했던 붓, 트레이 등을 물로 깨끗이하고, 주변을 잘 청소, 정리한다.

라이노 메쉬에서 솔리드 NURBS 곡면 변환 방법

3D 스튜디오(3DS), 3차원 포인트 클라우드 스캔 장치, Tinker CAD(팅커캐드)와 같은 도구에서 생성된 메쉬 모델 파일(OBJ, STL 등)을 라이노(rhino)에서 편집하려면 솔리드 NURBS 모델로 변환해야 하는 일이 생긴다.

이럴 경우, 몇몇 상용 애드인을 통해 해결할 수 있지만, 다음과 같은 라이노 기본 명령을 통해서도, 모델 변환을 할 수 있다.

메쉬 모델을 라이노로 임포트(import)한 후, 명령 실행 순서는 다음과 같다. 

1. Mesh > Mesh Repair > Fill Holes
2. Mesh > Mesh Repair > Unify Normals
3. Mesh > Mesh Boolean > Union
4. MeshtoNURBS

이제, 제대로 변환되었는 지 변환된 모델을 'What'명령어로 확인해 본다. 
아래는 이와 관련된 튜토리얼 동영상이다. 


레퍼런스

2017년 1월 17일 화요일

Spout과 프로젝션 맵핑

이 글에서는 간단히 Spout과 프로젝션 맵핑에 대한 이야기를 해 보겠습니다.

Spout은 윈도우즈 운영체계에서 OpenGL과 같은 3차원 렌더링 엔진을 통해 렌더링되는 그래픽을 다른 어플리케이션들과 공유하기 위해서 개발되었습니다. 그래서, 3차원 렌더링 엔진을 사용하는 어플리케이션의 화면을 가로채서, 자신이 개발한 프로그램 안에 보여줄 수 있지요. 참고로, 맥킨토시 운영체계에서는 Syphon을 사용합니다.

프로젝션 맵핑을 하다 보면, Processing 등에서 개발된 그래픽을 VPT와 같은 프로젝션 맵핑 도구에 렌더링하고 싶을 때가 있는 데, 이때 Spout 라이브러리를 사용하면 됩니다.


이와 관련해, 튜토리얼 및 관련 자료를 아래에 링크합니다. 따라하다 보면 Processing과 같은 그래픽 저작 도구에서 프로젝션 맵핑 툴로 그래픽 컨텐츠 소스를 오버레이할 수 있습니다.

VPT, Mad mapper 등을 이용한 프로젝션 맵핑 방법은 아래 튜토리얼에 잘 나와 있으니 참고하시길 바랍니다.

프로젝션 맵핑 튜토리얼




2017년 1월 12일 목요일

아마존 에코(Amazon Echo) 알렉사(Alexa) 기반 라즈베리파이 제어

이 글은 아마존 에코(Amazon Echo) 알렉사(Alexa) 기반 라즈베리파이 제어에 관한 이야기입니다. 최근 CES 2017에서도 알렉사가 인공지능 비서로써 스마트 홈, IoT, 무인 자동차 등 다양한 어플리케이션에 사용되었습니다. 오픈 소스를 기반으로 한 이런 어플리케이션은 앞으로도 더욱 많아 질 것이라 생각합니다.




이 글은 다음 레퍼런스를 참고하였습니다.


2017년 1월 1일 일요일

Javascript 기반 로봇 제어 플랫폼

Javascript는 인터넷 기반으로 동작되므로, 네트워크 상에서 센서와 액추에이터 제어와 관련된 메시지 교환이 많은 로봇 제어에 유리할 수 있다. Javascript는 사용이 쉽고 Node.js와 같은 훌륭한 라이브러리를 많이 지원하고 있다. 이런 이유로 Javascript기반 로봇제어 방식이 NodeBots와 같은 커뮤니티를 통해 점차 확산되고 있다. 이 글에서는 손쉽게 로봇을 컨트롤할 수 있는 Javascript 기반 오픈소스 플랫폼을 소개한다.

1. Johnny-Five 
Johnny-Five는 Javascipt 기반 로봇 및 IoT 플랫폼으로 Bocoup 그룹에서 2012년에 릴리즈된 오픈소스이다. 75명이상의 개발자가 이 프로젝트에 참여하고 있으며, 계속적인 기능 개선 및 확장이 이루어지고 있다.


참고로 Johnny-Five란 이름은 로봇 영화로 유명한 조니 5에서 따온것이다.

80년대 어린이의 우상 Johnny-Five 한장면ㅎ

로봇의 센서와 액추에이터를 추상화한 사용하기 쉬운 API를 제공한다. 다음은 Johnny-Five를 어떻게 사용하는 지 간단히 보여준다.


API는 대부분의 센서와 액추에이터를 지원하며, 예제와 사용법 설명이 매우 쉽게 잘 되어 있다. 아두이노, 라즈베리파이 등 수많은 오픈소스 보드를 지원한다.

다음은 Johnny-Five를 이용해 만든 워킹로봇이다.


2. Cylon.js
오픈 소스 드론, 로봇 등 다양한 플랫폼을 지원하는 Javascript기반 로봇 프레임웍이다.


Johnny-Five와 마찬가지로, 수많은 센서와 액추에이터를 추상화해, 사용법이 매우 간단하다. 다음은 간단한 blink 예제이다.

var Cylon = require("cylon");

// Initialize the robot
Cylon.robot({
  // Change the port to the correct port for your Arduino.
  connections: {
    arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }
  },

  devices: {
    led: { driver: 'led', pin: 13 }
  },

  work: function(my) {
    every((1).second(), function() {
      my.led.toggle();
    });
  }
}).start();

다음은 지원하는 플랫폼 일부이다.


API는 REST, socket.io, mqtt 프로토콜을 지원하고 있다. Cylon.js를 설치하고, 실행하면, 다음과 같이 로봇 플랫폼을 연결하고, 제어할 수 있는 데쉬보드를 지원한다.


다음은 Cylon.js 를 사용해 BB-8와 드론을 제어한 사례이다.


3. ROSnodejs
이름과 같이 ROSnodejs는 로봇 제어 오픈소스 미들웨어로 유명한 ROS(robot operating system)의 Javascript버전으로 ROS와 연결되어 사용되는 로봇 제어 클라이언트 라이브러리이다.

사실 ROS를 직접 사용해도 되지만, 설정 등 작업해야 할 것들이 많다. 이를 Javascript로 추상화하였다.

다음은 echo rostopic 메시지를 다른 로봇 ROS 노드에 전달하는 예제이다.

ros.types([ 'std_msgs/String' ], function(String) { var node = ros.node('talker'); node.topics([ { topic: 'publish_example', messageType: String } ], function(publishExample) { // Uses the ROS command line tool rostopic to echo messages published // over the 'publish_example' topic. var subscribeCommand = 'rostopic' + ' echo' + ' /publish_example'; var child = exec(subscribeCommand, function(error, stdout, stderr) { should.not.exist(error); }); var message = new String({ data: 'howdy' }); publishExample.publish(message); setTimeout(done, 1500); }); });

다음은 자바스크립트로 로봇 플랫폼인 PR2를 제어하는 예이다.