2006-12-08

ROBOLAB 2.9 NXT wait for Rotation指令



有人在機器人學苑論壇提出關於ROBOLAB 2.9的問題:

『NXT wait for rotation』沒有+-的方向性?難道是Robolab的大BUG?

筆者將自己的解決方式放在這篇文章,歡迎大家一起討論。

因為從來沒有實際使用這個指令,所以一直以為使用正負值就可以分辨馬達轉動方向。

後來實際寫了程式試試看,才發現NXT Wait for Rotation真的是不管數值正負只管數值大小。

個人猜想這個指令應該只是將舊的角度感應器功能的轉化,(連ROBOLAB說明都很像,好像只有新增了NXT字樣

角度感應器的等待指令沒有真正用到NXT馬達編碼器的功能。只是將數值讀取,供給程式判斷。

舊的角度感應器只提供數值,沒有旋轉方向的判別功能,數值沒有正負分別。

正如論壇裡面nitric兄所說:使用角度感應器的時候,都是配合馬達的控制,所以旋轉方向已經控制在程式設計者的手上。

不過NXT的motor encoder的確提供不同的使用方式,只是ROBOLAB沒有「好好利用」。

在RL2.9剛發行時較為人抱怨的就是無法讀取馬達轉動角度值。

不過在
2.9.3b8的patch已經加上Value of Motor encoder的vi程式

筆者簡單寫了一個測試程式,直接讀取encoder數值做比較,可以順利執行。


程式註解沒有使用中文,所以再稍微說明一下


這個程式先將B馬達的角度值放入紅色瓶子(計數器,container,變數箱)(NXT馬達的encoder剛好是分成360個單位,一個單位恰好是1度),再進入一個「無限迴圈」(雖然用這種方式比較快,但是總覺得這種JUMP LAND的GOTO結構不是很好)

由於程式開始執行時,馬達編碼器會歸零,所以轉動馬達會使馬達編碼器數值產生不同變化,(正值大於零,負值小於零)程式經由分叉判斷,發出Do或是La的聲音。

大家可以使用其他方式判斷馬達旋轉角度,不用再靠Wait for指令。也許可以建議ROBOLAB修正這個問題。

順帶一提,這個b8 Patch是 Beta測試版,根據LEGO ENGINEERING的消息,完整的Patch預定12月中旬或下旬公布。

歡迎討論,謝謝!


沒有留言:

張貼留言

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