머신러닝 프로젝트, 똑똑한 왕자(SmartPrince) 만들기 2
프로젝트 과정 목차
1. 인공지능(AI)이란 무엇인가?
2. 전원 배터리모듈 개발과정 및 기능
3. 센서제어 모듈 개발과정 및 기능
4. 모터제어 모듈 개발과정 및 기능
5. 카메라 영상 움직임 추적 모듈 개발과정 및 기능
6. 음성처리 모듈 개발과정 및 기능
7. 병렬처리 모듈 개발과정 및 기능
8. 머신러닝 기능 개발과정 및 기능
똑똑한 왕자(SmartPrince) 소개
커널연구회에서 지능형로봇 만들기로 진행하는 SmartPrince(똑똑한 왕자) 시리즈는 커널연구회에서 제작한 9개의 모듈들에 머신러닝 알고리즘을 탑재하는 오픈플랫폼, 오픈소스 프로젝트이다. 각각의 모듈들은 독립된 형태로 동작할 수도 있고, 라즈베리파이 및 아두이노 호환 핀맵에 모듈들을 적층으로 쌓아서 한꺼번에 병렬로 동작시킬 수도 있다. 모듈에 있는 USB에 시리얼통신 명령어(AT Command)를 전송하여 모듈들을 제어한다.
PCB 보드 모듈들은 아래 블록도처럼 9개가 서로 연결된다. 전원(POWER), 스위칭(SWITCH), 무선통신(ESP32), 센서(SENSOR), 모터(MOTOR), 카메라(CAMERA), 사운드(VOICE), 메인(MAIN) 그리고 아두이노(ARDUINO) 모듈들이 각각 자기 역할을 수행하면서 내부 임베디드 데이터 통신 인터페이스(SPI, I2C, UART, GPIO, 인터럽트)들로 서로 연결된다.
SmartPrince 메인(MAIN) 모듈은 Cortex-A 프로세서가 탑재되어 있는 라즈베리파이3와 최근에 산업용으로 출시된 라즈베리파이 CM3 모듈을 사용하고, 전원(POWER), 센서(SENSOR), 모터(MOTOR) 모듈은 Cortex-M0 프로세서(STM32F0)를 탑재하여 장치들을 제어한다.
무선통신(ESP32) 모듈은 가격이 아주 저렴하면서도 여러 가지 I/O 핀들을 보유하고 있는 ESP32와 ESP8266 프로세서를 사용하거나 라즈베리파이에 있는 무선모듈을 사용하고, 카메라(CAMERA)와 사운드(VOICE)는 멀티미디어 데이터를 고속으로 처리해야 하므로 Cortex-M4 프로세서를 탑재한 STM32F4를 사용하여 영상과 사운드 데이터를 인코딩/디코딩 한다. 각각의 모듈들마다 USB 시리얼 포트가 있어서 이곳에 시리얼통신 명령어(AT Command)를 전송하여 모듈들의 동작을 쉽게 제어할 수 있다.
앞으로, 위의 모듈들을 사용하여 다음과 같은 자율주행 로봇을 만들고 구현하는 과정을 계속 공유해 나갈 예정이다.
똑똑한 왕자 자율주행 로봇에는 커널연구회에서 개발한 다음과 같은 CPU병렬처리모듈, 센서모듈, 모터제어모듈을 탑재할 예정이다.
똑똑한왕자 중요 모듈들
CPU병렬처리 모듈은 산업용으로 제작한 라즈베리파이 CM3 모듈을 확장슬롯에 장착하여 병렬로 확장해 나갈 수 있다. 센서모듈에는 자이로 기울기 센서, 나침반, 지자계 센서, 가속도, 온도 습도 센서들이 내장되어 있고 이들 센서에서 수집한 데이터를 사용하여 똑똑한 왕자 자율주행 로봇의 자세보정, 이동방향 제어등에 활용할 예정이다.
모터모듈은 DC모터 4개와 스테핑 모터 1개를 제어할 수 있고 이동 바퀴와 카메라 Pan/Tilt 제어 및 초음파 센서의 방향제어로 활용할 예정이다. 위의 모듈들은 모두 커널연구회에서 설계하여 제작했으며 앞으로 개발 내용들을 지속적으로 공유해 나갈 예정이다.
전원배터리 (SmartPower) 모듈
커널연구회에서 보드를 설계하여 제작한 SmartPower 모듈의 외형은 아래 사진과 같다. 이 보드는 라즈베리파이 40핀 I/O핀에 장착할 수 있고, 아두이노 헤더핀과도 호환된다. 외부에 12V 전원 어댑터 연결잭을 통하여 전원을 공급하고, 보드 상단에 장착되어 있는 배터리를 충전할 수 있다. 12V 외부 전원과 배터리를 모두 사용할 수 있고, 여기에 적층 형태로 장착되는 라즈베리파이, 아두이노, 무선통신모듈, 센서, 모터, 카메라, 사운드 모듈 등에 전원을 공급하고 On/Off 스위칭한다.
Cortex-M0(STM32F0) MCU가 탑재되어 있어서 배터리 충전상태, 전류 사용량, 전원 On/Off 스위칭 제어, 보드 표면 온도, RTC 날짜 및 시간 등을 시리얼통신 명령어로 모니터링하고 관리할 수 있다. 이 보드에 있는 마이크로 USB를 PC에 연결하고 PC에서 시리얼통신 터미널을 실행하여 AT 명령어들을 사용하여 보드의 데이터를 조회하고 변경 및 관리한다. 좀더 자세한 내용들은 아래부터 자세히 설명된다.
전원배터리 제원 및 기능
먼저, SmartPower 모듈의 하드웨어 제원 및 기능에 대해서 알아보도록 하자. 아래 사진은 이 모듈의 외형을 보여주는 것이다.
전원 배터리 (SmartPower) 제원 및 기능 요약
• 보드 크기는 가로 75mm, 세로 85mm(라즈베리파이 및 아두이노 헤더핀 호환)
• Cortex-M0(STM32F0) MCU 내장
• 12V 외부 어댑터 전원공급(전류는 2A 이상 권장)
• 배터리(3.7V 리튬폴리머 2개 직렬연결) 충전기능
• 배터리 용량은 3A(1,500mA 2개 직렬) 또는 5A(2,500mA 2개 직렬)
• 배터리 충전 상태 및 전류사용량 모니터링 가능
• 보드 표면 온도 모니터링
• 라즈베리파이, 아두이노, 무선모듈, 센서, 모터, 카메라, 사운드 모듈에 전원공급 및 각각의 모듈별 전원을 On/Off 스위칭(효율적 전원관리)
• 마이크로 USB포트에 PC의 시리얼통신 터미널을 연결하여 AT 명령어로 동작 제어
아래부터는 이 SmartPower 모듈에 있는 각각의 부품별 기능을 설명한다.
아래 사진은 SmartPower 모듈에 대용량 배터리 5A(2,500mA 2개 직렬)를 연결한 모습이다.
아래 사진은 SmartPower 모듈에 라즈베리파이를 연결한 모습이다.
윈도우 PC에 연결방법
아래 사진처럼 SmartPower 모듈에 있는 마이크로 USB 포트를 윈도우가 설치되어 있는 PC에 연결한다. USB 연결선을 PC에 장착만 하면 USB로부터 5V 전원이 공급되므로 SmartPower 모듈 하나는 충분히 동작된다. 하지만, 모듈을 여러 개 연결한 경우에는 USB 단독으로 공급되는 전류(500mA)가 약하므로 외부전원이나 배터리 전원 스위치를 On 해 주어야 한다.
커널연구회는 SmartPower 모듈에 USB 시리얼(UART) 장치로 Silicon Labs사의 CP2102 IC를 사용했다. 이 장치는 PC에 기본적으로 드라이버가 설치되어 있으므로 별도로 드라이버를 설치하지 않아도 자동으로 인식된다.
PC의 장치관리자에서 USB 시리얼(UART) 통신 장치의 포트 번호를 확인한다. 아래 그림에서는 COM4 포트이다(포트 번호는 PC마다 달라질 수 있다).
PC에서 시리얼 터미널 프로그램을 실행한다. 윈도우 시리얼 터미널이나 Putty, SecureCRT 등 사용하기 편한 시리얼 터미널 프로그램을 실행하면 된다. 실행한 시리얼 터미널 프로그램의 시리얼 통신 설정(옵션) 메뉴에서 시리얼 옵션들을 다음과 같이 설정한다.
시리얼 Baud rate는 115200, Data bits는 8, Parity는 None, Stop bits는 1로 설정하고, Flow control는 모두 체크하지 않는다.
위와 같이 시리얼통신 옵션들을 설정한 후, SmartPower 보드의 리셋 버튼을 한번 눌러주면 시리얼 터미널 화면에 아래와 같은 메시지들이 출력되면서 동작을 시작한다.
시리얼 터미널에 키보드로부터 AT? 라고 명령을 입력하면 다음과 같은 AT 명령어 사용법(도움말)이 출력된다. 이 명령어들의 자세한 사용법은 다음절부터 자세히 설명한다.
AT 명령어 도움말
이 명령어들의 자세한 사용법은 커널연구회의 아래 웹페이지를 참고해 주기 바란다.
https://www.kernel.bz/blogPost/B01_SmartPower
리눅스 PC에 연결방법
SmartPower 모듈에 있는 마이크로 USB 포트를 리눅스가 설치되어 있는 PC에 연결한다. USB연결선을 PC에 장착만 하면 USB로부터 5V 전원이 공급되므로 SmartPower 모듈 하나는 충분히 동작된다. 하지만, 모듈을 여러 개 연결한 경우에는 USB 단독으로 공급되는 전류(500mA)가 약하므로 외부전원이나 배터리 전원 스위치를 On 해 주어야 한다.
위와 같이 연결했다면 리눅스 터미널에서 다음과 같은 리눅스 명령어를 입력하여 SmartPower 모듈의 USB 시리얼통신 장치가 연결되었는지 확인한다(별도로 설정하지 않아도 자동으로 연결된다).
아래 명령어로 SmartPower 모듈의 USB 시리얼 장치가 /dev/ttyUSB0 노드에 연결되어 있음을 확인할 수 있다.
이제, 리눅스 명령창에서 시리얼 터미널 프로그램을 실행한다. 리눅스에서는 minicom을 시리얼 터미널 프로그램으로 많이 사용한다. 이 프로그램이 설치되어 있지 않다면, 다음과 같이 설치한다.
이제 minicom을 다음과 같이 실행한다. (루트 권한으로 실행)
실행 메시지가 다음과 같이 화면에 출력된다.
시리얼통신 포트가 위와 같이 /dev/ttyUSB0로 설정되어 있지 않고, 통신 속도(baud rate)도 115200으로 설정되어 있지 않다면, 키보드에서 Ctrl-A를 누른후 O 키를 눌러서 다음과 같이 옵션 설정 메뉴로 진입한다.
화살표를 아래로 눌러서 세번째 메뉴인 Serial port setup을 선택한후 엔터하면 아래와 같이 설정 옵션 메뉴가 나타난다.
화면에 나타난 옵션들을 위와 같이 맞추어 준다. 그런 다음 다시 상위 메뉴로 돌아가서 Save Setup as dfl 메뉴를 엔터하여 설정내용을 저장하고 Exit하여 빠져 나온다.
위와 같이 시리얼통신 옵션들을 설정한 후, SmartPower 보드의 리셋 버튼을 한번 눌러주면 minicom 시리얼 터미널 화면에 아래와 같은 메시지들이 출력되면서 동작을 시작한다.
시리얼 터미널에 키보드로부터 AT라고 명령을 입력하면 다음과 같은 AT 명령어 도움말이 출력된다. AT 시리얼 명령어들의 자세한 사용법은 커널연구회의 아래 웹페이지를 참고해 주기 바란다. ES
https://www.kernel.bz/blogPost/B01_SmartPower
※ 이상, 개발 과정에서의 문의 사항은 필자에게 이메일(
rgbi3307@nate.com) 주기 바랍니다.
<저작권자©스마트앤컴퍼니. 무단전재-재배포금지>