86me V1.9

1 minute read

86ME v1.9 在馬不停蹄地趕工下接近尾聲了,這次的改版也加入了不少東西,第一點是支援以 Cubic Spline/Constrained Cubic Spline 方式來控制馬達的選項,讓使用者可以不只有走直線一種選擇,不過目前僅支援只含有 Frame 的動作,這點務必注意。第二點為支援兩個來源的 IMU 補償,例如可以利用 y 軸的旋轉角度與角速度來搭配服用,使用上可以說是頗具彈性,不過參數調整就會變得更加複雜就是了 O_Q

Cubic Spline

在馬達的控制上,以往 86ME 所產生的程式是在指定時間內以直直的路線走到目標點,這樣的作法會讓機器人動作看起來很僵硬,實際上也會造成比較多的震動,因為通常在 Frame 與 Frame 之間的轉折處會有速度上的轉變,此時會瞬間產生一個加速度(可以把加速度想做力 —> F = ma),只要這個加速度較大,就會讓機器人震震的。為了解決這個問題,我們採用了 Cubic Spline 來作為控制馬達的軌跡,這個方法能讓馬達在通過每個 Frame 時的速度和加速度更為平順,詳細的作法可以參考這篇教學。然而事情總是不會這麼容易的 XD 在做出新功能後正興高采烈測試時,發現了 Cubic Spline 會因為某些 Frame 與 Frame 之間速度太大(位移/時間)而導致整個曲線出現劇烈的 overshooting。可以利用這個網站更深入了解這個問題。

平均速度變化較平坦的資料(x軸時間,y軸為目標位置)

0 1310
1000 1840
1500 1840
2000 1357
2500 1840
3000 1357
3500 1840

會產生問題的資料(x軸時間,y軸為目標位置)

0 1310
1000 1840
1500 1840
2000 1357
2020 1840
2520 1357
3020 1840

小弟認為針對速度太大的兩點,把它們改為線性的方式,前後則拆為兩條 Cubic Spline,應該就能緩解這樣的症頭,有興趣的玩家可以試試看這樣的方法。那廢話不多說,我們就來看看 DEMO 吧!

DEMO

可以從身體的震動來比較,使用 Cubic Spline 來規劃可以減輕加速度變化所帶來的振動。

Constrained Cubic Spline

針對 Cubic Spline 的 Overshooting,如果要更徹底避免掉,則可以考慮使用 Constrained Cubic Spline,詳細作法可以參考這篇論文,若是採用此法,可以避免編輯好的動作太激動 XD 但因為 Constrained Cubic Spline 的加速度是不連續的,所以運動的平滑性也會稍打折扣,可以算是有得有失吧。以另一個角度來看,為了讓動作編輯盡量簡化,不要考慮與了解太多細節,Constrained 的方式不失為一個好選擇,而對於需要 Natural Cubic Spline 的玩家,小弟建議先對 Cubic Spline 有一定的了解,並且最好能知到所編輯動作轉為 Cubic Spline 之後的曲線,才能將 Cubic Spline 運用得恰到好處。

New Compensating Source (ωy & ωx)

加入了角速度的補償來源,可以幫助機器人穩定所受的外力。也因為來源增加了,每個馬達現在支援兩個來源的補償,最後補償的結果會加總再進行補償。

DEMO

加入了角速度的補償之後,機器人就變得可以快速回穩囉!

Improve UIs

除了上述的功能,UI 部分也做了一些改進,因為以往無法對 Motion 管理,為了解決這樣的不便,86ME 1.9 在 Motion 名稱旁加入了一個新按鈕,可以讓使用者匯入/匯出/更名/刪除 Motion。而 Action List 中的元件現在也可以藉由鍵盤上的 Delete 來刪除。

最近加入的幾個新功能對我來說還蠻新鮮的,也學習到了不少東西,最大的收穫莫過於增加了機器人領域了解吧 XD 至於 86ME,可以說是慢慢走到尾聲了,從超級陽春的 1.0 到可以拿來辦活動的 1.5,再到加入了更多進階功能的 1.8、1.9,之後應該是不會有太大的改版了,Lab 決定要開始鑽研 ROS 的原始碼,而且 86ME 1.9 也算是一個完整的收尾,至於還會不會修改,就看我自己埋藏了多少 BUG 了 XDD

Updated:

Leave a comment