...

제어기

제어기
제어기는 로봇의 두뇌 역할을 하는 장치로써 로보티즈의 다이나믹셀을 구동하는것은 물론 다양한 센서와 엑추에이터를 연결할 수 있다. 로봇 개발자는 제어기에 다양한 프로그래밍 방법을 통해서 원하는 형태의 로봇을 제어 할 수 있게 된다.
임베디드 시스템
위키백과(https://ko.wikipedia.org)에 정의된 임베디드 시스템은 다음과 같이 제어가 필요한 시스템에 내장되는 특수 목적의 컴퓨터 시스템을 의미합니다.
임베디드 시스템(영어: embedded system, 내장형 시스템)은 기계나 기타 제어가 필요한 시스템에 대해, 제어를 위한 특정 기능을 수행하는 컴퓨터 시스템으로 장치 내에 존재하는 전자 시스템이다. 즉, 임베디드 시스템은 전체 장치의 일부분으로 구성되며 제어가 필요한 시스템을 위한 두뇌 역할을 하는 특정 목적의 컴퓨터 시스템이다.

이러한 임베디드 시스템은 우리 주변에서 흔히 볼 수 있는데, 대표적으로 휴대폰, 내비게이션, 냉장고, 세탁기, TV와 같은 가전제품이나 정보화 기기를 들 수 있습니다. 냉장고, 세탁기, TV에 붙어 있는 LCD 장치와 버튼을 이용하여 냉장고 기능 제어와 같은 특정한 기능을 수행하게 됩니다. 임베디드 시스템의 가장 큰 특징은 특정한 작업만을 수행하도록 설계되었기 때문에 크기를 줄이고 가격을 최소화하면서도 성능은 극대화 시킬 수 있고, 임베디드 시스템은 작게는 휴대용기기인 전자시계, mp3 플레이어에서부터 크게는 냉장고, 로봇의 제어부, 자동차 제어 시스템에 이르기까지 넓은 범위에 사용되는 개념입니다.
임베디드 보드
임베디드 시스템에 내장된 컴퓨터 시스템을 의미 하며, 일반적으로 다른 장치들을 제어하기 위해 사용되기때문에 제어기라고 부릅니다. 임베디드 보드에는 임베디드에 내장된 다양한 장치들을 제어하기 위한 마이크로 컨트롤러(Microcontroller)가 내장되어 있고, 프로그래밍을 통해서 연결된 장치들을 제어합니다.
마이크로 컨트롤러 (Microcontroller)
마이크로컨트롤러(Microcontroller) 또는 MCU(Micro Controller Unit)는 마이크로프로세서와 입출력 모듈을 하나의 칩으로 만들어진 SoC(System On Chip)로 정해진 기능을 수행하는 일종의 작은 컴퓨터를 의미 합니다.

MCU 내부에는 CPU 코어, 메모리 그리고 다양한 주변장치들을 가지고 있으며 프로그램 코드를 영구적으로 저장하기 위한 플래쉬(FLASH) 메모리를 내장하고 이외에도 통신을 위한 장치 및 다양한 제어를 위한 하드웨어가 내장되어 있습니다.

대표적인 MCU 제조사인 ST사의 STM32F 시리즈의 내부 블럭도를 보면 내장된 CPU 코와 연결된 메모리 그리고 다양한 주변장치들들이 하나의 칩에 내장되어 있는것을 볼수 있습니다.

MCU는 임베디드 애플리케이션을 위해 디자인되었으며 임베디드 시스템에 널리 사용됩니다. 개인용 컴퓨터(PC)가 다양한 요구에 따라 동작하는 일반적인 일에 사용된다면, MCU는 기능을 설정하고 정해진 일을 수행하도록 프로그래밍되어 장치 등에 장착되어 동작합니다. 따라서 일반적으로 PC에 비해 성능도 낮고 적은 메모리를 사용해야 하기때문에 많은 제약이 있는 환경에서 프로그래밍을 해야 합니다.
ARM (Advanced RISC Machine)
ARM사는 RISC방식의 Processor를 설계하는 회사로, 영국에 기반을 두고 있습니다. ARM사는 직접 칩을 제작하지는 않고 칩안에 내장할 수 있는 Processor 구조를 설계하고 칩 제조사에 라이센스를 하여 MCU나 프로세서를 제작할 수 있도록 합니다. 현재 임베디드 시스템에 사용되는 대부분에 ARM사에서 설계한 Processor 코어가 사용되어 있으며, 소형의 MCU 부터 휴대폰등에 들어가는 고성능 프로세서까지 다양한 분야에 사용되고 있습니다.

ARM 프로세서는 현재 성능과 용도에 따라 3가지로 분류됩니다. ARM의 프로세서는 Cortex라는 프로세서 이름에 성능과 용도에 따라 MCU급은 Cortex-M시리즈, 실시간제어용으로 Cortex-R시리즈 마지막으로 고성능 프로세서로 Cortex-A시리즈가 있습니다. 각 시리즈안에서도 성능에 따라 좀더 세분화 되어 분류되어 있어서 용도에 맞는 프로세서를 선택하여 사용 할 수 있습니다.
Cortex-M 시리즈
소형의 임베디드 시스템에 사용할 수 있는 MCU급의 Processor 코어로 Cortex-M 시리즈가 있으며, Cortex-M0/3/4/7 순으로 고성능 프로세서입니다. 가장 많이 사용되는 코어는 Cortex-M3로 고성능이면서 저전력이고 가격도 기존의 8bit 프로세서와 유사한 수준입니다. 만약 좀 더 고성능이 필요하다면 Cortex-M4/7이 적당하고 가장 큰 특징은 실수연산(Float Point)을 할수 있는 하드웨어를 내장해서 알고리즘 계산시 실수연산의 속도가 빠른 장점이 있습니다.
오픈소스 제어기
오픈소스 제어기는 회로도와 소스코드가 공개되어 누구나 쉽게 사용 가능하고 필요하면 수정하여 사용할 수 있는 제어기 입니다. 가장 대표적인 오픈소스 제어기인 아두이노에 대해서 알아보도록 하겠습니다.

ARDUINO UNO : 8비트 프로세서인 AVR 프로세서를 사용한 보드로 가장 일반적으로 사용되는 제어기 입니다. Arduino IDE라는 통합 개발 환경을 제공함으로써 기존에는 프로그래밍하기 위한 복잡한 절차 없이 간단하게 개발 할 수 있는 환경을 제공하고, 하드웨어 제어를 위한 고수준의 API들을 제공함으로써 어린 학생부터 취미로 사용하는 사람까지 쉽게 사용할 수 있는 특징이 있습니다.
ARDUINO IDE : ARDUINO 제어기에 소스코드를 작성하고 빌드한다음 다운로드까지 할 수 있는 통합 개발 환경입니다. ARDUINO IDE만 설치함으로써 바로 개발이 가능하고, 개발시 필요한 시리얼 통신 터미널이나 그래프를 그려주는 기능이 내장되어 있어 쉽게 사용할 수 있습니다. ARDUINO IDE는 전문 개발자 보다는 하드웨어나 프로그래밍 지식이 적은 사람도 쉽게 하드웨어를 제어할수 있도록 해줍니다. 쉬운 개발환경과 하드웨어 제어 API를 제공함으로써 많은 사람들이 사용하게 되고, 이로 인해 많은 예제들과 라이브러리들이 계속 축적되어 점점 더 사용하기 쉬운 환경이 되어 가고 있습니다.
로보티즈 제어기
OpenCM9.04 (Open-source Controller Module) : 로보티즈의 OpenCM9.04 제어기는 회로도와 소스코드가 공개가 되어 있으며, ARM Cortex-M3 기반의 고성능 제어기 입니다. 소형이면서 로보티즈의 다양한 센서와 액추에이터들을 연결할 수 있는 인터페이스를 가지고 있습니다.
다이나믹셀 전라인업 제어 : OpenCM9.04 제어기에 RS485확장보드를 연결하면 다이나믹셀의 전라인업 모델을 제어가 가능하게 됩니다.
간편하고 다양한 인터페이스 : 별도의 외부 다운로더없이 스마트폰용 USB Cable로 다운로드가 가능하고 GP I/O를 이용하여 다양한 입출력 장치 연결이 가능합니다.
편리한 개발환경 : ROBOTIS IDE를 통해서 ARDUINO 제어기를 사용하듯이 쉽게 OpenCM9.04를 프로그래밍 할 수 있습니다.
OpenCR (Open-source Controller module for ROS)
로보티즈의 OpenCR은 Open-source Control Module for ROS의 약자로 ROS를 지원하는 임베디드 보드이며 TurtleBot3에서 메인 제어기로 사용됩니다. 회로/펌웨어/거버데이터와 같은 하드웨어 정보와 TurtleBot3를 위해 구현된 OpenCR용 소스코드도 공개하여 사용자가 직접 수정하고나 재배포를 할 수도 있습니다.
메인 MCU로는 ST사의 STM32F746를 사용하고 있으며 Cortex-M7 코어를 내장하고 플로팅 포인트 연산을 하드웨어적으로 지원하여 고성능이 필요한 기능 구현에 적합합니다.
고성능 : ST사의 STM32F746이 사용된 OpenCR은 ARM사의 마이크로컨트롤러에서는 최상위인 Cortex-M7 코어를 사용하여 최대 216Mhz로 구동되는 고성능의 마이크로컨트롤러입니다. 고속의 연산이 필요한 알고리즘이나 다양한 주변장치를 활용하여 많은 데이터를 처리하는 작업에도 활용 할 수 있습니다.

아두이노 지원 : OpenCR의 기본 개발환경은 아두이노 IDE를 사용함으로써 임베디드 개발환경에 익숙하지않은 사람도 쉽게 사용할 수 있습니다. 아두이노 우노의 핀 헤더와 호환되는 인터페이스를 지원함으로써 기존의 아두이노 개발환경에서 만들어진 많은 라이브러리 및 소스코드와 함께 다양한 쉴드 모듈도 대부분 사용이 가능합니다. 아두이노 IDE의 보드매니저를 통해서 OpenCR보드가 추가되고 관리되기 때문에 보드 펌웨어의 업데이트 발생시 쉽게 대응 가능합니다.

다양한 인터페이스 : 로보티즈사의 액추에터를 위한 다이나믹셀 인터페이스는 TTL과 RS485를 모두 지원함으로써 로보티즈의 대부분의 모델을 사용 할 수 있습니다. 이외에도 UART/CAN통신 인터페이스를 지원하고 추가적인 GPIO를 가지고 있습니다. 보드 디버깅을 위해 JTAG 포트를 기본으로 지원함으로써 전문개발자를 위한 STLink나 JLink와 같은 JTAG장비를 이용하여 펌웨어를 개발하고 디버깅하는것도 가능합니다.

전원 출력 : 입력 전원은 7V~24V일때 12V / 5V / 3.3V 출력을 지원하고 있다. 5V/4A의 높은 출력을 지원하기 때문에 라즈베리파이와 같은 SBC의 전원으로도 사용가능합니다.