News Download Tutorial FAQ Reference Buy

자바 : 숙련자용 : Task

개요
실행을 제어하기 위한 메소드를 정의합니다.
퍼블릭 스태틱 메소드
버전 1.1.0부터
public static void disposeAll()
모든 로봇의 통신 연결을 종료한다.

로봇의 통신 연결을 종료한 이후에는 read 또는 write 메소드를 사용하여 데이터를 읽거나 쓸 수 없다.
버전 1.1.0부터
public static void setExecutable(Executable executable)
약 20msec마다 execute 메소드가 호출되도록 Executable 객체를 등록한다.

등록된 Executable 객체의 execute 메소드 내에서 쓴 데이터는 모두 같은 통신 패킷으로 전송되는 것이 보장된다. 로봇으로부터 센서 데이터를 받은 후 execute 메소드를 호출하고, 그 후에 로봇으로 통신 패킷을 전송한다. execute 메소드는 약 20msec마다 호출되기 때문에 execute 메소드 내에서 구현된 부분은 반드시 20msec 내에 모두 처리가 되도록 하여야 한다.

파라미터:
  • executable: 등록할 Executable 객체

final Hamster hamster = new Hamster();

Executable executable = new Executable() {
    public void execute() {
        hamster.write(Hamster.LEFT_WHEEL, 30);
        hamster.write(Hamster.RIGHT_WHEEL, 30);
    }
};

// Executable 객체를 등록한다.
Task.setExecutable(executable);
버전 1.1.0부터
public static void wait(int millisec)
millisec 밀리초(1000분의 1초 단위)만큼 기다린다.

파라미터:
  • millisec: 기다리는 시간(1000분의 1초 단위)

// 앞으로 1초 이동하기
Hamster hamster = new Hamster();
// 30%의 속도로 앞으로 이동한다.
hamster.write(Hamster.LEFT_WHEEL, 30);
hamster.write(Hamster.RIGHT_WHEEL, 30);
// 1초 기다린다.
Task.wait(1000);
// 정지한다.
hamster.write(Hamster.LEFT_WHEEL, 0);
hamster.write(Hamster.RIGHT_WHEEL, 0);
버전 1.1.0부터
public static void waitUntil(Condition condition)
조건을 만족할 때까지 기다린다.

Condition 인터페이스의 test 메소드가 true를 반환하면 waitUntil 메소드를 중지하고, false를 반환하면 waitUntil 메소드에 계속 머물러 있는다. test 메소드는 약 20msec마다 호출되기 때문에 test 메소드 내에서 구현된 부분은 반드시 20msec 내에 모두 처리가 되도록 하여야 한다.

파라미터:
  • condition: 조건을 검사할 Condition 객체

final Hamster hamster = new Hamster();
// 왼쪽 근접 센서의 값이 50보다 클 때까지 기다린다.
Task.waitUntil(new Condition() {
    public boolean test() {
        return hamster.read(Hamster.LEFT_PROXIMITY) > 50;
    }
});
버전 1.1.0부터
public static void waitUntilReady()
모든 로봇이 준비될 때까지 기다린다.

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

Hamster hamster1 = new Hamster();
Hamster hamster2 = new Hamster();

Task.waitUntilReady();

hamster1.write(Hamster.LEFT_WHEEL, 30);
hamster2.write(Hamster.LEFT_WHEEL, 30);
Copyright Robot Software Education Institute. All rights reserved.
Please contact prof. Kwang-Hyun Park (akaii@kw.ac.kr) if you have any problem.