개요
로봇을 구성하는 로보이드 또는 디바이스를 찾거나 로봇을 제어하기 위한 메소드를 정의합니다.
클래스 상속 관계:
메소드
버전 1.0부터
addDeviceDataChangedListener(listener)
포함된 모든 디바이스에 대해 디바이스의 데이터가 갱신되었을 때 호출되도록 콜백 함수 listener를 등록한다.
listener는 onDeviceDataChanged(device, values)의 형태를 가지는 함수여야 한다.
여기서 device는 Device 객체이고, values는 해당 디바이스(device)의 데이터 리스트를 튜플 형태로 변환한 것이다.
파라미터:
def onDeviceDataChanged(device, values):
if device.getId() == Hamster.LEFT_PROXIMITY:
leftProximity = values[0]
def someFunction(robot):
# 리스너 콜백 함수를 등록한다.
robot.addDeviceDataChangedListener(onDeviceDataChanged)
버전 1.0부터
clearDeviceDataChangedListeners()
포함된 모든 디바이스에 대해 등록된 모든 리스너 콜백 함수를 제거한다.
버전 1.0부터
dispose()
로봇 객체를 폐기한다.
로봇 객체를 폐기한 이후에는 read 또는 write 메소드를 호출하여 디바이스로부터 데이터를 읽거나 디바이스에 데이터를 쓸 수 없다.
버전 1.0부터
e(deviceId)
ID가 deviceId인 디바이스의 데이터가 갱신되었는지 확인한다.
센서 또는 이펙터 디바이스는 데이터가 계속 갱신되기 때문에 확인할 필요가 없지만,
커맨드 또는 이벤트 디바이스는 데이터를 읽기 전에 반드시 e(deviceId) 메소드를 사용하여 데이터가 갱신되었는지 확인해야 한다.
그렇지 않으면 커맨드 또는 이벤트가 발생한 시점을 알 수가 없기 때문에 현재 발생한 커맨드 또는 이벤트의 데이터가 아니라 과거에 발생하였던 커맨드 또는 이벤트의 데이터를 읽을 수도 있다.
파라미터:
반환 값:
디바이스의 데이터가 갱신되었으면 True, 아니면 False
def someFunction(robot):
state = 0
if robot.e(Hamster.LINE_TRACER_STATE): # 데이터가 갱신되었는지 확인한다.
state = device.read(Hamster.LINE_TRACER_STATE) # 데이터를 읽는다.
버전 1.0부터
findDeviceById(deviceId)
자식 디바이스 중에서 ID가 deviceId인 디바이스를 찾아 객체를 반환한다.
ID가 deviceId인 자식 디바이스가 없으면 None을 반환한다.
파라미터:
- deviceId: 찾을 디바이스의 ID(정수)
반환 값:
def someFunction(robot):
# 왼쪽 바퀴 이펙터 디바이스의 객체를 얻는다.
device = robot.findDeviceById(Hamster.LEFT_WHEEL)
버전 1.0부터
findDeviceByName(name)
자식 디바이스 중에서 이름이 name인 디바이스를 찾아 객체를 반환한다.
이름이 name인 자식 디바이스가 없으면 None을 반환한다.
이 때, 자식 로보이드에 포함된 디바이스의 이름은 '자식로보이드.디바이스'와 같이 '.'으로 구분된 형식을 사용한다. 예: 'Hamster.LeftWheel'
파라미터:
반환 값:
def someFunction(robot):
# 왼쪽 바퀴 이펙터 디바이스의 객체를 얻는다.
device = robot.findDeviceByName('Hamster.LeftWheel')
버전 1.0부터
findRoboidByName(name)
자식 로보이드 중에서 이름이 name인 로보이드를 찾아 객체를 반환한다.
이름이 name인 자식 로보이드가 없으면 None을 반환한다.
이 때, 자식 로보이드에 포함된 로보이드의 이름은 '자식로보이드.로보이드'와 같이 '.'으로 구분된 형식을 사용한다. 예: 'Child.Pen'
파라미터:
반환 값:
def someFunction(robot):
roboid = robot.findRoboidByName('Hamster')
버전 1.0부터
getId()
로봇의 ID를 반환한다.
반환 값:
def someFunction(robot):
# 로봇의 ID가 Hamster.ID임을 확인한다.
if robot.getId() == Hamster.ID:
...
버전 1.0부터
getIndex()
몇 번째 로봇인지를 나타내는 인덱스를 반환한다.
로봇의 인덱스는 론처에서 로봇이 등록된 순서대로 0부터 시작하는 일련 번호이다.
론처에서 '사용하지 않음'으로 설정한 로봇은 제외하고, 사용 중인 로봇들을 모델 기준으로 그룹핑하여 각 그룹 별로 순서대로 일련 번호가 부여된다. 즉, 로봇의 모델이 다르면 인덱스는 0부터 새로 시작한다.
따라서 로봇의 모델 ID와 인덱스, 또는 모델 코드와 인덱스를 사용하여 각각의 로봇을 구분할 수 있다.
예를 들어 햄스터 로봇 3대와 거북이 로봇 2대를 사용 중이라면, 햄스터 로봇 3대가 등록된 순서대로 0, 1, 2의 일련 번호(인덱스)를 가지고, 거북이 로봇 2대가 0, 1의 일련 번호(인덱스)를 가진다.
반환 값:
def someFunction(robot):
# 첫 번째 로봇임을 확인한다.
if robot.getIndex() == 0:
...
버전 1.0부터
getName()
로봇의 이름을 반환한다.
반환 값:
def someFunction(robot):
# 로봇의 이름을 얻는다.
name = robot.getName()
버전 1.0부터
read(deviceId)
ID가 deviceId인 디바이스의 데이터 리스트에서 인덱스 0의 위치에 있는 데이터를 반환한다.
디바이스의 데이터 리스트 크기가 0인 경우에는 디바이스의 데이터 형에 따라 0 또는 빈 문자열('')을 반환한다.
파라미터:
반환 값:
디바이스의 데이터 값(정수/실수/문자열) 또는 0 또는 빈 문자열('')
def someFunction(robot):
# 왼쪽 근접 센서 디바이스의 데이터를 읽는다.
value = robot.read(Hamster.LEFT_PROXIMITY)
버전 1.0부터
read(deviceId, index)
ID가 deviceId인 디바이스의 데이터 리스트에서 인덱스가 index인 위치에 있는 데이터를 반환한다.
index가 디바이스의 데이터 리스트 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 디바이스의 데이터 형에 따라 0 또는 빈 문자열('')을 반환한다.
파라미터:
- deviceId: 디바이스 ID(정수)
- index: 디바이스 데이터 배열의 인덱스(정수)
반환 값:
디바이스의 데이터 값(정수/실수/문자열) 또는 0 또는 빈 문자열('')
def someFunction(robot):
# 가속도 센서 디바이스의 Y축 가속도 데이터를 읽는다.
value = robot.read(Hamster.ACCELERATION, 1)
버전 1.0부터
read(deviceId, list)
ID가 deviceId인 디바이스의 데이터 리스트를 list 리스트에 복사하고, 복사한 데이터의 개수를 반환한다.
디바이스의 데이터 리스트 크기가 list 리스트의 크기보다 큰 경우에는 list 리스트의 크기만큼만 복사한다.
디바이스의 데이터 리스트 크기가 list 리스트의 크기보다 작은 경우에는 디바이스의 데이터 리스트 크기만큼만 복사한다.
list 리스트의 크기가 0인 경우에는 복사하지 않고 0을 반환한다.
파라미터:
- deviceId: 디바이스 ID(정수)
- list: 디바이스의 데이터 리스트를 복사할 리스트
반환 값:
def someFunction(robot):
list = [0] * 3
# 가속도 센서 디바이스의 데이터를 모두 읽는다.
robot.read(Hamster.ACCELERATION, list)
버전 1.0부터
removeDeviceDataChangedListener(listener)
포함된 모든 디바이스에 대해 등록된 리스너 콜백 함수 목록에서 listener를 제거한다.
listener는 onDeviceDataChanged(device, values)의 형태를 가지는 함수여야 한다.
여기서 device는 Device 객체이고, values는 해당 디바이스(device)의 데이터 리스트를 튜플 형태로 변환한 것이다.
파라미터:
def onDeviceDataChanged(device, values):
if device.getId() == Hamster.LEFT_PROXIMITY:
leftProximity = values[0]
def someFunction(robot):
# 리스너 콜백 함수를 제거한다.
robot.removeDeviceDataChangedListener(onDeviceDataChanged)
버전 1.0부터
reset()
포함된 모든 디바이스의 데이터를 초기화한다.
버전 1.0부터
setExecutable(execute)
약 20msec마다 호출되는 콜백 함수를 등록한다.
콜백 함수는 execute(robot)의 형태를 가지는 함수여야 한다.
여기서 robot은 Robot 객체이다.
등록된 콜백 함수 내에서 write 함수를 통해 디바이스에 쓴 데이터는 모두 같은 통신 패킷으로 전달되는 것이 보장된다.
로봇으로부터 센서 데이터를 받은 후 등록된 콜백 함수를 호출하고, 그 후에 로봇에게 명령을 전달한다.
등록된 콜백 함수는 약 20msec마다 호출되는데, 콜백 함수 내에서 시간을 끌면 안 되고 콜백 함수 내에서 구현된 부분은 20msec 내에 모두 처리가 되도록 하여야 한다.
파라미터:
def execute(robot):
leftProximity = robot.read(Hamster.LEFT_PROXIMITY)
robot.write(Hamster.LEFT_WHEEL, 30)
def someFunction(robot):
# 콜백 함수를 등록한다.
robot.setExecutable(execute)
버전 1.0부터
setName(name)
로봇의 이름을 name으로 설정한다.
파라미터:
def someFunction(robot):
# 로봇의 이름을 'Hamster'로 설정한다.
robot.setName('Hamster')
버전 1.0부터
write(deviceId, data)
ID가 deviceId인 디바이스의 데이터 리스트에서 인덱스 0의 위치에 data를 쓴다.
디바이스의 데이터 리스트 크기가 0인 경우에는 쓰지 않고 False를 반환한다.
파라미터:
- deviceId: 디바이스 ID(정수)
- data: 디바이스에 쓸 데이터(정수/실수/문자열)
반환 값:
def someFunction(robot):
# 왼쪽 바퀴 이펙터 디바이스의 데이터를 30으로 한다.
robot.write(Hamster.LEFT_WHEEL, 30)
버전 1.0부터
write(deviceId, index, data)
ID가 deviceId인 디바이스의 데이터 리스트에서 인덱스가 index인 위치에 data를 쓴다.
index가 디바이스의 데이터 리스트 크기보다 크거나 같은 경우, 혹은 index가 음수인 경우에는 쓰지 않고 False를 반환한다.
파라미터:
- deviceId: 디바이스 ID(정수)
- index: 디바이스 데이터 배열의 인덱스(정수)
- data: 디바이스에 쓸 데이터(정수/실수/문자열)
반환 값:
def someFunction(robot):
# 왼쪽 바퀴 이펙터 디바이스의 데이터를 30으로 한다.
robot.write(Hamster.LEFT_WHEEL, 0, 30)
버전 1.0부터
write(deviceId, list)
ID가 deviceId인 디바이스의 데이터 리스트에 list 리스트를 복사하고, 복사한 데이터의 개수를 반환한다.
list 리스트의 크기가 디바이스의 데이터 리스트 크기보다 큰 경우에는 디바이스의 데이터 리스트 크기만큼만 복사한다.
list 리스트의 크기가 디바이스의 데이터 리스트 크기보다 작은 경우에는 list 리스트의 크기만큼만 복사한다.
list 리스트의 크기가 0인 경우에는 복사하지 않고 0을 반환한다.
디바이스의 데이터 리스트 크기가 가변적인 경우(데이터 리스트 크기가 -1로 지정된 경우)에는 list 리스트의 크기만큼 디바이스의 데이터 리스트를 새로 만들어서 list 리스트를 복사한다.
파라미터:
- deviceId: 디바이스 ID(정수)
- list: 디바이스의 데이터 리스트에 복사할 리스트
반환 값:
Copyright Robot Software Education Institute. All rights reserved.
Please contact prof. Kwang-Hyun Park (
akaii@kw.ac.kr) if you have any problem.