Created on Sun Nov 4 2018??????? @author:JohnsonGao
基礎(chǔ)知識:
圖像處理部分:
平時&灰度化gray? 0=>黑 ? ?255=>白 ? e.i.數(shù)字是“亮度值”
(注意這里官網(wǎng)simpleCV tutorial中的例程都是錯的,grayscale寫成了greyscale)
官網(wǎng)截圖:

binarize 大于閾值(更白的)=>0(黑),小于閾值(更黑的)=>255(白)
經(jīng)過黑色的拍照、轉(zhuǎn)換成矩陣、print,灰度值的0對應黑色(與所學一致)
但是bynarize會反一下。
先dilate操作會變亮(白),erode會把黑的變多。
膠帶寬度大概22個像素(后來才知道的是跑道不是只有黑色膠帶,黑色膠帶外面是深藍色的場地,因此不需要檢測膠帶的中點進行計算)
https://pinout.xyz/pinout/pin32_gpio12 網(wǎng)址有對應的不同規(guī)則定義的管腳號(import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)#setmode
時可以定義到底使用哪種管腳定義方式):

(gpio readall命令也可以看到對應的列表)

所遇到的問題及解決方式:
問題1:Mac上寫入系統(tǒng)和出問題后的抹除
使用Mac的Terminal命令行
df –h 查看掛載的SD卡
diskutil unmount 卸載分區(qū)
diskutil list 確認設(shè)備
sudo dd bs=4mif=imgfile of=/dev/sdaddress
見http://www.itdecent.cn/p/5dc83db2b78e,
http://www.itdecent.cn/writer#/notebooks/30116262/notes/35440028
問題2:安裝SimpleCV
1.安裝依賴:
sudo apt-getinstall ipython python-opencv python-scipy python-numpy python-pygamepython-setuptools git
2.從github下載資源
git clonehttps://github.com/sightmachine/SimpleCV.git
3.在的本地文件夾運行安裝程序
cd SimpleCV
sudo pythonsetup.py install
問題3:樹莓派攝像頭設(shè)備找不到/dev/video0的解決方法:
開始的時候用simpleCV進行拍照的操作:
from SimpleCVimport *
cam=Camera()
img=cam.getImage()
會提示/dev沒有video0
解決方法1:/etc/modules中添加一行:(/etc文件夾目錄一般用來存放程序所需的整個文件系統(tǒng)的配置文件)
bcm2835-v4l2注意:這里是字母L不是數(shù)字1
解決方法2:創(chuàng)建/etc/modules-load.d/rpi-camera.conf(.conf 是config的簡寫,也就是配置文件,多用于存取硬件驅(qū)動程序的安裝配置信息)
里面內(nèi)容:
# camera device
snd-bcm2835
bcm2835-v4l2
問題4:python與C程序的兼容問題:
解決方法:通過gcc XXX.c -o XXX -lwiringPi -lpthread生成對應的可執(zhí)行文件XXX,然后通過python調(diào)用命令行執(zhí)行可執(zhí)行文件(sudo ./XXX)的形式來實現(xiàn)。
具體python調(diào)用terminal方式——使用os.system('terminalcode')或者os.popen('terminalcode'):
#used to testxjreturn.c's executable file and read the return value
import os
output=os.popen('sudo./xjreturn')
outputvalue=output.read()
print outputvalue
#注:這里的output.read()讀取的是sudo后的輸出,即對應C程序中的printf(”YYY”)中的YYY。
問題5:Mac實現(xiàn)遠程操控(學習文件中介紹的是Windows的,Mac中很多東西是不一樣的)
解決方法1:遠程命令行ssh操控:
找到樹莓派對應的ip地址=>在Macterminal中使用ssh
pi@ipaddress=>輸入密碼:raspberry
實際截圖:

解決方法2:遠程桌面操控:使用Microsoft Remote Desktop(簡單一點,推薦用這個)或者Vncviewer

具體操作見:http://www.itdecent.cn/p/a8b3ccad9535?utm_campaign
其中vnc的方式很多網(wǎng)上的教程不夠細化,可以看:https://blog.csdn.net/u010900754/article/details/53048998
問題6:幾種圖片格式不一致,影響不同庫中圖片處理函數(shù)的同時使用,需要轉(zhuǎn)化格式
因為我們需要對圖像進行濾波等處理,為了使用python中的skimage的庫,我們通過type(operation)查看各個步驟后的對應的代表圖像的變量的格式。后來我們發(fā)現(xiàn)大概有如下的區(qū)別:Numpy數(shù)組,cv的圖像格式instance。其中數(shù)組有兩種,cv和skimage中的定義是不一樣的。
具體的:skimage圖像格式
通道:RGB ??? 像素值:[0,1]
Opencv圖像格式
通道:BGR ??? 像素值:[0,255]
解決方法:先用cv中的灰度化grayscale函數(shù)(灰度化后RGB值基本相等,不用管RGB順序問題),再乘除255來進行轉(zhuǎn)換。
【也可以使用已經(jīng)寫好的函數(shù)進行轉(zhuǎn)換,可以轉(zhuǎn)換彩色圖像(考慮到了RGB三色的順序也不一樣的問題)。詳見:
https://blog.csdn.net/san_junipero/article/details/79958305】
問題5:例程中的程序會跑飛,于是通過查看官網(wǎng):http://wiringpi.com/reference/software-pwm-library/
官網(wǎng)截圖:

softPwmCreate(intpin,int initial value,int pwmRange)
softPwmWrite(int
pin,int pwmvalue)中的pwmRange推薦值為100,過大可能因為硬件頻率不夠而無法停下,后面會跑飛(最高速繼續(xù)運轉(zhuǎn))。
問題7:命令程序優(yōu)先級的實現(xiàn)
為防止跑出賽道,我們可以在使用攝像頭的同時使用使用傳感器進行輔助。比如循跡傳感器因為可以檢測出深色(黑色)和白色而可以加以使用。為簡化程序修改,我們將左右循跡傳感器左右交換后放置到外側(cè)。之后通過if判斷來實現(xiàn)。
問題8:通過SimpleCV使用攝像頭拍攝圖像并使用Python進行處理
使用SimpleCV得到圖像,先后進行dilate()和erode()(把雜點去除,分辨、保留跑道和邊緣等),再進行bynarize(parameter)二值化處理,parameter以上的(白)會變成0(黑),以下的(黑)會變成255(白)——會黑白顛倒?。?!相當于白色跑道最后處理后會變成黑色的。
然后通過提取特定若干行的黑色(跑道)的像素值(通過numpy.nonzero(范圍)),然后取兩頭的均值進而找到跑道中點,比較識別后的跑道中點和視野中點決定是否轉(zhuǎn)向以及轉(zhuǎn)向哪邊。如果只有一邊則說明偏向那一邊,往另一邊轉(zhuǎn)向。
問題9:多線程的實現(xiàn)——Python圖像處理和傳感器的聯(lián)合使用
因為我們的Python圖像處理函數(shù)速度較慢,我們希望能夠圖像在一邊處理著的同時運行使用傳感器和圖像綜合的輔助程序。同時打開兩個terminal通過讀寫同一個文件來傳遞參數(shù)的方式即可實現(xiàn)。
其他常見問題:
1. 網(wǎng)絡(luò)沒連接導致命令行執(zhí)行安裝東西時下載不了,無法進行。
2. 未進行sudo apt-get update進行更新操作,部分包安裝不了或版本過低。
3. 不同樹莓派小車的地址、熱點WiFi名稱都一樣(pi3,12345678),所以在一起的時候回連接到別人的小車上,可以使用網(wǎng)線杜絕這種情況的發(fā)生。
本來我們是希望徹底放棄C程序通過使用Python的API接口進行操作的,但是Python的wiringPi部分出現(xiàn)了問題,無法持續(xù)運行,只是例程的一小部分可以運行,所以就繼續(xù)延續(xù)使用了C程序來生成對應的可執(zhí)行文件了。