
WRO的機器人都相當「快、狠、準」,所以如何精準地控制機器人是重要的課題,明顯地,EV3-G內建的程序遠遠不夠我們使用。
所以我們這是推出了五大模塊,專給WRO競賽組使用,分別是「PD控制器」、「同步移動控制器」、「非線性緩加減速控制器」😍
也因為製作成Block的原因,所以機器人的反應會比使用myBlock或是原生方塊來的更精確。
使用方法

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

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


這裡順便說明一下,我們的緩加減速(ACC)控制器,所使用的是非線性(non-linear)算式,實務上比較貼合二次函數曲線(quadratic function),也就是加速會是讓機器人稍微助跑後,再更快的加速到目標速度。實現快進快停的競速型機器人操縱。
Example 3:單純同步控制(SYNC)控制器,在前方設置好馬力與反轉設置,後面將Encoder帶入,即可實現同步控制移動


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
貼心提醒,切勿將設置方塊放置於迴圈內,這將導致程序性能低落。
K
您好感謝分享,可以請教一下 SYNC的原理是什麼嗎
我拿兩顆馬達的角度差 *KP 在加減到左右輪的馬力裡 可是這樣寫好像不太有效
OFDL小編
這樣的方式的確不太準確,我們是根據馬力的比例去決策的
大程老师
请教ev3编辑器中的自动保存功能怎么做
OFDL小編
自動保存?
大程老师
就是在编程时自动存档的功能
OFDL小編
用Au3或是C#做個後臺程序,定期按Ctrl+S,這樣比較簡單。
KennyLee
請問一下,kd和kp是甚麼,謝謝!
OFDL小編
https://zh.wikipedia.org/zh-tw/PID%E6%8E%A7%E5%88%B6%E5%99%A8
KennyLee
謝謝!
ksdpm
請問一下,以上的模塊適用於大型馬達嗎?
OFDL小編
可以
a
請教一下該如何設定Kp和Kd的數值
OFDL小編
先調整kp再調整kd
a
請問該如何使用PD控制器在十字路口做到90°轉彎
刘老师
感谢老师分享,但是打开文件后我的模块上面显示“缺失模块”,这个问题该如何解决?是我的打开方式有问题吗?
OFDL小編
需先匯入模塊再打開程序
陳小胖
再看一次還是覺得感動
覺得說是台灣之光也不為過啊…
感謝ofdl大方提供研究成果,讓各中心的老師在比賽上,可以更專注在小朋友的創意激發上
OFDL小編
感謝支持,有機會再去交流交流~
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.
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.
Tiger
It works! Thank you!
OFDL小編
You are welcome!
Ak
非常感谢您的分享!想请教一下,请问如何使用这些模块让机器人在十字路口快速旋转90度或180度?
JEEBIS
By deepl
あなたの青色のモーターコントロールブロックはEV3標準搭載のブロックと比べて何が異なりますか?
モーターをより速く回すのですか?
OFDL小編
プログラムの応答速度が速くなりました
James
spike 3.3.1 python 有 SYNC 和 ACC的公式嗎?