# Ball Balancing ## 硬體配置 - raspberry pi 連接鏡頭與arduino - arduino連接兩個伺服馬達 - 馬達連接紙板控制平台 ## 程式流程 1. 偵測球位置(hough) ``` ``` 2. 將球中心座標用ros publish出去 ![](https://i.imgur.com/uGgBmIu.png) 基本上架構可以參考 https://pse.is/4s7q8q 要注意的是一次要publish 2個topic(x,y) 3. arduino用ros subscribe座標 座標要考量相機的畫面比例,去偵測物體的位置 以下Code分別為對板子兩方向(x, y)的調整, 球離中心越遠,馬達轉動的角度越大(以90度為基準點,範圍0~180度) 實作中,盡量以參數的形式去改變轉動變化,有x、y各方向的Code(寫法相同) 備註1:Code中,當沒有收到信號時,會讓ros丟出(-1,-1)的信號, 初始階段時,在沒有目標的形況下,會先讓板子初始化到基準點; 在後續的偵測中,如果再收到(-1,-1)的信號,就會無視此信號並保持原狀態 備註2:Code中的c參數是以三次曲線的變化去調整轉動趨勢,但可以多嘗試其他更適合的曲線 ![](https://i.imgur.com/u7T0EDS.png) ![](https://i.imgur.com/WQ7aFOg.png) --- ![](https://i.imgur.com/T3idgIh.png) ![](https://i.imgur.com/skKeL0n.png) 虛擬機裡安裝arduino(與ros連結) (安裝可參考 https://pse.is/4s8qpx) 可使用ros_lib內建的草稿去改寫 記得要在樹莓派裡裝arduino,才可以在連接後,讓板子正常運作 4. 馬達根據座標做出對應的旋轉,利用轉動力去改變板子傾斜 ## 達成目標 1. 相機能將球的座標傳至raspberry pi 2. 馬達能根據座標做出正確的旋轉方向 ## 遇到的問題 1. 硬體架構不夠可靠穩固 2. 相機的更新率與影像辨識的速度跟不上球移動的速度 3. 馬達的旋轉角度無法穩定平衡球