2015-07-11

EV3 程式教學 25 馬達漸進加速 Ramp Up



控制NXT或EV3樂高機器人的運動時,我們都習慣直接設定馬達的馬力Power,當設定為100時,馬達便會以100%的電力轉動。

(想像一下,如果坐在靜止(時速為零)的汽車上,突然加速到時速100公里,你會因為牛頓的慣性定律,往後跌坐在椅子上。)

不過這種方式的轉動會使馬達從靜止瞬間加速。在某些情況下,機器人可能因為馬達輪胎瞬間高速旋轉,造成摩擦力不平均,機器人會偏斜。若是機器人正在搬運物品,也有可能掉落。


為了預防這種狀況發生,我們希望機器人馬達(輪胎)的轉動是溫和的漸進加速。



在NXT-G裡面的Motor命令有這種Ramp Up及Ramp Down的選項。EV3軟體取消了這些選項,所以我們必須自行撰寫程式,模擬漸進加速的功能。

首先想到的當然是調整馬達馬力,從0開始上升到100,我們可以使用一個變數Variable,在迴圈裡每次加一,將變數數值透過資料線傳送到馬達命令的馬力值。

下面是簡單範例:


設定一個變數Ramp,迴圈內變數加一,間隔0.05秒,迴圈以次數Count控制,次數設為100,程式跳出迴圈後,發出音樂聲。我們可以看到馬達漸漸越轉越快。

在探奇的EV3小品教學中,曾經提到Loop Index,它是迴圈循環的次數,每次做完迴圈內的命令就會增加一次。善加利用這個索引值,就能省掉加法計算的命令。簡單範例如下:


別忘了迴圈索引數值是從零開始計數,也就是第一次執行迴圈內部的命令時,Index=0。

馬達開始慢慢加速了嗎?

接下來請想一想,如何讓馬達漸漸減速呢?

最直接的想法就是馬力從100減到0。可是Index是往上加的。這時就需要數學運算的幫忙。

Index 0 --> Power 100
Index 1 --> Power  99
Index 2 --> Power  98
Index 3 --> Power  97
........
Index 99 --> Power 1
Index 100 --> Power 0

看到了嗎?可以用100減掉Index數值,簡單範例如下:


先將馬達以馬力100轉動,然後你的馬達會漸漸減速停止。第一個命令需要調整Brake at End:False,否則馬達會頓一下。

上面的範例是單馬達旋轉,你可以將之修改為Move,控制兩顆馬達,如此機器人就能漸進加速前進了。

祝你成功,下次上課見!


延伸閱讀:

EV3 程式教學20 - Loop Index