다운로드 교육자료 문제해결 레퍼런스 구입방법

레퍼런스 매뉴얼 : 파이썬 : 숙련자용 : 전역 함수

바로가기
함수

열거형 상수

클래스
개요
전역으로 사용하는 함수를 정의합니다.
전역 함수
버전 1.4.0부터
parallel(function1, function2, ...)
입력한 함수들을 동시에 실행한다.

입력하는 함수들은 fn()의 형태를 가져야 하며 함수 이름이 fn일 필요는 없다. 입력하는 함수의 개수는 제한이 없으며, 입력한 함수들을 모두 동시에(병렬 처리) 실행한다.

파라미터:
  • function1: 동시에 실행할 첫 번째 함수
  • function2: 동시에 실행할 두 번째 함수
  • ...

from roboid import *

hamster = Hamster()

# 5초 앞으로 이동한다.
def move():
    hamster.move_forward(5)

# 양쪽 LED를 빨간색으로 깜박인다.
def blink():
    while True:
        hamster.leds(Hamster.LED_RED)
        wait(500)
        hamster.leds(0)
        wait(500)

# 양쪽 LED를 빨간색으로 깜박이면서 앞으로 이동한다.
parallel(move, blink)

# Ctrl+C 키를 누를 때까지 계속 기다린다.
wait(-1)
버전 1.3.0부터
scan()
시리얼 포트 목록을 출력한다.

from roboid import *

# 시리얼 포트 목록을 출력한다.
scan()
버전 1.3.0부터
set_executable(execute)
약 20msec마다 호출되는 콜백 함수를 등록한다.

콜백 함수는 execute()의 형태를 가지는 함수여야 한다. 함수 이름이 execute일 필요는 없다. 콜백 함수 내에서 디바이스에 쓴 데이터는 모두 같은 통신 패킷으로 전달되는 것이 보장된다. 콜백 함수가 등록되어 있으면 콜백 함수를 호출한 후에 하드웨어 로봇에게 명령을 전달한다. 콜백 함수는 약 20msec마다 호출되는데, 콜백 함수 내에서 시간을 끌면 안 되고 20msec 내에 모두 처리가 되도록 하여야 한다.

파라미터:
  • execute: 등록할 콜백 함수

from roboid import *

hamster = Hamster()

# 약 20msec마다 호출된다.
def execute():
    if hamster.left_proximity() > 40:
        hamster.wheels(-30, -30)
    else:
        hamster.wheels(30, 30)

set_executable(execute) # 콜백 함수를 등록한다.
버전 1.3.0부터
wait(milliseconds)
1000분의 1초 단위로 milliseconds 시간 동안 기다린다.
음수 값(예: -1)을 입력하면 영원히 기다린다. (버전 1.4.0부터)

파라미터:
  • milliseconds: 기다릴 시간(실수) [msec]

from roboid import *

wait(1000) # 1초 기다린다.
wait(-1) # 영원히 기다린다. (버전 1.4.0부터)
버전 1.3.0부터
wait_until(evaluate)
조건을 만족할 때까지 기다린다.

조건을 검사하는 함수는 evaluate()의 형태를 가지며 True 또는 False를 반환하는 함수여야 한다. 함수 이름이 evaluate일 필요는 없다. 조건을 검사하는 함수가 True를 반환하면 wait_until 함수를 중지하고, False를 반환하면 wait_until 함수에 계속 머물러 있는다. 조건을 검사하는 함수는 약 20msec마다 호출되는데, 함수 내에서 시간을 끌면 안 되고 20msec 내에 모두 처리가 되도록 하여야 한다.

파라미터:
  • evaluate: 조건을 검사하는 함수

from roboid import *

hamster = Hamster()

# 조건을 검사하여 True 또는 False를 반환한다.
def evaluate():
    return hamster.left_proximity() > 50

# 왼쪽 근접 센서의 값이 50보다 클 때까지 기다린다.
wait_until(evaluate)
버전 1.4.0부터
wait_until(evaluate, args)
조건을 만족할 때까지 기다린다.

조건을 검사하는 함수는 evaluate(args)의 형태를 가지며 True 또는 False를 반환하는 함수여야 한다. 함수 이름이 evaluate일 필요는 없다. 조건을 검사하는 함수가 True를 반환하면 wait_until 함수를 중지하고, False를 반환하면 wait_until 함수에 계속 머물러 있는다. 조건을 검사하는 함수는 약 20msec마다 호출되는데, 함수 내에서 시간을 끌면 안 되고 20msec 내에 모두 처리가 되도록 하여야 한다.
조건을 검사하는 함수 evaluate를 호출할 때 wait_until 함수에 넣어 준 args를 그대로 전달한다. 따라서 args는 어떠한 데이터 형이라도 가능하다.

파라미터:
  • evaluate: 조건을 검사하는 함수
  • args: evaluate를 호출할 때 전달할 데이터

from roboid import *

hamster1 = Hamster()
hamster2 = Hamster()

# 조건을 검사하여 True 또는 False를 반환한다.
def evaluate(robot):
    return robot.left_proximity() > 50

# 첫 번째 햄스터 로봇의 왼쪽 근접 센서 값이 50보다 클 때까지 기다린다.
wait_until(evaluate, hamster1)
# 두 번째 햄스터 로봇의 왼쪽 근접 센서 값이 50보다 클 때까지 기다린다.
wait_until(evaluate, hamster2)
버전 1.3.0부터
wait_until_ready()
모든 로봇이 준비될 때까지 기다린다.

여러 대의 로봇이 동작을 시작하는 시점을 동일하게 하기 위해 사용한다. 예를 들어, 컴퓨터에 2개의 동글을 연결하고 Hamster 인스턴스를 2개 생성하였는데 햄스터 로봇의 전원을 하나만 켰다고 하자. wait_until_ready() 함수를 호출하지 않으면 첫 번째 햄스터 로봇이 통신으로 연결되었을 때 동작을 먼저 시작하게 된다. 두 번째 햄스터 로봇의 전원을 켜서 모든 로봇이 통신으로 연결된 후 동작을 같이 시작하게 하려면 Hamster 인스턴스를 생성한 후 wait_until_ready() 함수를 호출하면 된다. 생성된 인스턴스의 개수가 컴퓨터에 연결된 동글의 개수보다 적으면 생성된 인스턴스의 개수만큼 통신이 연결될 때까지 기다린다. 컴퓨터에 연결된 동글의 개수가 생성된 인스턴스의 개수보다 적으면 컴퓨터에 연결된 동글의 개수만큼 통신이 연결될 때까지 기다린다.

from roboid import *

hamster1 = Hamster()
hamster2 = Hamster()

wait_until_ready()

hamster1.wheels(30, 30)
hamster2.wheels(30, 30)
버전 1.4.0부터
when_do(when, do)
when 함수의 조건을 만족하면 do 함수를 실행한다.

조건을 검사하는 함수는 when()의 형태를 가지며 True 또는 False를 반환하는 함수여야 한다. 함수 이름이 when일 필요는 없다. 조건을 만족할 때 실행할 함수는 do()의 형태를 가져야 하며 함수 이름이 do일 필요는 없다. 조건을 검사하는 함수가 True를 반환하면 do 함수를 실행하고, False를 반환하면 do 함수를 실행하지 않는다. 조건을 검사하는 함수는 약 20msec마다 호출되는데, 함수 내에서 시간을 끌면 안 되고 20msec 내에 모두 처리가 되도록 하여야 한다.
wait_until 함수와는 달리 조건을 만족할 때까지 기다리는 것이 아니며, when-do 쌍을 등록만 하고 다음 줄의 코드로 넘어간다. 따라서 when_do 함수를 여러 번 호출하는 경우 순서는 중요하지 않다.

파라미터:
  • when: 조건을 검사하는 함수
  • do: 조건을 만족할 때 실행할 함수

from roboid import *

hamster = Hamster()

# 검은색 선을 만나면 True를 반환한다.
def when_on_black_line():
    return hamster.left_floor() < 20 or hamster.right_floor() < 20

def do_move_forward():
    hamster.move_forward()

# 햄스터 로봇의 앞을 손으로 막으면 True를 반환한다.
def when_hand_found():
    return hamster.left_proximity() > 30 or hamster.right_proximity() > 30

def do_move_backward():
    hamster.move_backward()

# 검은색 선을 만나면 앞으로 이동하고 앞을 손으로 막으면 뒤로 물러난다.
when_do(when_on_black_line, do_move_forward)
when_do(when_hand_found, do_move_backward)

# Ctrl+C 키를 누를 때까지 계속 기다린다.
wait(-1)
버전 1.4.0부터
when_do(when, do, args)
when 함수의 조건을 만족하면 do 함수를 실행한다.

조건을 검사하는 함수는 when(args)의 형태를 가지며 True 또는 False를 반환하는 함수여야 한다. 함수 이름이 when일 필요는 없다. 조건을 만족할 때 실행할 함수는 do(args)의 형태를 가져야 하며 함수 이름이 do일 필요는 없다. 조건을 검사하는 함수가 True를 반환하면 do 함수를 실행하고, False를 반환하면 do 함수를 실행하지 않는다. 조건을 검사하는 함수는 약 20msec마다 호출되는데, 함수 내에서 시간을 끌면 안 되고 20msec 내에 모두 처리가 되도록 하여야 한다.
when 함수와 do 함수를 호출할 때 when_do 함수에 넣어 준 args를 그대로 전달한다. 따라서 args는 어떠한 데이터 형이라도 가능하다.
wait_until 함수와는 달리 조건을 만족할 때까지 기다리는 것이 아니며, when-do 쌍을 등록만 하고 다음 줄의 코드로 넘어간다. 따라서 when_do 함수를 여러 번 호출하는 경우 순서는 중요하지 않다.

파라미터:
  • when: 조건을 검사하는 함수
  • do: 조건을 만족할 때 실행할 함수
  • args: when 함수와 do 함수를 호출할 때 전달할 데이터

from roboid import *

hamster1 = Hamster()
hamster2 = Hamster()

# 검은색 선을 만나면 True를 반환한다.
def when_on_black_line(robot):
    return robot.left_floor() < 20 or robot.right_floor() < 20

def do_move_forward(robot):
    robot.move_forward()

# 햄스터 로봇의 앞을 손으로 막으면 True를 반환한다.
def when_hand_found(robot):
    return robot.left_proximity() > 30 or robot.right_proximity() > 30

def do_move_backward(robot):
    robot.move_backward()

# 검은색 선을 만나면 앞으로 이동하고 앞을 손으로 막으면 뒤로 물러난다.
when_do(when_on_black_line, do_move_forward, hamster1)
when_do(when_hand_found, do_move_backward, hamster1)
when_do(when_on_black_line, do_move_forward, hamster2)
when_do(when_hand_found, do_move_backward, hamster2)

# Ctrl+C 키를 누를 때까지 계속 기다린다.
wait(-1)
Copyright 로봇SW교육원 All rights reserved.
어려운 일이 있으면 광운대학교 로봇학부 박광현 교수(akaii@kw.ac.kr)에게 연락하세요.