로봇팔으로 방구석에서 침착맨 싸인받기

침착맨 온라인 사인회 뒷북(with 로봇팔)

Posted by ductility on March 21, 2020 · 6 mins read

로봇팔으로 방구석에서 침착맨 싸인받기

로봇이 유명인의 싸인을 대신해 준다면..??
작년 여름방학쯤 이런 아이디어가 떠올랐다. 싸인하는 로봇을 만들어서 원격 사인회를 열면 어떨까? 처음에는 BTS 같은 세계적 인기스타의 사인을 활용해 원격 사인회를 열면 좋겠다고 생각했는데, 허락 없이 인기 스타의 싸인을 쓰는 건 부담되어서 그만두었다. 이후 어떤 유명인사의 사인을 받아볼지 고민했는데, 마침 한 유튜브 스타가 떠올랐다.

_config.yml

바로 BTS와 비슷한 인기를 누리면서도 유튜브 채널에 세계 최초 이말년 온라인 사인회 영상을 게시해 온라인 사인을 적극 권장하는 스트리머 침착맨! 로봇 팔 제작은 작년에 진작 해 놓았지만 이후 정신없이 바빠져서 싸인회는 구현하지 못했었는데, 올 초 전국에 전염병이 도는 바람에 시간이 나서 세계 최초 이말년 방구석 로봇 사인회를 준비해 보았다.


싸인을 도와줄 로봇팔

ESCARA

로봇팔은 Thingivers 검색으로 찾은 작품 DrawBot을 일부 수정해서 만들었다. 사용법이나 3D 프린팅을 할 부품들, 베어링이나 기타 필요한 소프트웨어에 대해서도 상세히 알려주어서 쉽게 따라 할 수 있었다. 다만 필요에 따라 stl파일을 조금 손봤다. 원래 설계에는 232mm짜리 타이밍 벨트를 사용했는데, 국내에서는 20mm 단위로 끊어서 판매하기 때문에 딱 맞는 부품을 구할 수가 없었다. 그래서 모터 고정대의 3D 모델을 수정해 모터와 조인트 사이의 거리를 8mm 늘였고 240mm짜리 타이밍 벨트를 사용했다. 펜 홀더 부분도 살짝 수정해서 펜이 종이에 딱 닿을 수 있게끔 하였다.

싸인용 파일 만들기

_config.yml

온라인 사인회 도중 한 장면을 캡처했다.

_config.yml

이미지 처리가 쉽도록 선을 얇게 만들어 준 뒤, LaserGRBL을 이용하여 g-code로 이미지를 변환해 주었다.

_config.yml

그런데 여기서 문제가 생겼다. 위 사진에서 오른쪽 형식의 g-code처럼, G 코드(또는 M 코드) 명령과 정확한 X, Y 좌푯값을 명시해 주어야 로봇이 알아먹는데 이 g-code는 두 줄 그림을 그려서 다소 지저분한 결과물이 나왔다. 왼쪽 형식의 g-code는 선의 중점을 연결해서 만든 것이어서 한 줄짜리 그림을 그릴 것인데 형식이 맞지 않아 로봇이 못 알아먹는 문제가 생겼다.
그래서 다음 python script를 제작하여 왼쪽 형식의 g-code를 적절한 형태로 바꿔 주었다.


g-code_changer.py

#sys1.py
import sys

args = sys.argv[1:]
file_input = args[0]

x = ''
y = ''

f_output = open("new_file.nc",'w')
f_input = open(file_input,'r')
while True:
    line = f_input.readline()    
    if not line: break
    if not line.startswith('M'):
        X_index = line.find('X')
        Y_index = line.find('Y')
        if not X_index == -1:
            x = ''
            X_index = X_index + 1
            while line[X_index].isdigit() or line[X_index] == '.':
                x = x + line[X_index]
                X_index = X_index + 1
        if not Y_index == -1:
            y = ''
            Y_index = Y_index + 1
            while line[Y_index].isdigit() or line[Y_index] == '.':
                y = y + line[Y_index]
                Y_index = Y_index + 1
        line = "G1 X{X} Y{Y}".format(X=x, Y=y)
    data = line + '\n'
    f_output.write(data)

f_input.close()
f_output.close()

g-code 파일을 한 줄씩 읽어, 지정한 형식에 맞게 변환시키는 코드이다.
g-code_changer.py와 변환할 파일(input_file.nc)를 같은 디렉터리에 두고 다음 명령어를 cmd나 쉘에서 실행시킨다.

$ python g-code_changer.py input_file.nc

그러면 적절한 형태의 g-code가 생성된다.
…고 생각했으나 아쉽게도 작동하지 않아서 두 줄로 그리는 왼쪽 g-code 파일을 사용했다.



로봇 사인회 개최

g-code 전송을 위한 파일이 준비되었다면, USB 케이블을 이용하여 로봇팔의 아두이노와 컴퓨터를 연결한다. 그리고 Pronterface이나 Gcode-CLI 등의 g-code 전송 프로그램을 이용하여 로봇팔에게 데이터를 전송해 주면 끝이다. 실제 사인회를 영상으로 기록했다. (이미지를 클릭하면 새 창에서 유튜브 영상을 볼 수 있다)

Video Label

영상을 자세히 보면 두꺼운 선이 같은 자리를 두 번 지나가는 것이 보인다. 그리고 이건 얇은 선을 이용하면 더 도드라진다.

_config.yml

그림을 그리는데 시간이 두 배로 더 걸리고 그림이 지저분해지기 때문에 아쉬운 부분이다.

생각보다 긴 시간이 걸렸지만 재미있는 작업이었다.
다음번에는 방구석에서 주호민 작가님의 로봇 사인을 받아 볼 생각이다. 내 자취방 문짝을 작가님들의 싸인으로 채울 생각을 하니 두근거린다.


Next Post