Skip to content

NCNU-OpenSource/Raspberry-ooxx_robot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

無情的圈圈叉叉機械手 Heartless ooxx machine


動機發想 (Concept Development)

看了網路上的OOXX迷因影片這部影片後,我們這組想做一個無情的圈圈叉叉機器人。玩家在紙上畫圈圈後,這個機器人會使用webcamera拍攝紙上的情況(玩家的圈圈),再經由raspberry pi辨識圈圈,然後計算該把叉叉下在哪裡才更有機會贏玩家,最後機械手臂會在紙上畫上叉叉,一來一往完成比賽。

硬體設備 (Implementation Resources)

軟體架構 (Existing Library/Software)

  • OpenCV

  • Adafruit Python PCA9685

  • python3

  • fswebcam

前置下載 (Installation)


1. OpenCV
2. Adafruit Python PCA9685:
git clone https://github.com/adafruit/Adafruit_Python_PCA9685.git
cd Adafruit_Python_PCA9685
sudo python setup.py install

python3: sudo apt install python3


fswebcam: sudo apt-get install fswebcam

執行過程 (Implementation Process)

  • 程式碼

    • sudo.py --辨識影像

    • execute.py --主要程式(判斷遊戲邏輯和結果)

    • robot.py --控制馬達移動機械手畫叉叉

  • 硬體準備

    1. raspberry pi環境安裝
    2. 組裝機器手
    3. 把PCA插到raspberry pi上(太小力根本插不進去!但也不用太用力,因為不用插到最緊就可以使用了。)
    4. 把3顆sg90馬達依照對應的顏色(黑G、紅V、黃S)插到PCA上的針腳
    5. 用橡皮筋把筆固定在機械手前面的爪子上(橡皮筋固定筆時要綁緊,因為機器手臂在紙上操作的頗大力,不綁緊的話筆會歪掉,不便操作)
    6. -> 完成!
  • 場地布置

    • 在一張A4的空白紙上照著規格圖的規格繪製場地(一定要畫準,因為我們對精準度非常要求!)

    • 繪製場地後,將機器手基座對準紙張左上角的點點、墊webcamera的盒子放在右下角"box"點點的右方3cm處,再把webcamera固定在盒子(長、寬)上

開始玩囉! (Usage)

執行程式碼:

python3 execute.py
實際遊玩結果:遊玩影片

心得反饋&遇到的困難

  1. 影像辨識


    原本是要用 feature matching 的方式去抓圓形物體,且也有成功,不過前提是照片畫質要夠。所以當換成用 webcamera 拍照時,畫質不夠或是沒對焦到就偵測得不太準。
    所以後來改成用 template matching 的方式,不過有個問題是因為 webcamera 放置的角度不是垂直地由上而下,所以用 template matching 會變成要用很多角度的模板。
    但是如果要用多個模板,就要把重複辨識的圓形過濾掉,理論上不難,但是那天半夜想了老半夜(天)。
    雖然想出來可以用多個模板解決不同角度的問題,不過我之後發現有一個神之模板,可以偵測到全角度的圈圈,所以目前是採用只用單一模板辨識圈圈。
  2. 機械手臂

    1. 一開始不知如何把馬達停下來,再加上原本 adafruit 給的頻率太高(它的註解上寫 good for server motor),不過可能是因為我們是用樹梅派供電,然後,就有一顆應該是因為這樣燒壞了。
      不過因為我們用不到爪子的引擎,所以就把原本裝在爪子的馬達拆掉,然後和壞掉的馬達互換。(材料給了4顆馬達,但我們只會用到3顆)
      然後終於裝回去後,發現機械手臂用來栓螺絲的木板孔鬆掉,讓螺絲沒辦法很緊地鎖進去,所以就算馬達移動位置的是正確的,但是機械手臂的實際位置因為鬆鬆的所以會很不穩定。
    2. 有一天早上我們要繼續做的時候,原本丈量好的機械手臂要畫叉叉的座標都跑掉了,且程式碼完全沒有動。
      然後當我們都準備好要全部重新量座標的時候,不小心讓馬達敲一下地板,就回到之前的狀態了,真是神奇。
    3. 又有一顆馬達卡死,我們把馬達的電都拔掉還是一樣。把馬達拆下來看後,發現它裡面有一帶動大齒輪的小齒輪卡死。
      最大可能的原因是上面提到,一開始我們亂操馬達,可能就有一點秀斗了,所以就算後來正常跑也是會壞掉。
    4. 在更換馬達時,因為機械手臂結構幾乎都是連貫的,需拆解多部份零件,才能找到角度去更換。
    5. 馬達在長時間測試、運作下,功能開始異常,最終導致燒壞卡死。所以我們得出一結論,要避免馬達在高溫情況下運作太久,並且要注意使用壽命。
  3. 程式碼整合

    影像辨識和遊戲程式在整合時,因為雙方的程式都寫得蠻醜的(尤其是某人寫的函數和變數名稱!!!),所以整合和debug時弄得非常辛苦QQ,以後合作的話要寫好看點嘿

工作分配 (Job Assignment)

  • 黃瑜楓
    • 圈叉演算法、手臂畫叉叉函式、材料購買、創意發想。
  • 王冠權
    • 影像辨識、手臂畫叉叉函式、程式彙整。
  • 蔣馥安
    • 程式彙整、手臂維修、材料購買、創意發想。
  • 李維
    • 手臂組裝、維修、創意發想。
  • 李恩榮
    • 手臂組裝、維修、創意發想。

善用所學 (Knowledge from Lecture)

  • linux系統基本指令

參考資料 (References)

About

play ooxx with robot~~~!!!!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages