Advanced Motor Controllers Block

WRO的機器人都相當「快、狠、準」,所以如何精準地控制機器人是重要的課題,明顯地,EV3-G內建的程序遠遠不夠我們使用。

所以我們這是推出了五大模塊,專給WRO競賽組使用,分別是「PD控制器」、「同步移動控制器」、「非線性緩加減速控制器」😍
也因為製作成Block的原因,所以機器人的反應會比使用myBlock或是原生方塊來的更精確。

使用方法

Example 1:單純PD控制器,將感測器值帶入就可以開始PD控制。

Example 2:單純緩加緩減速(ACC)控制器,在前方設置好參數與距離,即可自動化算出機器人的馬力,與停機條件。

這裡順便說明一下,我們的緩加減速(ACC)控制器,所使用的是非線性(non-linear)算式,實務上比較貼合二次函數曲線(quadratic function),也就是加速會是讓機器人稍微助跑後,再更快的加速到目標速度。實現快進快停的競速型機器人操縱。

Example 3:單純同步控制(SYNC)控制器,在前方設置好馬力與反轉設置,後面將Encoder帶入,即可實現同步控制移動

action asphalt auto racing automobile
競速示意圖

Example 4:緩加減速(ACC) + PD控制器,實現PD控制器運行時帶有緩加減速效果,讓機器人走的更穩定。

Example 5:緩加減速(ACC) + 同步控制(SYNC)控制器,實現機器人直走或轉彎時保證軌跡不變,且利用緩加減速來保證不翹頭、不急停。

OFDL Encoder Block and Raw Motor Block,由於是從選單選擇Port,所以可以節省運算時間,讓馬達反應更快,另外由於使用了特殊Encoder手法(軟重置),所以重設非常快,在高速狀態下才不會有延遲現象發生。

其他部分就請看我們YouTube影片吧~~

Update:

Version 1.4:

.Add Optimized Green Motor block (opOutputSpeed)

Download:

Download Link(GitHub):https://github.com/a10036gt/EV3-AdvMotorControllers-Block
Author:OFDL HSU
Ver:1.4

貼心提醒,切勿將設置方塊放置於迴圈內,這將導致程序性能低落。

26 comments

  1. K

    您好感謝分享,可以請教一下 SYNC的原理是什麼嗎

    我拿兩顆馬達的角度差 *KP 在加減到左右輪的馬力裡 可是這樣寫好像不太有效

    1. OFDL小編

      這樣的方式的確不太準確,我們是根據馬力的比例去決策的

  2. 大程老师

    请教ev3编辑器中的自动保存功能怎么做

    1. OFDL小編

      自動保存?

      1. 大程老师

        就是在编程时自动存档的功能

        1. OFDL小編

          用Au3或是C#做個後臺程序,定期按Ctrl+S,這樣比較簡單。

  3. KennyLee

    請問一下,kd和kp是甚麼,謝謝!

      1. KennyLee

        謝謝!

  4. ksdpm

    請問一下,以上的模塊適用於大型馬達嗎?

    1. OFDL小編

      可以

  5. a

    請教一下該如何設定Kp和Kd的數值

    1. OFDL小編

      先調整kp再調整kd

      1. a

        請問該如何使用PD控制器在十字路口做到90°轉彎

  6. 刘老师

    感谢老师分享,但是打开文件后我的模块上面显示“缺失模块”,这个问题该如何解决?是我的打开方式有问题吗?

    1. OFDL小編

      需先匯入模塊再打開程序

  7. 陳小胖

    再看一次還是覺得感動

    覺得說是台灣之光也不為過啊…

    感謝ofdl大方提供研究成果,讓各中心的老師在比賽上,可以更專注在小朋友的創意激發上

    1. OFDL小編

      感謝支持,有機會再去交流交流~

  8. Tiger

    Excuse me, but how do you turn a move steering value (like 50) into two move tank powers? I need to turn my line follower that uses move steering into the advanced motor blocks.

    1. OFDL小編

      The formula of Tank L-R Speed to Steering TURN and Speed is:

      Speed = MAX(L_Pwr, R_Pwr)
      Turn = [100 / Speed] * (L_Pwr - R_Pwr)

      ***compare using absoulte value, return is orginal value, for example L=-90 R=10, the speed is -90.

      So convert Steering TURN and Speed back to Tank L-R Speed is:

      Tank Speed A = Speed
      Tank Speed B = (Speed * (100 / Speed) - Turn) / (100 / Speed)

      ***In Steering block the Turn value you input will multiply 2, so if you key in 100 in steering block turn value, actually is 200.

      I am not sure following info is correct or not, I using the formula inside Move Tank block.

      1. Tiger

        It works! Thank you!

        1. OFDL小編

          You are welcome!

  9. Ak

    非常感谢您的分享!想请教一下,请问如何使用这些模块让机器人在十字路口快速旋转90度或180度?

  10. JEEBIS

    By deepl
    あなたの青色のモーターコントロールブロックはEV3標準搭載のブロックと比べて何が異なりますか?
    モーターをより速く回すのですか?

    1. OFDL小編

      プログラムの応答速度が速くなりました

  11. James

    spike 3.3.1 python 有 SYNC 和 ACC的公式嗎?

發佈回覆給「OFDL小編」的留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *