로봇에 외장 기기를 부착할 경우 USB 시리얼포트 디바이스를 많이 사용한다. 요즘 나온 메인보드엔 시리얼포트가 없으니 당여한 이야기인데, USB 통신의 특성상 latency timer 값이 16ms로 기본으로 설정되어 있어, 빠른 응답 특성을 요구할때엔 속도 저하의 이유가 된다.
태생이 전자 공돌이라, 소프트웨어까진 어떻게 해본다 쳐도, 기구설계는 완전 다른 이야기인듯 하다. 물론 요즘에야 개발 도구들이 잘 되어 있어 뚝딱뚝딱 만들어 볼수 있다곤 하지만, 그래도 기본적인 사항은 알아야 이해를 하고 만들어볼 수 있는 듯.
3D 프린터를 좀더 알차게 사용해보고 싶은 마음에, 서점 간 김에 그래도 좀 예제가 많아보이는 책을 구입했다. 기초적인 요소들에 대한 설명과 각종 수치들이 있고, 한국에선 요런거 사용함 등등의 내용이 보인다. 아주 자세히 보진 못하겠지만, 간단한 기구 설계할 때 유용하게 사용할 수 있을 듯 하다.
한달 전 쯤? 아들 녀석이 방과후 학교에서 소라게 한마리를 가지고 왔습니다. 조그만 플라스틱 케이스와 젤리처럼 생긴 먹이 하나와 같이요. 사실 며칠 지나지 않아 죽거나 할 줄 알았는데 의외로? 한달이 지났는데도 잘 지내고, 밤이 되면 부스럭부스럭 조그만 케이스를 탈출하고자 노력하더군요. ㅠㅠ
인터넷을 검색해보니 소라게의 수명이 엄청 길더라고요. 자연에서 사는 녀석들은 몇십년을 산다고도 하고… 암튼 이대로는 안되겠다 싶어 인터넷을 검색해보고, 다이소에서 적당한 집 (큰 플라스틱 케이스)을 사오고, 코코칩이라 불리는 바닥재, 먹이용 젤리를 주문했습니다.
두텁게 코코칩을 깔아주고, 소라게를 새로운 집에 옮겨주고 젤리를 하나 까서 같이 놓아주었습니다.
원래 소라게의 습성이 어두운 밤에 주로 움직이고, 저런 코코칩 같은 바닥재를 깔아주면 파고 들어가서 산다고 하네요. 지금도 계속 바닥으로 파고들고, 가끔씩 먹이 있는 쪽으로 움직여 젤리를 파먹고 하고 있습니다. 새로운 집을 맘에 들어 하는 것 같습니다.
바닥재는 3주 정도에 한번씩 갈아주고, 그 동안은 너무 건조해지지 않도록 스프레이로 물을 조금씩 뿌려주면 되고, 젤리도 갈아주면 된다고 합니다. 혼자는 외로워할테니 한마리 더 넣어줘도 좋을듯 한데… 저 녀석이 암컷인지 숫컷인지 알 방법이 없네요.?? ^^
위와 같은 화면이 나오는데, 왼쪽은 블럭을 생성하기 위한 블럭 코딩 영역, 오른쪽 상단엔 생성된 블럭 모양을 실시간으로 확인이 가능하고, 오른쪽 중앙엔 추후 코드에 삽입하기 위한 JSON 코드, 오른쪽 하단엔 블럭을 실제 코드로 생성하기 위한 generator 코드가 생성된다.
일단 흐름을 보기 위해 아주 간단한 블럭을 생성해보도록 한다. 사용자의 문자열 입력을 받아 console에 출력하는 블럭을 만들어 보록 한다. 먼저 블럭의 name을 수정한다. 여기선 console_print로 한다.
다음으로 이 블럭은 다른 블럭들과 상하 연결하여 사용 가능해야 하므로, connection을 top+bottom connections로 변경한다. 이렇게 되면 미리보기 창의 블럭 모양이 변경됨을 볼 수 있다.
다음으로 사용자의 문자열을 입력 받아야 한다. 왼쪽 툴박스 창에서 Input 카테고리내에 value input 블럭을 inputs에 추가한다. 이 입력을 받아서 내부에서 처리하기 위한 변수명은 value_input 옆에 있는 NAME이다. 이를 필요에 따라 적절하게 수정한다.
이제 블럭에 기능을 설명하기 위한 텍스트 블럭을 추가한다. (Field 카테고리 Text 블럭)
입력은 Text만 받아야 하므로, 입력 type에 String 블럭을 추가한다.
마지막으로 블럭의 색상과, 이 블럭을 사용하는데 필요한 tooltip, help url 등을 입력한다.
Scratch 3.0은 외부기기와 연동하기 위해서 Scratch Link 앱을 이용해야 한다. (Scratch 내부에 구현할 수도 있을 것 같은데, 이렇게 되면 다른 운영체제에서 호환이 안될테니 아마도 이렇게 만들어 놓은듯 하다) 내부를 들여다보면 Scratch Link에서 WebSocket 서버를 제공하고, BLE, BT로 구분하여 접속할 수 있다. 통신은 JSONRPC를 이용한다. BLE, BT 모두 프로토콜은 동일하다.
따라서 Bluetooth 시리얼, BLE 등을 이용한 기기들은 기존 프로토콜을 이용하여 접속 및 연동이 가능하다. OROCA-Edubot도 이와 같은 과정을 통해 연동에 성공하였다. 이제 좀더 나아가 시리얼포트를 이용할 경우 (예를 들어 Arduino 보드나 사용자가 개발한 보드들)엔 어떻게 해야 할까?
고민해본 결과 가장 클리어한 방법은 Scratch Link를 확장하여 시리얼 통신을 지원하게끔 하면 될 것 같다. 마침 기존까진 실행파일로만 제공되었던 Scratch Link가 이젠 소스까지 제공되고 있다. 개발 지원 운영체제는 macOS와 윈도우이다.
위 과정이 완료되면 out 디렉토리에 scratch-device-manager.pem, scratch-device-manager.pfx 파일이 생성된다.
현재 내가 사용하고 있는 개발환경은 macOS 이므로, macOS 폴더로 이동하여 빌드를 시작한다. Xcode, pngcrush를 미리 설치되어 있어야 한다. Xcode는 앱스토어에서, pngcrush는 homebrew를 이용하면 쉽게 설치할 수 있다.
$ cd ..
$ cd macOS
$ make
빌드에 필요한 패키지들이 자동으로 설치되고, 에러가 없이 완료되면 dist 디렉토리가 생성되고 Scratch Link 앱이 생성되어 있음을 볼 수 있다.
이제 이 앱을 실행해보면, 기존과 같이 메뉴바에 Scratch Link가 위치한다.
Scratch 3.0를 실행하고, BLE와 BT 등 기존과 동일하게 동작하는지 확인한다. 지난번 개발환경 구축 포스팅에서 device-manager.scratch.mit.edu를 hosts 파일을 이용해 127.0.0.1로 강제 변경하였는데, 이제 Scratch Link를 직접 사용할 수 있으므로 localhost로 변경하여 사용해도 무방하다.
따라서, hosts 파일을 변경하는 작업을 하지 않고, scratch-vm 내에서 다음의 파일에 있는 웹소켓 주소를 localhost로 변경한다.
얼마전 Anki社가 문을 닫았다. Cozi, Vector 등 귀엽고 기능 많은 로봇들을 개발하였고, 언뜻 보기엔 많이 팔리기도 하였는데… 왜 그랬을까… 뭐 암튼! 항상 구매해보고 싶단 생각은 갖고 있었는데, 문을 닫았다니 더 구매해보고 싶어서 뉴스가 뜬 날 바로 주문했다. 가격은 대충 30만원 정도? 해외주문이라 시간이 좀 걸리는 듯 하더니 드디어 도착.
이 로봇은 저 귀여운 눈이 포인트! 로봇 전체 색상은 아주 짙은 회색 (검은색이라고 해야 되나?)이 기본이고, 군데군데 금색 포인트, LED 등이 배치되어 있다.
상자를 열어보면 알차게 로봇과 큐브가 넣어져 있다. 역시 제품은 꺼내자마자 켜고 동작되어야 제맛. 이것저것 많이 설정하거나 하면 사용자는 힘들어진다. 전원키고 스맛폰 연결해서 계정 연동하면 끝.
한글이 지원되지는 않고 영어로 명령을 내리거나 의사소통해야 된다. Wakeup 단어는 “Hey! Vector.”이다. 로봇이 뭔가 처리를 하는 동안엔 알아듣지 못하며, 중간중간 idle 상태에선 칼 같이 알아듣는다.
큐브를 이용해 이것저것 명령을 내릴수도 있고, 그냥 냅두면 알아서 갖고 논다. 몇시간 정도 갖고 놀아본 결과, 이 제품의 컨셉은 애완동물인듯 하다. 가만히 냅둬도 이곳저곳 돌아다니고, 충전을 위한 도킹 스테이션을 자기의 집으로 생각하는…
거리센서와 카메라를 이용해 어느 정도 SLAM 기능을 수행하는 듯하다. “Go to charging station!”이라고 명령을 내리면 스스로 주변에 있는 도킹 스테이션을 찾아 충전을 시작한다.
로봇을 제어하기 위한 API도 상당히 충실하게 지원한다. python3로 프로그래밍 가능하니 쉬울듯. 잠깐 생각해본 바로는 ROS 연동도 쉽게 될것 같다. 실제로 여러가지 프로젝트들이 Vector를 이용해서 진행되고 있는 듯.
영상처리에 많이 사용되는 OpenCV를 Jetson Nano에서도 사용 가능하다. 빌드 과정은 PC에서와 동일하나 플랫폼의 특성 상 몇가지 다른 부분이 있다. 기본으로 설치되어 있는 패키지를 사용해도 되지만, CUDA를 활용하기 위해선 빌드 과정을 통해 설치하여야 한다.
Jetson Nano엔 무선랜 기능이 포함되어 있지 않다. 라즈베리파이도 3b+ 모델에서는 무선랜 기능이 포함되어 있는데, 뭐 그냥 붙여줬으면 좋으련만… USB 동글 등을 이용해서 사용할수 있겠지만, Jetson Nano에는 pci-e 확장포트가 존재한다. 따라서 이 포트에 m.2 규격의 무선랜 모듈을 장착하여 사용할 수 있다.
주변에 쉽게 구할 수 있고, 나름 리눅스 친화적인 무선랜 모듈은 인텔 제품이며 여러가지 버전이 존재한다. 현재 Jetson Nano의 커널 버전은 4.9 (L4T) 버전이므로, 현재 구할 수 있는 무선랜 모듈 중 가장 나은 선택은 Intel ac8265이다. Intel ac9560이 좀더 최신 칩셋에 나은 기능을 갖고 있지만, 드라이버가 커널 4.14 이상에서만 동작하므로 현재로선 사용이 불가능하다.