셋팅하는데, 한참 걸렸다. 워낙 블루투쓰에 관심이 없었는데. 추후 안드로이드에서 개발할 때 참조가 될 수 있을 것 같아서, 개념잡기 위해서 테스트해봤다.

우선, NXT 밧데리 소모가 어마어마 해서 바로 밧데로 방전되는 것을 생각하고 진행해야 한다. 다행히 밧데리가 소모되기 전에 셋팅을 끝낼 수 있었다.

노트북은 vaio 제품이고, windows xp 이며, 블루투쓰가 지원하는 모델이다.


(여러번 테스트하면서 얻은 결론이라, 약간 틀릴 수 있다.)

내 BlueTooth 설정에서 장치를 검색하고, 페어링 설정을 한다.
서로 쌍을 이룬 블루투쓰 장치는 비밀 키를 교환해야 한다. NXT의 비밀번호는 1234 이고, 내 노트북도 1234로 지정했다.





마인드스톰 NXT 에서는 다음과 설정해야 한다.
1. 블루투스 메뉴 -> visibility를 선택하고 true(visibility)로 설정
2. 블루투스 메뉴 -> on/off에서 on으로 설정
3. 블루투스 메뉴 -> My contacts 메뉴 -> 컴퓨터 이름 (나는 kim이라고 지정했고, kim 이라는 이름으로 나온다. )으로 접근하고, 내비둔다.
NXT 기기를 살펴보면, 왼쪽 상단 메뉴에 보면, Bluetooth 마크가 보이고 @< 이렇게 떠있는 것을 확인할 수 있다.



PC로 되돌아온다. 아까 등록한 장치관리자에서 포트 정보를 확인한다. Bluetooth 통신 포트가 생겼음을 알 수 있다.
여러번 테스트하다보면 COM port는 여러개로 늘어나기도 한다.


포트 정보를 좀더 확인하라면, 마우스 오른쪽 버튼을 눌러서, bluetooth 통신 포트를 보면 된다.




찾은 NXT에 대한 목록을 확인한다. 아직 연결된 것이 아니다.
아래 그림은 그냥 목록에 있다는 뜻이다.



NXT와 연결한다. 연결하면서 NXT 블루투쓰 보안코드를 넣어야 하는데. 디폴트가 1234여서.. 다음과 적는다.



블루투스 환경에서 NXT 아이콘 를 두번 클릭하면 Dev A의 NXT와 Dev B의 NXT가 보인다.
여기서 Dev A의 NXT 아이콘을 선택하고, 마우스 오른쪽 버튼을 누르고, "연결"을 선택한다.

아래와 같이 정상적으로 연결이 되면, 초록색 -><-이 뜬다. 이게 제대로 뜨지 않으면 연결이 잘 안된 것이다.


그리고, 전체 블루투스 환경에서 보면, 녹색 -><- 으로 되어 있는 것을 확인할 수 있다.
정상적으로 연결된 것임을 확인할 수 있다.





NXT 기기를 살펴보면, 왼쪽 상단 메뉴에 보면, Bluetooth 마크가 보이고 @<> 처럼 보인다. 즉 <> 이 두개가 있어야 연결이 정상적으로 되었음을 알려주는 마크이다.  


아래 링크에서 NXT Vehicle Remote 첨부파일을 다운받아 실행시킨다. 
http://cafe.naver.com/hirobotjks.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=696&

혹시 몰라, 여기에도 저장해둔다.



다음과 같은 메뉴가 뜨는데. 왼쪽 상단에 보면, BlueTooth Connection 밑에 connect라는 버튼이 있다.
이 버튼을 마우스로 클릭했을 때, 팝업이 뜰 수 있다. 이것은 정상적인 포트가 아닌 것을 의미한다.

장치 관리자의 '포트 정보'를 보고 그 포트 단위로 접근하면 된다.

즉 블루투스로 NXT와 노트북이 연결되었음을 확인하고, 위 어플을 이용해서 remote control 하는 것이다.








만약 정상 연결이 되었으면, 중간 아래에 보면, 빨간색 방향표가 나타나는데. 이것이 바로 연결되었음을 알려주는 표식이다. 에러 팝업이 뜨지 않고, 아래 화살표가 나타나면 Connected가 된것이다.
Connection 상태에 connected가 된 것을 확인할 수 있다.


이렇게 왔다 갔다 테스트해보면 정상동적하는지 확인할 수 있다. 밧데리 금방 방전되어서 조금은 당황스럽다.. 모터보다 통신 모듈에 에너지의 수요가 많다니..^^;;

* 블루투스 연결이 안되는 것 같아서 NXT에 firmware 1.29로 올렸다.
* NXT 어플이 아무것도 설치안되어도 노트북의 제어 프로그램만으로 제어가 가능하다.


원리는 어렵지 않다.레고싸이트 (http://mindstorms.lego.com/en-us/support/files/default.aspx)에 블루투스에 대한 개발 정보가 들어가 있다.



Bluetooth Developer Kit를 보면 통신 프로토콜이 있다. 이를 가지고 통신하면서 제어하는 것이다.
아주 간단하게 되어 있는 거라, 통신쪽을 조금 안다면 쉽게 개발할 수 있을 것 같다.



이제 로보트나 좀 만들어봐야겠다.


Posted by '김용환'
,



* 아이폰

<nxtblock>
http://www.nxtblock.com/p/downloads.html
클라이언트는 : NXT-G와 비슷한 개념에서 만들었지만,loop와 switch는 없다고 함


<아이폰-사파리>
아이폰2대와 GWT, Safari를 이용해서 센터를 바탕으로로봇을 통제하는 것
http://blog.naver.com/PostView.nhn?blogId=onnex&logNo=105599851


<legodrive>
cydia에서만 돌아가는 어플
http://www.saygin.gen.tr/personal/Lego-Robot-with-iPhone-Bluetooth/
http://wn.com/Lego_Robot_with_iPhone_Bluetooth_LegoDrive


<inxt>
http://www.youtube.com/watch?v=gzTY5UjUCm8
http://itunes.apple.com/us/app/inxt-remote/id317399938?mt=8
4.2에서 문제가 많은 것으로 알려져 있음
서버에 버그가 많아서 평이 좋지 않음


<nxt drive>
http://www.youtube.com/watch?v=XrAQ7uodQeo
정체를 모르겠음


<kleebots>
가입을 통해서 이것저것 할 수 있게 하는데, 테스트해 볼 필요 있음
http://www.kleekbots.com/
http://www.robots-dreams.com/2010/12/kleekbots-control-lego-mindstorms-robots-with-the-iphone-video.html


<아이폰을 이용한 NXT 통신>
할 수 있다 가능성이 있는 내용.
http://www.xyster.net/blog/?p=59#comments
http://www.xyster.net/blog/


<Lego nxt 블루투쓰 리모트 콘트롤 셋업 화면>
http://www.youtube.com/watch?v=W6nQ0y3MauM&feature=related

 

 

* 안드로이드
<app inventor에 있는 nxt drive>
블루투쓰를 이용해서 마인스톰 통제하는 것
http://appinventor.googlelabs.com/learn/reference/components/legomindstorms.html
http://code.google.com/p/app-inventor-for-android/source/browse/trunk/src/components/runtime/components/android/NxtDrive.java?r=50


<NxtRemote 3.0 어플>
http://mac.softpedia.com/get/Utilities/Lego-NXT-Remote.shtml
http://www.appbrain.com/app/nxtremote/com.smartphoneremote.nxtremote

<NXT Remote Control>
http://www.appbrain.com/app/nxt-remote-control/org.jfedor.nxtremotecontrol

이외 엄청많은 어플들...

 

* MS의 Robotics Developer Studio(MRDS)
Lego Mindstorms NXT 2.0 Bot controlled using MRDS
http://www.codeproject.com/KB/system/LegoMindstorms2MRDS.aspx?display=Mobile
http://www.youtube.com/watch?v=YUXAIZXGfQk

 

 

 

Posted by '김용환'
,

먼저 블럭으로 잘 만들어둔다.






color lamp를 못찾아서 시간이 많이 걸렸다.
애기들은 어떻게 color lamp를 찾았지?

나와 같이 고생했던 사람들이 있을 수 있으니, 올려놔야지.


첫번째 메뉴는 Common 메뉴이다.


아래 하단을 보면, 구분 메뉴가 있는데. 이 부분을 내가 미처 못봤다..
하단에 동그라미, 네모세개, 바두개 있는 게. 구분자이다.


두번째 네모 세개 메뉴를 아래와 같이 나온다.




두번째 Complete 메뉴에서 2번째 Action을 선택하면, color lamp가 있는지 확인할 수 있을 것이다.



color sensor와는 첫번째 common 메뉴에 있다.



바 2개는 custom 방식이다.




이제 shooterbot 로봇의 알고리즘이다.



c나 java 코드로 하면 10줄이나 될란가? 
이렇게 그림을  통해서 개념을 익히는 데는 참 좋은 툴인거 같다.
java의 창시자 제임스 고슬링이 요즘 블로그에서 언어에 대한 개념을 가르치는 교육용 프로그램에 관심이 많던데.. 이런 툴이 있으면 확실히 감을 잡을 수는 있을 것 같다. 

위의 NXT-G에 대해서 간단히 설명한다.

1. 아래 줄
파란색 등을 보이면서, 울트라소닉 센서로 BC 모터를 사용하여 왼쪽 방향으로 계속 돌게 한다.

2. 윗줄 앞부분
울트라소닉 센서로 주변에 무엇인가 있다고 찾아내면, 파란색 등을 보이며, 정지하고 object 소리를 낸다.
그리고, 1초를 쉰다.

3, 윗줄 뒷부분
또 한번 울트라소닉센서에 의해서 발견되면(즉, 2번 센서 체크를 의미) 빨간색 등을 보이게 하고
alarm 소리를 내고, A 모터를 이용해서 총을 발사한다..


이미지를 다운로드 하고, 실행시키면 정상적으로 돌아가는지 확인 가능하다.


테스트를 해보니. 울트라소닉센서가 상당히 민감하고, 잘 돌아가는 것 같다.


시나리오는 검은색 작은 가방으로 유인해서 내게 쏘게 한다.. 잘 돌아간다.
 (마지막에 엉뚱한거 쏘는 거는 빨래한테 쏘는 것임. 버그 아님)




Posted by '김용환'
,

난 이거 어딨나 했는데, 제공되는 프로그램에 다 있었다.^^;;;;
나처럼 실수하지 않도록 설명을 적어야지.

Shooterbot은 센서를 가지고 공으로 공격하는 로봇이다.





API 대신 프로그램 아이콘 같은 것을 호출 해서 쉽게 사용할 수 있다는 점은 교육용으로 훌륭한 것 같다.


메뉴 오른쪽에 보면, Robo Center 밑에 Vehicles 밑에 Shooterbot 의 Go를 누르면.. 된다.


그러면 아래 그림이 나오고 잘 따라하라고 나온다.




그냥 따라하니. 블럭으로 잘 만들고, 센서달고, 슛때리면 Good~
Posted by '김용환'
,

Lego mindstorms nxt 프로그램을 실행시키고,
Tools->update NXT Firmware을 실행



설치 버젼을 선택하고 Download 선택


그 사이에 mindstorm nxt는 이미지 굽고, restart됨



켜지고, 난뒤, 프로그램 하단에 플레이 버튼을 누르면, 앞/뒤 이동이 되는지 확인할 수 있다.
Posted by '김용환'
,

0.9 에 대한 이클립스 플러그인이 다행이 있었다.

플러그인 설치 주소는 다음과 같다.
http://lejos.sourceforge.net/tools/eclipse/plugin/nxj/

웹을 통해서 보면, 다음과 같이 2011년 6월 19일에 0.9 플러그인이 나왔음을 확인할 수 있다.


org.lejos.nxt.ldt.update-site

leJOS NXJ features for Eclipse

org.lejos.nxt leJOS NXJ Support
org.lejos.nxt.ldt.feature - 0.9.0.201106192010





설치를 완료후에 이클립스를 확인해본다..
메뉴에 변화가 있다. 펌웨어 관련한 것이니. 특별한 일이 아니면 쓰지 않는다.



그리고, preferences를 확인한다.  제대로 되었군~ 확인하면 된다.  특정 주소에 무엇인가를 하거라 실행 옵션 및 디버그 옵션을 제공해주고 있다.




이제 hello World을 실행해보자. new project 하면 LEJOS NXT Project를 생성할 수 있다. 그 것을 선택한다.
이름은 zzz로 한다.






Hello World.java 파일을 생성한다.


HelloWorld.java내용은 간단한다.


import lejos.nxt.*;
public class HelloWorld {
 public static void main(String[] args) {
  System.out.println("Hello World");
  Button.waitForPress();
 }
}


프로젝트 명에서 마우스 오른쪽 버튼을 눌러, Run AS -> LeJOS NXT 프로그램을 실행한다.


이클립스 콘솔창에 아래와 같이 뜨면서 어플리케이션이 NXT로 업로드 되고 실행된다.

program has been linked successfully
uploading ...
leJOS NXJ> Connected to NXT
leJOS NXJ> Upload successful in 936 milliseconds
program has been uploaded



만약 업로드를 실패하면 다음과 같이 출력된다.

 
program has been linked successfully
uploading ...
leJOS NXJ> Failed to open Unknown 0016530EA6F8
leJOS NXJ> Failed to connect to any NXT
No NXT found - is it switched on and plugged in (for USB)?
uploading the program failed with exit status 1


플러그인 소스를 본 적은 없지만 감으로 간단하게 원리를 살펴본다.

플러그인의 비밀은 그리 어렵지 않다. 컴파일 되게 API 셋을 제공한다.
LeJOS NXT Runtime에 해당되는 classes.jar가 project에 포함되게 한다.



프로젝트 정보의 Properties를 보면, LeJOS Project Builder라는 것이 있는데.  이것은 바로 NXT에서 실행가능한 파일 포맷,디버깅 가능 파일포맷으로 만들어주는 것일 것이다.



HelloWorld.nxd, HellowWorld.nxj 로 만들어진 것을 확인할 수 있다.

Run이 실행될 때는 이 파일들을 NXT로 전달하는 구조로 되어 있다.. (이 부분은 나중에 소스를 까면 봐야겠다.)

우선 간단하게 leJOS 개발환경을 구축해보았다. 이젠 API를 깊이 이해하면 끝~




Posted by '김용환'
,


http://sourceforge.net/projects/lejos/files/lejos-NXJ-win32/0.9.0beta/
웹에 보면, lejos_NXJ_win32_0_9_0beta.zip  파일이 존재하는데. 이 녀석에 예제가 포함되어 있다.

압축을 풀고 나서, eclipse 에서 import 하면 간단한 테스트가 가능하다.
D:\LEGO\lejos\lejos_NXJ_win32_0_9_0beta\lejos_nxj\projects\org.lejos.example


Hello World 을 간단하게 출력하는 예제이다.

package org.lejos.example;
import lejos.nxt.*;
/**
 * Example leJOS Project with an ant build file
 *
 */
public class HelloWorld {
 public static void main(String[] args) {
  System.out.println("Hello World");
  Button.waitForPress();
 }
}



NXT의 전원을 켜고, ant build만 하면 오케이다.


ant 빌드 결과물이이다. build 결과물은 다음과 같다.


Buildfile: D:\LEGO\lejos\lejos_NXJ_win32_0_9_0beta\lejos_nxj\projects\org.lejos.example\build.xml
clean:
      [delete] Deleting directory D:\LEGO\lejos\lejos_NXJ_win32_0_9_0beta\lejos_nxj\projects\org.lejos.example\build
compile:
       [mkdir] Created dir: D:\LEGO\lejos\lejos_NXJ_win32_0_9_0beta\lejos_nxj\projects\org.lejos.example\build
       [javac] Compiling 1 source file to D:\LEGO\lejos\lejos_NXJ_win32_0_9_0beta\lejos_nxj\projects\org.lejos.example\build
link:
        [java] Class 0: java.lang.Object
        [java] Class 1: java.lang.Throwable
        [java] Class 2: java.lang.Error
        [java] Class 3: java.lang.OutOfMemoryError
        [java] Class 4: boolean
        [java] Class 5: char
        [java] Class 6: float
        [java] Class 7: double
        [java] Class 8: byte
        [java] Class 9: short
        [java] Class 10: int
        [java] Class 11: long
        [java] Class 12: void
        [java] Class 13: java.lang.Object[]
        [java] Class 14: java.lang.NoSuchMethodError
        [java] Class 15: java.lang.StackOverflowError
        [java] Class 16: java.lang.NullPointerException
        [java] Class 17: boolean[]
        [java] Class 18: char[]
        [java] Class 19: float[]
        [java] Class 20: double[]
        [java] Class 21: byte[]
        [java] Class 22: short[]
        [java] Class 23: int[]
        [java] Class 24: long[]
        [java] Class 25: reserved
        [java] Class 26: java.lang.ClassCastException
        [java] Class 27: java.lang.ArithmeticException
        [java] Class 28: java.lang.ArrayIndexOutOfBoundsException
        [java] Class 29: java.lang.IllegalArgumentException
        [java] Class 30: java.lang.InterruptedException
        [java] Class 31: java.lang.IllegalStateException
        [java] Class 32: java.lang.IllegalMonitorStateException
        [java] Class 33: java.lang.ThreadDeath
        [java] Class 34: java.lang.ArrayStoreException
        [java] Class 35: java.lang.NegativeArraySizeException
        [java] Class 36: java.lang.Class
        [java] Class 37: java.lang.String
        [java] Class 38: java.lang.Cloneable
        [java] Class 39: java.lang.Thread
        [java] Class 40: org.lejos.example.HelloWorld
        [java] Class 41: lejos.nxt.VM
        [java] Class 42: java.lang.System
        [java] Class 43: java.lang.StringBuilder
        [java] Class 44: java.lang.Integer
        [java] Class 45: java.io.PrintStream
        [java] Class 46: java.lang.RuntimeException
        [java] Class 47: java.lang.Exception
        [java] Class 48: java.lang.IndexOutOfBoundsException
        [java] Class 49: java.lang.Character
        [java] Class 50: java.lang.StringIndexOutOfBoundsException
        [java] Class 51: java.lang.StringUtils
        [java] Class 52: java.lang.Runnable
        [java] Class 53: lejos.nxt.Button
        [java] Class 54: lejos.nxt.VM.VMImage
        [java] Class 55: lejos.nxt.VM.VMClone
        [java] Class 56: lejos.nxt.LCDOutputStream
        [java] Class 57: java.lang.Number
        [java] Class 58: java.lang.NumberFormatException
        [java] Class 59: java.io.OutputStream
        [java] Class 60: java.io.IOException
        [java] Class 61: lejos.nxt.NXTEvent
        [java] Class 62: lejos.nxt.Sound
        [java] Class 63: lejos.nxt.SystemSettings
        [java] Class 64: lejos.nxt.Button[]
        [java] Class 65: lejos.nxt.LCD
        [java] Class 66: lejos.nxt.Flash
        [java] Class 67: java.lang.String[]
        [java] Class 68: lejos.nxt.FlashError
        [java] Class 69: lejos.nxt.NXT
        [java] Method 0: java.lang.Object.<init>() PC 3256 Signature id 2
        [java] Method 1: java.lang.Object.getClass() PC 3257 Signature id 121
        [java] Method 2: java.lang.Object.toString() PC 3265 Signature id 123
        [java] Method 3: java.lang.Object.wait(long) Native id 7
        [java] Method 4: java.lang.Throwable.<init>() PC 3293 Signature id 2
        [java] Method 5: java.lang.Throwable.<init>(java.lang.String) PC 3303 Signature id 124
        [java] Method 6: java.lang.Throwable.getLocalizedMessage() PC 3318 Signature id 125
        [java] Method 7: java.lang.Throwable.getMessage() PC 3323 Signature id 29
        [java] Method 8: java.lang.Throwable.toString() PC 3328 Signature id 123
        [java] Method 9: java.lang.Throwable.fillInStackTrace() PC 3376 Signature id 126
        [java] Method 10: java.lang.Error.<init>(java.lang.String) PC 3389 Signature id 124
        [java] Method 11: java.lang.NullPointerException.<init>() PC 3395 Signature id 2
        [java] Method 12: java.lang.IllegalArgumentException.<init>(java.lang.String) PC 3400 Signature id 124
        [java] Method 13: java.lang.Class.isInterface() PC 3406 Signature id 133
        [java] Method 14: java.lang.Class.toString() PC 3423 Signature id 123
        [java] Method 15: java.lang.String.<init>(int) PC 3469 Signature id 128
        [java] Method 16: java.lang.String.<init>(char[]) PC 3481 Signature id 140
        [java] Method 17: java.lang.String.<init>(char[], int, int) PC 3490 Signature id 141
        [java] Method 18: java.lang.String.charAt(int) PC 3507 Signature id 145
        [java] Method 19: java.lang.String.equals(java.lang.Object) PC 3532 Signature id 120
        [java] Method 20: java.lang.String.length() PC 3604 Signature id 155
        [java] Method 21: java.lang.String.toString() PC 3610 Signature id 123
        [java] Method 22: java.lang.String.valueOf(java.lang.Object) PC 3612 Signature id 167
        [java] Method 23: java.lang.Thread.run() PC 3626 Signature id 1
        [java] Method 24: java.lang.Thread.currentThread() Native id 12
        [java] Method 25: java.lang.Thread.interrupt() Native id 15
        [java] Method 26: org.lejos.example.HelloWorld.main(java.lang.String[]) PC 3646 Signature id 0
        [java] Method 27: lejos.nxt.VM.<clinit> PC 3659 Signature id 3
        [java] Method 28: lejos.nxt.VM.<init>() PC 3678 Signature id 2
        [java] Method 29: lejos.nxt.VM.getVM() PC 3713 Signature id 175
        [java] Method 30: lejos.nxt.VM.memPeek(int, int, int) Native id 103
        [java] Method 31: lejos.nxt.VM.memCopy(java.lang.Object, int, int, int, int) Native id 104
        [java] Method 32: lejos.nxt.VM.getObjectAddress(java.lang.Object) Native id 105
        [java] Method 33: lejos.nxt.VM.memGetReference(int, int) Native id 106
        [java] Method 34: lejos.nxt.VM.memPeekByte(int, int) PC 3733 Signature id 176
        [java] Method 35: lejos.nxt.VM.memPeekShort(int, int) PC 3745 Signature id 177
        [java] Method 36: lejos.nxt.VM.memPeekInt(int, int) PC 3756 Signature id 178
        [java] Method 37: lejos.nxt.VM.getClassAddress(int) PC 3764 Signature id 179
        [java] Method 38: lejos.nxt.VM.getClassNo(java.lang.Object) PC 3780 Signature id 180
        [java] Method 39: lejos.nxt.VM.getClassNumber(java.lang.Class) PC 3807 Signature id 181
        [java] Method 40: lejos.nxt.VM.getClass(java.lang.Object) PC 3824 Signature id 183
        [java] Method 41: lejos.nxt.VM.createStackTrace(java.lang.Thread, java.lang.Object) Native id 114
        [java] Method 42: lejos.nxt.VM.access$100(java.lang.Object, int, int, int, int) PC 3840 Signature id 188
        [java] Method 43: java.lang.System.<clinit> PC 3850 Signature id 3
        [java] Method 44: java.lang.System.arraycopy(java.lang.Object, int, java.lang.Object, int, int) Native id 24
        [java] Method 45: java.lang.System.currentTimeMillis() Native id 22
        [java] Method 46: java.lang.System.identityHashCode(java.lang.Object) PC 3885 Signature id 200
        [java] Method 47: java.lang.System.getDataAddress(java.lang.Object) Native id 8
        [java] Method 48: java.lang.StringBuilder.ensureCapacity(int) PC 3890 Signature id 201
        [java] Method 49: java.lang.StringBuilder.<init>() PC 3949 Signature id 2
        [java] Method 50: java.lang.StringBuilder.append(java.lang.String) PC 3967 Signature id 202
        [java] Method 51: java.lang.StringBuilder.append(int) PC 3973 Signature id 206
        [java] Method 52: java.lang.StringBuilder.appendInternal(java.lang.String) PC 4011 Signature id 207
        [java] Method 53: java.lang.StringBuilder.toString() PC 4062 Signature id 123
        [java] Method 54: java.lang.Integer.<clinit> PC 4079 Signature id 3
        [java] Method 55: java.lang.Integer.parseInt(java.lang.String) PC 4084 Signature id 212
        [java] Method 56: java.lang.Integer.parseInt(java.lang.String, int) PC 4091 Signature id 213
        [java] Method 57: java.lang.Integer.parseInt(java.lang.String, int, int, boolean, int) PC 4138 Signature id 214
        [java] Method 58: java.lang.Integer.toHexString(int) PC 4263 Signature id 216
        [java] Method 59: java.lang.Integer.toUnsignedString(int, int, int, int) PC 4273 Signature id 217
        [java] Method 60: java.io.PrintStream.<init>(java.io.OutputStream) PC 4321 Signature id 222
        [java] Method 61: java.io.PrintStream.write(int) PC 4331 Signature id 223
        [java] Method 62: java.io.PrintStream.flush() PC 4358 Signature id 224
        [java] Method 63: java.io.PrintStream.print0(java.lang.String) PC 4370 Signature id 225
        [java] Method 64: java.io.PrintStream.println0(java.lang.String) PC 4396 Signature id 226
        [java] Method 65: java.io.PrintStream.println(java.lang.String) PC 4412 Signature id 227
        [java] Method 66: java.lang.RuntimeException.<init>() PC 4421 Signature id 2
        [java] Method 67: java.lang.RuntimeException.<init>(java.lang.String) PC 4426 Signature id 124
        [java] Method 68: java.lang.Exception.<init>() PC 4432 Signature id 2
        [java] Method 69: java.lang.Exception.<init>(java.lang.String) PC 4437 Signature id 124
        [java] Method 70: java.lang.IndexOutOfBoundsException.<init>(java.lang.String) PC 4443 Signature id 124
        [java] Method 71: java.lang.Character.<clinit> PC 4449 Signature id 3
        [java] Method 72: java.lang.Character.digit(int, int) PC 4454 Signature id 221
        [java] Method 73: java.lang.Character.forDigit(int, int) PC 4532 Signature id 240
        [java] Method 74: java.lang.StringIndexOutOfBoundsException.<init>(int) PC 4579 Signature id 128
        [java] Method 75: java.lang.StringUtils.parseDigit(char, int) PC 4603 Signature id 245
        [java] Method 76: java.lang.StringUtils.throwNumberFormat(java.lang.String, int) PC 4625 Signature id 246
        [java] Method 77: java.lang.StringUtils.getIntChars(char[], int, int, int) PC 4661 Signature id 248
        [java] Method 78: java.lang.StringUtils.exactStringLength(int, int) PC 4713 Signature id 250
        [java] Method 79: lejos.nxt.Button.<clinit> PC 4736 Signature id 3
        [java] Method 80: lejos.nxt.Button.<init>(int) PC 4827 Signature id 128
        [java] Method 81: lejos.nxt.Button.waitAllReleased(lejos.nxt.NXTEvent, long) PC 4837 Signature id 262
        [java] Method 82: lejos.nxt.Button.waitForPress(int) PC 4869 Signature id 263
        [java] Method 83: lejos.nxt.Button.waitForPress() PC 4942 Signature id 264
        [java] Method 84: lejos.nxt.Button.getButtons() Native id 47
        [java] Method 85: lejos.nxt.Button.readButtons() PC 4947 Signature id 265
        [java] Method 86: lejos.nxt.Button.loadSettings() PC 4991 Signature id 267
        [java] Method 87: lejos.nxt.VM.VMImage.<init>(lejos.nxt.VM, int) PC 5065 Signature id 268
        [java] Method 88: lejos.nxt.VM.VMImage.<init>(lejos.nxt.VM, int, lejos.nxt.VM$1) PC 5079 Signature id 269
        [java] Method 89: lejos.nxt.VM.VMClone.update() PC 5086 Signature id 290
        [java] Method 90: lejos.nxt.VM.VMClone.<init>(int, int) PC 5102 Signature id 284
        [java] Method 91: lejos.nxt.VM.VMClone.<init>(int, int, lejos.nxt.VM$1) PC 5121 Signature id 286
        [java] Method 92: lejos.nxt.LCDOutputStream.<init>() PC 5128 Signature id 2
        [java] Method 93: lejos.nxt.LCDOutputStream.write(int) PC 5138 Signature id 223
        [java] Method 94: java.lang.NumberFormatException.<init>(java.lang.String) PC 5193 Signature id 124
        [java] Method 95: java.io.OutputStream.<init>() PC 5199 Signature id 2
        [java] Method 96: java.io.OutputStream.write(int) PC 0 Signature id 223
        [java] Method 97: java.io.OutputStream.flush() PC 5204 Signature id 224
        [java] Method 98: lejos.nxt.NXTEvent.<init>() PC 5205 Signature id 2
        [java] Method 99: lejos.nxt.NXTEvent.registerEvent() Native id 117
        [java] Method 100: lejos.nxt.NXTEvent.unregisterEvent() Native id 118
        [java] Method 101: lejos.nxt.NXTEvent.changeEvent(int, int) Native id 119
        [java] Method 102: lejos.nxt.NXTEvent.waitEvent(long) PC 5210 Signature id 311
        [java] Method 103: lejos.nxt.NXTEvent.waitEvent(int, long) PC 5411 Signature id 312
        [java] Method 104: lejos.nxt.NXTEvent.allocate(int, int, int) PC 5422 Signature id 317
        [java] Method 105: lejos.nxt.NXTEvent.free() PC 5472 Signature id 318
        [java] Method 106: lejos.nxt.Sound.<clinit> PC 5498 Signature id 3
        [java] Method 107: lejos.nxt.Sound.playFreq(int, int, int) Native id 55
        [java] Method 108: lejos.nxt.Sound.playTone(int, int, int) PC 5607 Signature id 325
        [java] Method 109: lejos.nxt.Sound.loadSettings() PC 5633 Signature id 267
        [java] Method 110: lejos.nxt.SystemSettings.<clinit> PC 5644 Signature id 3
        [java] Method 111: lejos.nxt.SystemSettings.getSlot(java.lang.String) PC 5756 Signature id 330
        [java] Method 112: lejos.nxt.SystemSettings.setSlot(int, java.lang.String) PC 5788 Signature id 331
        [java] Method 113: lejos.nxt.SystemSettings.getValue(int) PC 5864 Signature id 332
        [java] Method 114: lejos.nxt.SystemSettings.getStringSetting(java.lang.String, java.lang.String) PC 5936 Signature id 333
        [java] Method 115: lejos.nxt.SystemSettings.getIntSetting(java.lang.String, int) PC 5963 Signature id 334
        [java] Method 116: lejos.nxt.SystemSettings.setSetting(java.lang.String, java.lang.String) PC 5983 Signature id 335
        [java] Method 117: lejos.nxt.LCD.<clinit> PC 6015 Signature id 3
        [java] Method 118: lejos.nxt.LCD.bitBlt(byte[], int, int, int, int, int, int, int, int, int) PC 6032 Signature id 366
        [java] Method 119: lejos.nxt.LCD.drawChar(char, int, int) PC 6059 Signature id 367
        [java] Method 120: lejos.nxt.LCD.getDisplay() Native id 42
        [java] Method 121: lejos.nxt.LCD.getSystemFont() Native id 45
        [java] Method 122: lejos.nxt.LCD.bitBlt(byte[], int, int, int, int, byte[], int, int, int, int, int, int, int) Native id 44
        [java] Method 123: lejos.nxt.LCD.scroll() PC 6088 Signature id 369
        [java] Method 124: lejos.nxt.Flash.<clinit> PC 6128 Signature id 3
        [java] Method 125: lejos.nxt.Flash.flashReadPage(byte[], int) Native id 71
        [java] Method 126: lejos.nxt.Flash.flashWritePage(byte[], int) Native id 70
        [java] Method 127: lejos.nxt.Flash.readPage(byte[], int) PC 6141 Signature id 407
        [java] Method 128: lejos.nxt.Flash.writePage(byte[], int) PC 6160 Signature id 408
        [java] Method 129: lejos.nxt.FlashError.<init>(java.lang.String) PC 6247 Signature id 124
        [java] Method 130: lejos.nxt.NXT.getUserPages() Native id 94
        [java] Master record    : 20 bytes.
        [java] Class records    : 70 (840 bytes).
        [java] Field records    : 56 (56 bytes).
        [java] Static fields    : 29 (60 bytes).
        [java] Static state     : 29 (112 bytes).
        [java] Constant records : 36 (144 bytes).
        [java] Constant values  : 36 (476 bytes).
        [java] Method records   : 131 (1572 bytes).
        [java] Exception records: 10 (80 bytes).
        [java] Interface maps   : 2 (4 bytes).
        [java] Code             : 108 (3000 bytes).
        [java] Total            : 6256 bytes.
        [java] Run time options : EnableCompact
        [java] Constant loads   : 36N 10O 1W 35S
        [java] Static load/store: 3N 70O
        [java] Field  load/store: 1N 80O
uploadandrun:
        [java] Found NXT: NXT 0016530EA6F8
        [java] leJOS NXJ> Connected to NXT
        [java] leJOS NXJ> Upload successful in 922 milliseconds
BUILD SUCCESSFUL
Total time: 3 seconds



build.xml 파일을 보면,
jvm 에서 실행할 수 있도록 기본 java binary 클래스들과 HelloWorld.class를 묶어 만든 HelloWorld.nxd 파일을  NXT로 다운로드 하는 구조로 되어 있는 것 같다. Littel Endian 설정도 눈에 보인다.  나중에 시간되는 대로 소스를 함 봐야겠다.

컴파일 -> lejos.pc.tools.NXJLink ->  lejos.pc.tools.NXJUpload 


NXT 결과물을 본다. Hello World 가 제대로 출력되었는지 확인가능하다.




내일은 몽땅 다 읽어봐야지.
http://www.docstoc.com/docs/2133860/The-leJOS-NXJ-Tutorial

Posted by '김용환'
,
LabView라는 프로그램이 있긴 한데, 천천히 해도 될 것 같아서, 딴 것을 써보려고 한다.


nxt 프로그래밍 소프트웨어를 써보려고 한다.

http://www.teamhassenplug.org/NXT/NXTSoftware.html



여기서 유난히 내 눈을 띠는 것은 leJOS NXJ 이다.
자바 버전이라거 그런가? ㅎㅎㅎ 2011년 5월 6일 0.9가 릴리즈 되면서 약간 기대가 된다.
http://lejos.sourceforge.net/


최신 0.9는 여기서 다운받을 수 있다.
http://sourceforge.net/projects/lejos/files/lejos-NXJ-win32/0.9.0beta/

튜토리얼은 여기서 볼 수 있다.
http://lejos.sourceforge.net/nxt/nxj/tutorial/Preliminaries/Intro.htm#1


설치는 아래와 같이 한다.
http://lejos.sourceforge.net/nxt/nxj/tutorial/Preliminaries/GettingStartedWindows.htm



nxj를 함 실행해보자. 알아서 path까지 잡아주었다.



NXT에 보니 메뉴도 달라져 보인다.
http://lejos.sourceforge.net/nxt/nxj/tutorial/MenuSystem/MenuSystem.htm


문서를 죽 읽어본다.
http://lejos.sourceforge.net/nxt/nxj/tutorial/index.htm


내일 테스트해야지.
Posted by '김용환'
,


레고 마인드 스톰은 주어진 문서가 약간 부실 한 것 같다..
약간 감으로 찾아보았는데, 대충은 맞은 것 같다.


1, 설치 DVD를 이용해서 Labview 어플 설치, 드라이버 설치


2. USB 연결하고, 파일 다운로드 하려고 했더니 에러 문구 발생
NXT firmware version does not match computer driver version.

3. firmware를 업데이트하기로 했다. 최신버전이 1.29이다.  이걸로 해본다.

보통 firmware와 어플 간의 protocol을 맞추어야 한다. 그래야 어플에서 전달하는 정보와 NXT 간의 통신 이나 rom에 들어갈 정보들을 문제없이 동작할 수 있게 한다.

아래 웹 페이지에 접속해서 firmware를 보고, 1.29로 선택하고 download를 선택한다.

http://mindstorms.lego.com/en-us/support/files/Firmware.aspx

zip 파일을 다운로드를 하고 파일을 압축을 푼다. LEGO_MINDSTORMS_NXT_Firrmware_V1.29.rfw 파일을
다음의 위치에 둔다.
...\Program Files\LEGO Software\LEGO MINDSTORMS NXT\engine\Firmware

(사실. C:\Program Files\LEGO Software\LEGO MINDSTORMS NXT\engine\Firmware밑의 LastFirmware.txt 파일을 보면, 마지막 펌웨어 버젼이 나온다. )
LEGO_MINDSTORMS_NXT_Firrmware_V1.29

4. lego mindstorm 어플 실행 -> tool메뉴-> update nxt firmware 창을 띄운다.

5. NXT 의 전원을 킨다. timeout이 있어서 종료가 되기도 하니. 전원상태를 확인한다.

7.  아까 update nxt firmware 창에서 v1.29 파일을 선택하고 download 버튼을 클릭한다.

업데이트 중에 함부로 만지지 않는다. 정상적인 업데이트가 안되면, 문제가 될 수 있다. 예전에 Settop 박스와 모바일 장비를 버린 적이 많아서~ ㅎㅎㅎ  마인드 스톰은  리셋만 하면 잘 되는 것 같아서 좋다.. 항상 조심!~
(PSP도  벽돌 현상이라 불리는 업데이트 hang 에 걸리면 끝일 나는 것과 비슷하다.)

Progress를 보면, download 되었는지 녹색 status 바로 확인할 수 있다.

8. close를 누른다.


이제 테스트를 해보자~
create project를 하고,  사운드 소리를 NXT에서 내게 하는 데모가 있다.
그대로 따라해본다. 소리가 나면 ok!!

작동 원리는 wave를 NXT로 전달하고 그 것을 NXT에서 play 하게 한다.

 

Posted by '김용환'
,


마인드 스톰을 구매했다.






작은 책자에 있는대로 기본 모형을 만들었다. 재미가 있었다.





간단하게 NXT에서 제공하는 제어만으로 작은 장난을 할 수 있다.

앞으로, 2초 쉬기, 뒤로, 2초 쉬기 .. 이렇게 무한반복~



Posted by '김용환'
,