LEGO NXT는 크게 두가지 경우로 프로그래밍이 가능한데, 구동방식의 관점에서 프로그램을 LEGO NXT 기계 내부에서 동작하는 방식과 외부에서 동작하는 방식으로 나눌 수 있다.
기계 내부에서 동작하게 하기 위해서는 RobotC와 LeJOS로 프로그래밍이 가능하며 (각각에 대한 설명은 다음 기회에..^^), 기계 외부에서 동작하는 방식으로는 어떤 언어로든지 Bluetooth 통신을 이용하여 NXT의 표준 명령을 전달하는 방식으로 가능하다.
이번 글에서는 그중에 Java 언어로 작성된 bluetooth 기반의 nxt 표준 명령 라이브러리를 이용해 프로그래밍 하는 방법을 간단한 예제를 통해 살펴보겠다.
icommand는 sourceforge.net에서 진행되는 프로젝트 이므로 http://sourceforge.net/projects/nxtcommand/ 에서 다운로드가 가능하다. 이번 예제에서 사용된 버전은 icommand-0.6 이다.
필요한 파일은 icommand의 압축을 풀고 dist 폴더 안에 있는 bluecove.jar와 icommand.jar 이다. (bluecove는 Java API로 지원되는 bluetooth 라이브러리이며, icommand는 bluecove를 이용해서 NXT에 표준 명령을 전달하기 위한 API를 제공한다.)
이클립스(혹은 그밖에 Java IDE 혹은 cmd에서 직접 컴파일 하는경우) 에 Java 프로젝트를 하나 만들고, 클래스 패스에 위 두개의 jar 파일을 추가한다. (방법은 각자 알아서들 ... ㅋㅋㅋ)
그러면 프로그래밍을 하기 위한 준비는 끝이다. 이제 Java 파일을 하나 만들고, 간단하게 B포트의 모터를 100 (모터의 속도는 1부터 900 까지 가능함.. 단 900 은배터리가 충만할 경우) 의 속도로 1초동안 전진하도록 해보자..
(icommand 의 API는 프로그래밍에 대한 경험이 없거나 심지어 어린나이의 사람들도 누구나 할 수 있을 것 처럼 직관적이고, 쉬운것이 정말 맘에 든다.)
다음과 같이 프로그래밍 한다.
import icommand.nxt.Motor;
import icommand.nxt.comm.NXTCommand;
public class TestNXT {
public static void main(String[] args) {
NXTCommand.open();
Motor.B.setSpeed(100);
Motor.B.forward();
try { Thread.sleep(1000); } catch (Exception e) {}
Motor.B.stop();
NXTCommand.close();
}
}
NXTCommand.open() 과 NXTCommand.close() 는 블루투스연결을 초기화 하고 닫기 위한 함수이다. (icommand는 LeJOS 와 API가 동일하게 구현되었는데, 기계 내부에서 동작하는 LeJOS와는 달리 bluetooth를 이용하기 때문에 저 두개의 API만 추가되었다.) 나머지 함수는 직관적으로 이해할 수 있을 것이다. 보다 자세한 것은 http://lejos.sourceforge.net/p_technologies/nxt/icommand/api/index.html 을 통해 알 수 있다.
프로그래밍을 마친후 수행하기 전에 properties 파일로 NXT와의 연결 정보를 주어야 하는데, 이 정보를 c:\Document and Settings\(각자 윈도우의 사용계정)\icommand.properties 로부터 읽어 들인다. 파일을 만들던지 파일없이 그냥 수행하면 에러가 나면서 자동으로 파일이 생성된다.
파일의 내용은 다음과 같이 작성한다.
nxt.btaddress=00165300d860
nxtcomm.type=bluecove
nxtcomm=COM5
nxtcomm 에는 NXT로의 송신포트를 지정하는데, 이는 매번 달라질 수 있으므로 [제어판 - Bluetooth장치 - COM포트] 에서 방향이 '송신' 으로 되어 있는 포트이름을 적어준다.
이를 위해 먼저 컴퓨터의 블루투스 모듈과 NXT간의 연결을 해야 한다. 이것은 다른 블루투스 장치와 마찬가지로[제어판 - Bluetooth 장치 - 추가] 버튼을 통해 할 수 있다.
자 이제 프로그램을 수행하기 위한 준비는 모두 끝났다.
수행하면 NXT는 포트B에 연결된 모터를 1초동안 100의 속도로 돌릴 것이다.
이제 이 재미난 기계에 프로그래밍을 통한 지능을 심어주는 일만 남았다. ㅋㅋ

기계 내부에서 동작하게 하기 위해서는 RobotC와 LeJOS로 프로그래밍이 가능하며 (각각에 대한 설명은 다음 기회에..^^), 기계 외부에서 동작하는 방식으로는 어떤 언어로든지 Bluetooth 통신을 이용하여 NXT의 표준 명령을 전달하는 방식으로 가능하다.
이번 글에서는 그중에 Java 언어로 작성된 bluetooth 기반의 nxt 표준 명령 라이브러리를 이용해 프로그래밍 하는 방법을 간단한 예제를 통해 살펴보겠다.
icommand는 sourceforge.net에서 진행되는 프로젝트 이므로 http://sourceforge.net/projects/nxtcommand/ 에서 다운로드가 가능하다. 이번 예제에서 사용된 버전은 icommand-0.6 이다.
필요한 파일은 icommand의 압축을 풀고 dist 폴더 안에 있는 bluecove.jar와 icommand.jar 이다. (bluecove는 Java API로 지원되는 bluetooth 라이브러리이며, icommand는 bluecove를 이용해서 NXT에 표준 명령을 전달하기 위한 API를 제공한다.)
이클립스(혹은 그밖에 Java IDE 혹은 cmd에서 직접 컴파일 하는경우) 에 Java 프로젝트를 하나 만들고, 클래스 패스에 위 두개의 jar 파일을 추가한다. (방법은 각자 알아서들 ... ㅋㅋㅋ)
그러면 프로그래밍을 하기 위한 준비는 끝이다. 이제 Java 파일을 하나 만들고, 간단하게 B포트의 모터를 100 (모터의 속도는 1부터 900 까지 가능함.. 단 900 은배터리가 충만할 경우) 의 속도로 1초동안 전진하도록 해보자..
(icommand 의 API는 프로그래밍에 대한 경험이 없거나 심지어 어린나이의 사람들도 누구나 할 수 있을 것 처럼 직관적이고, 쉬운것이 정말 맘에 든다.)
다음과 같이 프로그래밍 한다.
import icommand.nxt.Motor;
import icommand.nxt.comm.NXTCommand;
public class TestNXT {
public static void main(String[] args) {
NXTCommand.open();
Motor.B.setSpeed(100);
Motor.B.forward();
try { Thread.sleep(1000); } catch (Exception e) {}
Motor.B.stop();
NXTCommand.close();
}
}
NXTCommand.open() 과 NXTCommand.close() 는 블루투스연결을 초기화 하고 닫기 위한 함수이다. (icommand는 LeJOS 와 API가 동일하게 구현되었는데, 기계 내부에서 동작하는 LeJOS와는 달리 bluetooth를 이용하기 때문에 저 두개의 API만 추가되었다.) 나머지 함수는 직관적으로 이해할 수 있을 것이다. 보다 자세한 것은 http://lejos.sourceforge.net/p_technologies/nxt/icommand/api/index.html 을 통해 알 수 있다.
프로그래밍을 마친후 수행하기 전에 properties 파일로 NXT와의 연결 정보를 주어야 하는데, 이 정보를 c:\Document and Settings\(각자 윈도우의 사용계정)\icommand.properties 로부터 읽어 들인다. 파일을 만들던지 파일없이 그냥 수행하면 에러가 나면서 자동으로 파일이 생성된다.
파일의 내용은 다음과 같이 작성한다.
nxt.btaddress=00165300d860
nxtcomm.type=bluecove
nxtcomm=COM5
nxtcomm 에는 NXT로의 송신포트를 지정하는데, 이는 매번 달라질 수 있으므로 [제어판 - Bluetooth장치 - COM포트] 에서 방향이 '송신' 으로 되어 있는 포트이름을 적어준다.
이를 위해 먼저 컴퓨터의 블루투스 모듈과 NXT간의 연결을 해야 한다. 이것은 다른 블루투스 장치와 마찬가지로[제어판 - Bluetooth 장치 - 추가] 버튼을 통해 할 수 있다.
자 이제 프로그램을 수행하기 위한 준비는 모두 끝났다.
수행하면 NXT는 포트B에 연결된 모터를 1초동안 100의 속도로 돌릴 것이다.
이제 이 재미난 기계에 프로그래밍을 통한 지능을 심어주는 일만 남았다. ㅋㅋ
이 글과 관련있는 글을 자동검색한 결과입니다 [?]
- LEGO NXT 무선조종 프로그램 만들기 by fomuon
- LEGO MindStorm NXT by 우중산행
- 롬보즈(이클립스)에서 자동컴파일이 안되는 현상 해결 by sadButTrue
# by | 2008/01/16 13:00 | LEGO NXT | 트랙백 | 덧글(5)





☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
============================================
자르파일을 추가하긴 했는데
an error occurred: Class icommand.nxt.comm.NXTCommand (file icommand/nxt/comm/NXTCommand.class) not found in CLASSPATH .;C:\lejos_nxj\lib\classes.jar
이런 에러가 나는데요 해결법좀 알려주시면 안될까요
Open of NXT failed: Failed to connect
NXTCommand.open(): Error while connecting ...
이런 메세지와 함께 안되더라구요.. 컴이랑 NXT랑 연결은 제대로 된것같은데..
nxt.btaddress=00165300d860
nxtcomm.type=bluecove
nxtcomm=COM5
여기서 nxt.btaddress를 어떻게 알죠? 제 nxt의 주소를 제대로 못적어서 그런거같은데..
제발 도와주세요 ㅠ.ㅠ
하나만 더 물어볼께요~ 진짜 API며.. NXJ관한 책 다 찾아봤는데.. 도저히 안되네요
icommand.nxt.Sound에 있는 Sound 클래스 사용해보셨나요?
rso파일 업로드해서 플레이하는.. playSoundFile메소드 있자나요
업로드까지만 되고 에러도 없는데 도저히 플레이가 안되네요.. 별의별 rso파일 모두 안되요
소스도 책에 나와있는 그대로인데;; 한번만 더 도와주세요 -0-
제 소스는 일단 이렇게 되있구요
File myFile = new File("Good.rso");
FileSystem.upload(myFile);
Sound.playSoundFile("Good.rso");
이건데.. 모 Thread.sleep로 기다려도 보고. 이것저것 다 해봤는데도 안되서..