今年電賽我們隊伍選擇的是B題,滾球控制系統。最後我們得到了省特和國一,也算是了結了我大一時的心愿吧。下麵對這次比賽進行一下總結,以後回憶起來的時候也有個念想。 滾球控制系統是一個多變數、非線性控制對象,是球桿系統的二維擴展。本系統以Arduino Due為核心控制板,通過攝像頭採集到球的位置信息,經 ...
今年電賽我們隊伍選擇的是B題,滾球控制系統。最後我們得到了省特和國一,也算是了結了我大一時的心愿吧。下麵對這次比賽進行一下總結,以後回憶起來的時候也有個念想。
滾球控制系統是一個多變數、非線性控制對象,是球桿系統的二維擴展。本系統以Arduino Due為核心控制板,通過攝像頭採集到球的位置信息,經過PID的控制演算法來控制舵機的運行,從而控制小球的運動。其目的是讓一個自由滾動的小球能夠平衡在平板上特定的位置,或者沿一定的軌跡滾動。經測試,系統能夠實現題目要求的各項功能,實測指標均達到或超過題設要求。
關鍵詞:滾球控制系統;Arduino Due;位置檢測;PID控制
當時網傳已經有板球系統這道題了,雖然說心裡沒當一回事,但是還是默默地查起了一些資料。
板球系統、板球系統,最關鍵的就是需要檢測到球的位置,然後通過板的機械運動將球保持在指定的位置上。
怎麼檢查球的位置呢?有兩種不錯的方法:一種方法是利用電阻屏,還有一種是利用攝像頭。這兩種方法比賽之前我都試過,電阻屏的話市場上有賣的一般就是7寸-17寸的四線、五線電阻屏,它獲取小球位置比較靈敏,而且精度高、延遲低,對小球的材質、顏色沒有要求,但是要求小球具備一定的重量,要不然檢測不到球呀。至於攝像頭檢測小球的位置的話,一種方法是檢測圓形,另一種方法是顏色檢測,一般顏色檢測的速度會快一些。如果使用攝像頭檢測小球位置的話,那麼對處理器的運算速度要求較高,而且對光線的要求也較大,但是也可以使用開源攝像頭(如OpenMV,pixy等),直接把小球位置信息等通過I2C、USART傳輸回單片機上。我們最後使用的就是Pixy。
最後賽題出來的時候,我們就傻眼了,居然和網傳的消息那麼像,但是尺寸卻那麼巨大。本來寫好的電阻屏的程式是用不到了,只能用攝像頭檢測小球位置這種方法了。
當然我們想,小的我們都做好了,大的豈不是直接把原來的結構放大一些就是啦。但是後來發現我們想多了,尺寸變大許多導致的結果就是,機械結構需要重新設計。之前小板球系統的穩定性超級好,根本不會出現板子的抖動問題。但是等系統變大許多,板子變得很大很重,攝像頭需要架設的很高,就帶來了許多問題了。
攝像頭是距離板子1m多的位置,這帶來的後果就是,可能攝像頭找不到那麼小的球的位置了。
在比賽的那幾天中,我們的機械結構換了4套。感覺一直都是在做木工活。第一套結構是純木質的,各個部位全部用膠粘死。第二套是板子用的泡沫板,其他部分還是木質的。第三套是板子用的黑色噴漆鐵板,支架是鐵的,底板是木的,整套結構超級重、而且也不能拆卸。第四套結構的話,我們板子選擇的是60*60*1cm的雪弗板,這個比較輕、而且也比較平,底板是PVC版,畫原理圖然後切割,支持部分是鋁架,所有部分均可拆卸。
等機械結構做好之後,還剩一天的時間來寫程式,簡直奔潰,感覺比賽的大部分時間全部都在設計機械結構。但是這是非常必要的,因為機械結構如果不好,你的程式優化的再好,也是不會穩定的,尤其是這麼巨大的一個裝置。
前面說了一堆廢話,下麵說一點有用的:
①我們選用的控制器是Arduino Due。因為使用它開發簡單方便快速,而且時鐘頻率大84Mhz,相比於普通的stm32f1一點也不遜色。本來想直接用樹莓派了,但是想到用樹莓派可能有違規的可能,所以還是算了。
②攝像頭選擇的是pixy。利用Pixy圖像識別感測器檢測小球位置坐標。Pixy支持多物體、多色彩的顏色識別,同時也支持多種通信方式,它搭載的圖像感測器配合強大的硬體,可以將小球的位置坐標信息快速地發送給微控制器。註意!!!這可是直接把小球的坐標發到單片機里唉,所以你用性能差一點的單片機也沒有關係了,這大大的簡化了程式的複雜性,省去了自己寫圖像處理部分的事,節省了許多時間。
③舵機的話我們試了好多舵機,貴的、便宜的,最後還是選擇了MG996R。具體原因我不多說,大家可以買來試試。
(待續。。。)