코딩 가이드
이 문서는 로보메이션에서 개발한 '로봇 동작 스트리밍 서비스를 위한 실행 엔진 및 통합 저작환경' 중 하나인 로봇 코딩 교육용 플랫폼, RobomationLAB(로보메이션 랩)에 대해 설명합니다.
다음과 같은 순서로 자세한 설명을 제공합니다:
- RobomationLAB의 주요 특징
- RobomationLAB 로봇 프로그래밍 방식
- RobomationLAB 로봇 코딩 기본 문법 체계
목차
RobomationLAB 로봇 코딩 교육 플랫폼
1-1) 로봇 코딩 프로그램
1-2) 블록 ↔ 파이썬 실시간 양방향 변환
1-3) 코딩 프로그램 주요 특징
1-4) 실시간 로봇 제어 방식RobomationLAB 로봇 프로그래밍 방식
2-1) 순차 실행과 병렬 실행
2-2) setup 함수
2-3) loop 함수RobomationLAB 로봇 코딩 기본 문법 체계
3-1) robomation 패키지 가져오기
3-2) 로봇 인스턴스 생성
3-3) 로봇 제어 메서드
3-4) 센서 및 상태 읽기
3-5) 이벤트 감지
3-6) 동작 완료 대기 (wait)
3-7) 유틸리티 함수 (Utils)
RobomationLAB 로봇 코딩 교육 플랫폼
RobomationLAB은 AI 로보틱스 SW 교육에 최적화된 플랫폼으로,
초등/중학생 대상 로봇 코딩 교육을 위한 Chrome 웹 브라우저 기반의 통합 저작환경을 제공합니다.
RobomationLAB은 블록 코딩, 스크립트 코딩 등 다양한 방식의 로봇 코딩 교육용 프로그램들을 제공합니다.
코딩의 이론을 학습할 뿐만 아니라 로보메이션의 제품들을 활용해 실제로 로봇을 움직이고 제어하면서,
코딩과 로봇을 동시에 학습할 수 있는 기회를 제공합니다.
로봇 코딩 프로그램
Block Composer (블록 컴포저)
Block Composer는 블록 코딩을 통해 자사 로봇들을 쉽고 빠르게 제어하며, 로봇 제어의 기초를 학습할 수 있는 도구입니다.
피지컬 컴퓨징에 최적화된 저작 환경
블록 Drag&Drop 방식으로 초보자도 쉽게 코딩 가능
기본 개념부터 문법 오류 없는 학습 환경 제공
Python 스크립트 코드로 자동 변환
로봇 별로 미리 정해진 기능을 가진 블록 모음과 다양한 체험 예제 제공
코드 실행을 통해 실시간 결과 확인 가능
블록 조합으로 문제 해결 능력 및 창의력 향상
AI 기반 스크립트 코드 분석을 통해 최적화된 피드백 제공
Script Composer (스크립트 컴포저)
Script Composer는 파이썬 코딩을 통해 자사 로봇들을 쉽고 빠르게 제어하며, 파이썬 문법 및 로봇 코딩의 기초를 학습할 수 있는 도구입니다.
Python 에디터 제공
언어 별 코드 자동 완성 및 코드 삽입 기능 제공
로봇 별 다양한 체험 예제 코드 제공
코드 실행을 통해 실시간 결과 확인 가능
AI 기반 스크립트 코드 분석을 통해 최적화된 피드백 제공
코딩 프로그램 주요 특징
RobomationLAB에서 제공하는 로봇 코딩 프로그램의 주요 특징은 다음과 같습니다.
- 크롬 웹 브라우저 기반으로, OS(운영체제)의 제약을 받지 않음
- Web Serial 통신 기반으로, USB 동글을 통해 로봇 하드웨어를 직접 제어
- 멀티 로봇 동시 제어 지원 - 로봇의 종류, 수 제한 없음
- 파일 저장 시 결과물은 JSON 텍스트 파일로 변환하여 저장
실시간 로봇 제어 방식
RobomationLAB에서 제공하는 로봇 코딩 프로그램에서는 다음과 같은 과정을 통해 실시간으로 로봇을 제어합니다.
- 블록코딩 또는 스크립트 코딩을 통해, 로봇을 제어하기 위한 Effector, Command 객체의 값을 설정하거나 로봇의 Sensor 값 및 Event 발생을 활용하는 코드를 작성합니다.
- 코드를 실행합니다.
- Web Serial 통신을 통해 로봇으로부터 Sensor 및 Event 데이터를 담은 패킷을 받아, 로봇 Device 객체에 반영합니다.
- 실시간으로 코드를 해석하여, Effector, Command 객체에 데이터를 덮어쓰거나, Sensor, Event 객체의 값을 읽어옵니다.
- 로봇 Device 객체의 데이터를 반영한 패킷을 생성한 뒤, Web Serial 통신을 통해 로봇에 전송하여 실제로 로봇이 동작하는지 확인합니다.
- 코드가 실행되는 동안, 3 ~ 5 의 과정을 약 10 ~ 20ms 마다 반복 수행합니다.
블록 ↔ 파이썬 실시간 양방향 변환
RobomationLAB은 블록 코딩 에디터와 파이썬 코딩 에디터를 함께 제공하며, 두 에디터는 실시간으로 양방향 동기화됩니다.
- 블록 코딩 에디터에서 블록을 추가·수정·삭제하면, 그 변경사항이 실시간으로 파이썬 코드에 반영됩니다.
- 반대로 파이썬 코딩 에디터에서 코드를 수정하면, 그 변경사항이 실시간으로 블록에 반영됩니다.
이처럼 블록과 파이썬 코드가 1대1로 대응되어 양방향으로 변환되므로,
블록으로 전체 구조를 빠르게 만든 뒤 파이썬으로 세부 코드를 다듬거나, 블록과 비교하며 파이썬 문법을 학습하는 등
블록 코딩과 스크립트 코딩을 넘나드는 유기적인 코딩이 가능합니다.
단, 파이썬 → 블록 변환은 블록으로 표현할 수 있는 코드에 한해 이루어집니다.
(잘못된 문법이거나 블록으로 변환할 수 없는 코드인 경우 전환이 되지 않을 수 있습니다.
자세한 내용은 코딩 규칙 문서를 참고하세요.)
RobomationLAB 로봇 프로그래밍 방식
순차 실행과 병렬 실행
로봇을 프로그래밍하는 방식에는, 순차 실행 방식과 병렬 실행 방식이 있습니다.
순차 실행은, 한 동작이 마무리된 뒤에 다음 동작을 수행하는 방식으로, 단순한 행동을 코딩하는 데에 적합합니다.
예를 들어, 로봇을 앞으로 이동한 이후에 멈춰서 LED를 켜고 싶다면, 각 동작에 해당하는 코드를 순서대로 배치하여 시간순으로 실행할 수 있도록 순차 실행 방식이 가능해야 합니다.
병렬 실행은, 여러 동작을 동시에 수행하는 방식으로, 보다 복잡하고 고도의 행동을 프로그래밍하는 데에 필요합니다.
예를 들어, 2족 보행 로봇이 걷는 동작을 구현하고자 한다면, 로봇의 발과 다리들을 동시에 움직여야 보행이 가능하기 때문에 병렬 실행 방식의 코딩이 가능해야 합니다.
RobomationLAB에서 제공하는 로봇 코딩 프로그램은,
Arduino의 H/W 개발 환경과 유사한 setup / loop 코드 구조를 기반으로, 순차 실행 방식과 병렬 실행 방식을 동시에 지원합니다.

Block Composer 에 처음 접속하면 다음과 같이 두 개의 빈 함수 블록이 작업공간에 표시되는데,
'시작하기' 블록은 setup 함수를, '무한 반복하기' 블록은 loop 함수를 나타냅니다.
블록은 실시간으로 파이썬 코드로 변환되며,
코드는 다음과 같은 기본 구조를 갖습니다.
# 파이썬 코드 기본 구조
from robomation import *
# 코드 시작 시 한 번 실행됩니다:
def setup():
pass
# 코드 시작 시 10ms 간격으로 반복해서 실행됩니다:
def loop():
pass로봇을 제어하려면 코드 최상단에
from robomation import *를 두고, 사용할 로봇을 인스턴스로 선언합니다. (예:hamster_s = HamsterS(0))
setup 함수
setup 함수는 '코드 실행'을 하는 순간 단 한번만 수행됩니다.
setup 함수에서는 주로 변수를 초기화하거나 로봇의 모드, 기능 등을 초기화하는 코드를 작성합니다.
예를 들어, 바퀴를 통해 움직이는 로봇을 제어할 때, setup 함수에서는 바퀴의 초기 속도를 설정할 수 있습니다.
함수 내에서 시간 지연이 필요한 경우, Utils.wait(...) 함수를 사용하면 마치 동기 방식처럼 시간순으로 동작하는 코드를 작성할 수 있습니다.Utils.wait(...) 는 지정한 시간(초)만큼 기다린 뒤 다음 코드를 수행하므로, 정해진 시간 또는 동작 이후에 깨어나 다음 코드를 이어서 실행합니다.
이 기능을 활용하면, 간단한 순차 실행 뿐 아니라 병렬 실행 역할을 하는 loop 함수와의 연동을 통해, 강력한 로봇 프로그래밍이 가능할 것입니다.
다음은 HamsterS 로봇이 1초간 전진 후 1초간 후진하는 코드를 작성하는 예시입니다.
병렬 실행 방식의 loop 함수 내에서 위 동작을 구현하려면, 시간 계산과 제어 코드가 혼합되어 코드가 매우 복잡해지게 됩니다.
대신, setup 함수 내에서 Utils.wait 시간 지연 함수를 사용하면, 마치 동기 방식처럼 시간순으로 동작하는 코드를 작성할 수 있습니다.
( Utils.wait 함수에 대해서는 이후 유틸리티 함수 (Utils) 에서 다시 설명합니다. )
예시 코드 (파이썬)
from robomation import *
hamster_s = HamsterS(0)
# 코드 시작 시 한 번 실행됩니다:
def setup():
# 양쪽 바퀴 속도를 50으로 설정하여 앞으로 이동
hamster_s.set_wheel_speed('both', 50)
Utils.wait(1) # 1초 기다리기
# 양쪽 바퀴 속도를 -50으로 설정하여 뒤로 이동
hamster_s.set_wheel_speed('both', -50)
Utils.wait(1) # 1초 기다리기
hamster_s.stop()
# 코드 시작 시 10ms 간격으로 반복해서 실행됩니다:
def loop():
pass( 로봇 인스턴스 및 메서드 문법에 대해서는 이후 RobomationLAB 로봇 코딩 기본 문법 체계 에서 다시 설명합니다. )
loop 함수
loop 함수는 병렬 실행을 지원하며, 코드가 실행되는 동안 약 10ms 마다 반복하여 수행됩니다.
loop 함수에서는 주로 변수의 값을 반복해서 설정하거나 로봇의 특정 이벤트의 발생을 감지하여 처리하는 코드를 작성합니다.
다음은 시간에 따라 HamsterS 로봇의 바퀴 속도와 LED 색상이 변하는 코드를 작성하는 예시입니다.
( setup / loop 함수 밖에서 선언한 변수를 함수 안에서 변경할 때에는 global 키워드로 선언합니다. )
from robomation import *
hamster_s = HamsterS(0)
frame = 0
# 코드 시작 시 한 번 실행됩니다:
def setup():
global frame
frame = 0
# 코드 시작 시 10ms 간격으로 반복해서 실행됩니다:
def loop():
global frame
frame += 1 # loop 함수가 호출될 때마다 frame 변수의 값 1씩 증가
# 바뀐 frame 값을 활용하여, 양쪽 바퀴 속도와 양쪽 LED의 RGB 값 설정
hamster_s.set_wheel_speed('both', frame % 100)
hamster_s.set_led_color('left', frame % 256, 0, 0)
hamster_s.set_led_color('right', 0, 0, frame % 256)( 로봇 인스턴스 및 메서드 문법에 대해서는 이후 RobomationLAB 로봇 코딩 기본 문법 체계 에서 다시 설명합니다. )
다음은 HamsterS 로봇의 몸체를 가볍게 두드리는 Tap 동작이 발생하면, LED를 적색으로 켜는 코드를 작성하는 예시입니다.
from robomation import *
hamster_s = HamsterS(0)
# 코드 시작 시 한 번 실행됩니다:
def setup():
pass
# 코드 시작 시 10ms 간격으로 반복해서 실행됩니다:
def loop():
# Tap 동작이 발생하는 순간, 이벤트 발생 감지
if hamster_s.tap(): # 이벤트 감지 시, True
hamster_s.set_led_color('both', 'red') # 양쪽 LED를 적색으로 켜기
else:
hamster_s.turn_off('both') # 양쪽 LED 끄기( 이벤트 감지(tap()) 등 문법에 대해서는 이후 RobomationLAB 로봇 코딩 기본 문법 체계 에서 다시 설명합니다. )
RobomationLAB 로봇 코딩 기본 문법 체계
RobomationLAB에서 제공하는 로봇 코딩 프로그램에서 코드를 작성할 때 지켜야 할 기본 문법 체계는 다음과 같습니다.
로봇 제어는 robomation 파이썬 패키지를 통해 이루어지며,
로봇을 인스턴스로 만든 뒤 그 인스턴스의 메서드를 호출하는 방식으로 코드를 작성합니다.
robomation 패키지 가져오기
로봇 제어에 필요한 클래스(로봇)와 유틸리티(Utils)를 사용하려면, 코드 최상단에 다음 한 줄을 포함합니다.
from robomation import *로봇 인스턴스 생성
사용할 로봇을 인스턴스로 선언합니다.
클래스 이름은 로봇 종류를, 괄호 안의 숫자는 인스턴스 인덱스(0부터 시작)를 나타냅니다.
hamster_s = HamsterS(0) # 햄스터 S 1대로봇별 클래스 이름과 기본 변수명은 다음과 같습니다.
| 로봇 | 클래스 이름 | 기본 변수명 |
|---|---|---|
| 햄스터 S | HamsterS | hamster_s |
| 햄스터 | Hamster | hamster |
| 삐오 | Pio | pio |
| 터틀 | Turtle | turtle |
| 비글 | Beagle | beagle |
| 라쿤봇 | RaccoonBot | raccoon |
| 치즈스틱 | CheeseStick | cheesestick |
같은 종류의 로봇을 여러 대 사용할 경우, 인덱스를 0, 1, 2 … 로 늘려 선언합니다.
hamster_s = HamsterS(0)
hamster_s_1 = HamsterS(1)로봇 제어 메서드
로봇을 제어할 때에는 인스턴스의 메서드를 호출합니다.
메서드는 바퀴 속도 설정, 이동, LED, 소리 등 로봇의 동작을 수행합니다.
hamster_s.set_wheel_speed('both', 50) # 양쪽 바퀴 속도 설정
hamster_s.move_distance(10, 'cm') # 10cm 앞으로 이동
hamster_s.set_led_color('both', 'red') # 양쪽 LED를 적색으로로봇별 사용 가능한 메서드 목록과 매개변수는 각 로봇 문서('햄스터-S' 등)를 참고하세요.
센서 및 상태 읽기
센서 값이나 로봇의 상태를 읽을 때에도 메서드를 호출하며, 메서드가 그 값을 반환합니다.
left = hamster_s.floor('left') # 왼쪽 바닥 센서 값 읽기
dist = hamster_s.proximity('right') # 오른쪽 근접 센서 값 읽기이벤트 감지
상태 변화나 환경의 변화로 발생하는 이벤트는, 해당 이벤트 메서드가
이벤트가 발생한 순간에 True 를 반환하는 방식으로 감지합니다.
if hamster_s.tap(): # 두드림(Tap) 이벤트가 발생한 순간 True
hamster_s.set_led_color('both', 'red')동작 완료 대기 (wait)
이동·회전·소리 재생처럼 완료까지 시간이 걸리는 메서드는 wait 매개변수를 갖습니다.
wait=True(기본값): 동작이 완료될 때까지 기다린 뒤 다음 코드를 수행합니다.wait=False: 동작을 시작하고 곧바로 다음 코드를 이어서 수행합니다.
hamster_s.move_distance(10, 'cm', wait=True) # 이동이 끝날 때까지 기다림
hamster_s.move_distance(10, 'cm', wait=False) # 이동을 시작하고 바로 다음 코드 실행유틸리티 함수 (Utils)
시간 지연, 소리 재생, 로그 출력, 색상 등 로봇 종류와 무관한 공통 기능은 Utils 클래스의 메서드를 통해 사용합니다.
Utils.wait(1) # 1초 기다리기
Utils.speak('안녕하세요') # 텍스트 음성(TTS) 재생
Utils.log(0, '', '') # 콘솔 로그 출력