---
# System prepended metadata

title: Ball Balancing

---

# 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. 馬達的旋轉角度無法穩定平衡球