2009-04-09

關於icommand與NXT 加速度計(加速規)的問題整理

最近有許多人對於使用icommand與NXT的加速度計(加速規)非常有興趣。

經過多方查證測試,終於弄清楚大家的問題何在!也發現大家同時各自研究的辛苦,不管這些讀友是否彼此認識,我想整理出一些結論,也請JAVA高手不吝指點。

先再聲明一次,我不會JAVA!這是很遺憾的事,我也會努力學習!

==================================================

首先是有人在機器人學苑論壇留言,關於icommand程式執行問題。

他們的程式節錄如下:

long diff = 0;
int count=0;
TiltSensor as = new TiltSensor(SensorPort.S4);
NXTCommand.setVerify(true);


結果一直出現錯誤,訊息如下:

Exception in thread "main" java.lang.NullPointerException
at icommand.nxt.comm.NXTCommand.sendRequest(Unknown Source)
at icommand.nxt.comm.NXTCommand.setInputMode(Unknown Source)
at icommand.nxt.SensorPort.setTypeAndMode(Unknown Source)
at icommand.nxt.I2CSensor.<init>(Unknown Source)
at icommand.nxt.TiltSensor.<init>(Unknown Source)
at TiltSensorTest.main(TiltSensorTest.java:9)


經過測試,請將程式順序更改並加上一行:
long diff = 0;
int count=0;
NXTCommand.open();
NXTCommand.setVerify(true);
TiltSensor as = new TiltSensor(SensorPort.S4);

這樣一來這個Tiltsensor才找得到東西。

=====================================================

其次,icommand裡面的
Class Tiltsensor 只支援Mindsesnors的產品,

TiltSensor by Mindsensors.com. Works with: ACCL-Nx-3g3x UNTESTED: ACCL-Nx-2g2x, ACCL-Nx-5g2x

請仔細參考Mindsensors的說明書,以及HiTechnic的說明

兩種感應器的
Sensor Register各個位置的定義不同,當然讀出來的值也不相同。

所以使用HiTechnic的同好請注意,兩者的讀值不同!!你沒有辦法混用,請寫程式時特別注意。

======================================================

有沒有辦法解決,答案或許是有的。

0. 等待icommand改版

1. 你自己修改icommand

2. 請參考Class I2CSensor,讀取不同Register的值,再自行計算轉換。

======================================================

請大家一起努力!也歡迎大家分享你的經驗!




沒有留言:

張貼留言

探奇歡迎大家留言討論!謝謝分享你的意見。