在 Otto機器人動作之程式碼分析(Otto Source Code Understanding Part I) 一文中沒有看到前進、後退、向左轉、向右轉等動作,於是此文就要說明筆者的閱讀心得。Otto程式中有很多的動作都是呼叫Oscillator.cpp 裡的 Oscillator::refresh ()函式 _inc 是以 360除以迴圈次數算出來的。 迴圈次數是以動作總時間除以每次取樣時間。 不過筆者是用別的方式,如下的mBlock積木: 根據refresh()副程式 使用 sine正弦曲線來產生平順 的動作 例如要將馬達角度從60轉到90度時,不是使用下面的動作, 【設定馬達角度60】 【等待x秒】 【設定馬達角度90】 而是使用下面方法 【設定馬達角度60】 重複底下步驟直到跑完一個sine週期就是 2 * PI (360 度) 1.【設定馬達角度60 + 增加(些許)角度】 2.【等待n毫秒】 根據fresh()副程式,筆者設計出上圖的 動作(action) 積木指令。 成果影片: 讀者可以試著改變動作積木指令中的 LF、RF、LL、RL四個參數的值,例如將 前進積木從原本的 動作 30, 30, 20, 20 , 1 改成 動作 45, 45, 30, 30, 1 看看會怎麼樣。 mBlock程式範例可在此下載 。 給讀者思考的問題: 為什麼前進的動作角度要設定為 30, 30, 20, 20? 為什麼向左轉的動作角度設定為 30, 10, 20, 20? 可以不要使用正玹(sine)函數來完成前進、後退、向左轉、向右轉,這四個動作嗎? 若您覺得文章寫得不錯,請點選文章上的廣告,來支持小編,謝謝。 If you like this post, please click the ads on the blog or buy me a coffee . Thank you very much.