2017/01/11

台灣樹莓派Raspberry Pi 工作坊【寵物小車】製作過程摘要記錄

我曾在MakerConf 2016,到台灣樹莓派sosorry開設的【寵物小車】工作坊幫忙擔任助教,底下摘要紀錄從零件材料到成品的製作過程。

此工作坊需花費8小時,課程內容包含Raspberry Pi環境設定、序列埠連接與無線網路設定、GPIO初步入門、H橋電路與馬達驅動、輪子與車體組裝、相機模組與OpenCV影像辨識、Linux開機流程。

若對此工作坊有興趣,想要請台灣樹莓派sosorry開課,或有任何合作機會,請到台灣樹莓派sosorry的網站留言

最終目標是建構具有眼睛(相機)的二輪電動車,搭配OpenCV程式進行影像辨識,讓牠能追逐某顏色的物體,如紅色小球,看看展示影片吧。
所需材料如下圖:

材料清單:
  1. 車體底板,兩個直流馬達與兩個輪子,一個萬向輪,螺絲螺帽與其他組裝零件。
  2. L298N直流馬達控制板。
  3. 相機模組。
  4. 麵包板。
  5. 1KΩ 電阻(1/4W)。 
  6. 1N4004 二極體。 
  7. 10KΩ可變電阻。 
  8. TIP120 電晶體。 
  9. LED。 
  10. 架高螺絲組(螺絲母x4 + 塑膠架高螺絲 x4 + 圓頭螺絲 x4)。 
  11. 公對母跳線(20cm)x2、母對母跳線(20cm)x4。
另外還需要Raspberry Pi 3板子、microSD記憶卡(建議16 GB)、PL2303HXD USB轉TTL序列傳輸線(若無額外準備螢幕鍵盤滑鼠的話)。 

教學投影片可到slideshare觀看範例程式可到GitHub下載

首先下載Raspbian( 我下載的是Raspbian Jessie with PIXEL 2016-09-23),大小約1.52 GB,解壓縮後得到約4.35 GB的映像檔,燒錄到記憶卡,然後開機,進行第一次啟動的相關設定(此處不詳細介紹)。

然後更新既有套件:
$ sudo apt-get update
$ sudo apt-get upgrade -y

安裝寵物小車所需套件:
$ sudo apt-get install -y python-dev python-opencv python-pip
$ sudo pip install readchar bottle

因為之後要撰寫Python程式,所以需要python-dev,以及透過python-opencv使用OpenCV,至於python-pip則是Python自己的套件管理系統,以之安裝readchar與bottle,後者是輕量型Python網站開發框架,之後可經由網頁介面監控寵物小車。

工作坊內容還包括電子零件簡單介紹(LED、電阻、可變電阻、麵包板、電晶體等)、PWM概念、Raspberry Pi的GPIO腳位、Python程式語言初步入門(控制GPIO)、馬達驅動概念與H橋電路等等,底下直接跳到車體組裝。

組裝時,我用了底下的工具,十字螺絲起子,斜嘴鉗。有時要用斜嘴鉗夾住螺絲或螺帽,才能鎖緊。
拿出底板,以及一個馬達需要的固定零件。
撕掉保護膜。
組裝後的模樣。
另一顆馬達依樣畫葫蘆。
兩個馬達安裝完畢。
拿出萬向輪,與所需螺絲。
先是輪子部分。
然後固定到車體底板。
輪子也可裝上。
拿出L298N馬達驅動模組。
先鎖上部分螺絲。
然後固定到底板,並且連接馬達線路到驅動模組的螺絲端子。
從車底看過去的樣子。

電路圖如下,此時只需要看馬達與驅動模組之間的線路。
rpi的GPIO腳位圖如下,小心別接錯了。
電池盒與固定螺絲。
固定到底板上,並連接到驅動模組,此處電池負責給馬達。
另準備行動電源,供應5V電壓給rpi板子。
Rasoberry Pi板子與需要的螺絲。
固定到車體底板上,我只鎖了一組,因為沒有適合的孔洞,可自行鑽孔。
回頭看電路圖,連接rpi板子與馬達驅動模組之間的線路。
拿出相機模組。
安裝相機模組,排線藍色那面朝著乙太網路孔,排線看得到金屬接腳的那面,朝向HDMI埠。
硬體線路完成後,從GitHub下載範例程式

程式pi-follower-car/02-motor/02_4-move_car,可測試馬達線路,執行後,w代表前進、s後退、a左轉、d右轉。

執行raspi-config,到「5 Enable Camera」啟動相機模組;並到7 Advanced Options - A3 Memory Split」設定分配給GPU的記憶體,應大於128以上,建議256或512。

試著使用指令raspistill指令拍照,把圖檔傳回電腦觀看;可使用WinSCP來傳輸。
但那樣太麻煩了,若想要rpi上的GUI軟體畫面、傳送到Windows上顯示,需先安裝Xming(Xming X Server for Windows),啟動後可在工作列上看到如下圖示:
然後啟動SSH連線時,要開啟「X11 forwarding」選項。
然後便可在rpi上執行GUI程式,譬如看圖軟體gpicview,由Windows顯示畫面。
運用Python與OpenCV,以範例程式pi-follower-car/03-camera/03_1-image_load/image_load.py顯示影像處理的女神照片吧lena512rgb.png。
之前是靜態圖檔,動態顯示相機的預覽畫面:pi-follower-car/03-camera/03_2-camera_preview/camera_preview.py。
請參看工作坊的投影片,練習調整色彩空間:pi-follower-car/04-opencv/04_1-color_space/hsv_value.py。
試著抓取輪廓:pi-follower-car/04-opencv/04_2-contours/draw_contour.py。
影像處理的侵蝕與膨脹:pi-follower-car/04-opencv/04_3-image_processing/erode_dilate.py。
嗯,接下來是最後的重頭戲,我們想要寵物小車,持續追蹤某個顏色的物體,使用範例程式pi-follower-car/04-opencv/04_4-color_tracking/color_tracking.py調整HSV,定義出想追蹤的東西,下例為紅色蓋子。
哈,完成後,啟動寵物小車的最終程式pi-follower-car/04-opencv/04_5-follower_car/follower_car.py,讓牠不斷地追著跑吧。

若對此工作坊有興趣,想要請台灣樹莓派sosorry開課,或有任何合作機會,請到台灣樹莓派sosorry的網站留言

8 comments:

  1. 請問葉大 我執行4-4的color_tracking.py 與4-5的follower_car.py
    會跳出以下的錯誤訊息
    Traceback(most recent call last):
    File "color_tracking.py" line 56, in
    hsv = cv2.cvtColor(frame. cv2 COLOR_BGRHSV)
    cv2.error :/home/pi/opencv-2.4.9/modules/imgproc/src/color.cpp:3959: error:(-215)
    (scn ==3 || scn ==4)&&(depth == CV_8U || depth == CV_32F) in function cvt color

    請問是哪兒出問題? 有稍微google一下,但是看不太懂意思。

    ReplyDelete
  2. 應該是因為沒有載入 V4L2 driver,

    細節您可以參考投影片 p156-p168
    https://www.slideshare.net/raspberrypi-tw/raspberry-pi-65881533

    ReplyDelete
  3. 謝謝葉大 原來每次都需要載入 才能使用
    想再請教一個問題 我在執行4-5範例 我有將範例稍微修改一下讓他同時辨識兩個顏色
    在辨識顏色的時候 背景用隨便單一顏色的紙張 如果前面只有單一顏色的物品
    這時候 好像都不會辨識出來 換了其他顏色也一樣 為什麼會這樣呢?
    情形截圖 http://ppt.cc/mGST5

    ReplyDelete
  4. 不好意思想請問一下這個問題,我按照您的過程中使用的這些範例
    我更新了套件以及pip等東西,但是在執行 02_4-move_car 過程中 一直顯示
    Traceback (most recent call last):
    File "/home/pi/pi-follower-car-master/pi-follower-car-master/02-motor/02_4-move_car/move_car1.py", line 19, in
    import readchar
    File "/home/pi/pi-follower-car-master/pi-follower-car-master/02-motor/02_4-move_car/readchar.py", line 9, in
    from .readchar_linux import readchar
    SystemError: Parent module '' not loaded, cannot perform relative import

    想請問一下是什麼地方做錯了呢??

    ReplyDelete
    Replies
    1. 詢問台灣樹莓派sosorry後,回答如下:


      我猜他是使用 python3 執行,那第一個套件可能就沒裝到,或是套件的使用方法略有不同。

      建議:

      1. 先更新
      $ sudo apt-get update

      2. 確認套件是否安裝成功
      $ sudo pip install readchar bottle

      3. 使用 python 2 執行
      $ cd ~/pi-follower-car
      $ cd 02-motor/02_4-move_car/
      $ python move_car.py

      Delete
    2. 原來,我是用python3 去執行,套件我都確定有安裝過
      我使用python2之後就直接可以執行了,
      謝謝!真的非常感謝!我還跑去用別人不同的寫法才成功

      Delete
  5. Harrah's Cherokee Casino Hotel - JamBase
    Harrah's Cherokee Casino Hotel 과천 출장안마 in Cherokee, 구리 출장안마 NC, offers 익산 출장안마 gambling, luxury hotel accommodations, entertainment, and fine dining. 남원 출장샵 Book 영주 출장마사지 online or call the

    ReplyDelete