前言
原創文章,轉載引用務必注明鏈接,水平有限,如有疏漏,歡迎指正。
本文使用Markdown寫成,為獲得更好的閱讀體驗和正常的鏈接、圖片顯示,請訪問我的博客原文:
http://www.cnblogs.com/sjqlwy/p/zero_fpv.html
雖然可以買到商品成品,且會比我們做出來的東西更美觀,性能指標更強,但是在折騰中學習,按照自己的需求進行優化改動,享受創造的喜悅,不正是創客精神嘛。
本項目使用手頭現有的硬件,旨在將樹莓派Zero作為飛控圖傳使用,本以為會很簡單,但是軟件適配方面遇到一些問題,困擾了很久。
1. 硬件部分
我們首先來看看硬件列表:
- Raspberry Pi Zero v1.3
- otg table & usb wifi dongle (Xiaomi wifi)
- Raspberry Pi Camera Module v1.3
- LattePanda With LCD Display

1.1 RPi Zero介紹
Zero體積小巧 (可以當鑰匙扣),性能足夠,兼容樹莓派軟硬件資源,這幾點讓它非常適合做一些硬件相關的創意項目。如果把它當做一個小號的樹莓派使用,那真是買櫝還珠?我們看看它的相關配置:
- 1GHz單核CPU
- 512MB 內存
- Micro-USB OTG 接口(可用於供電)
- Micro-USB 電源接口
- 樹莓派 40-pin GPIO引腳
- CSI 攝像頭接口 (僅支持 v1.3)
這里我們准備通過GPIO接口供電,OTG接口連接USB無線網卡與胖噠通訊,搭建Web服務器向LattePanda傳輸視頻流。寫這篇文章的時候新版的RPi Zero W(ireless)已經發布,增加了藍牙無線模塊,更加方便,但是我沒有,而且很難買T_T。
1.2 Zero 供電
“要有電——《創世紀》”
雖然官方僅說明使用Micro USB PWR接口供電,但是使用過程中可以發現OTG接口和GPIO引腳也可以但是不推薦(缺少保護電路)。OTG供電可以參考我之前寫的文章《一根數據線玩轉樹莓派Zero》,不再贅述。因為飛控上不能搞個充電寶弄根數據線,所以准備通過杜邦線連接GPIO接口進行反向供電,這里需要穩定的5v電壓,否則可能有損害zero的風險!

如圖所示,引腳2接+5v,引腳6接地。
更多討論與電路原理圖等請移步:
當然也可以使用專門的供電拓展模塊,比如Pimoroni Zero LiPo:

1.3 RPi Camera Module
Zero僅支持RPi Camera v1.3,彼時zero發布時並沒有v2的攝像頭模塊。關於RPi攝像頭模塊的詳細信息務必閱讀eLinux的頁面。
v1.3采用OmniVision OV5647攝像頭組件,支持500萬像素,實測效果還不錯,比較清晰。
需要注意的是,RPi和RPi Zero CSI攝像頭接口大小是不一樣的,v1.3默認只有適用尺寸較大的RPi接口排線,相用在Zero上的話需要額外購買排線。我是在阿里巴巴上購買的,¥7.5供參考,並額外購買了亞克力支架。


1.4 Wireless Communication
因為在室外操作,信號衰減較小,這里我們的方案是otg線+小米隨身wifi(采用mt7601u芯片)進行無線傳輸。使用小米wifi的原因是因為mt7601u功耗很小,穩定性/發熱/傳輸速度距離都可以接受,后期可能會換用模塊或者加裝天線。

當然也可以選用現成的模塊,比如Red Bear IoT pHAT:

2. 軟件部分
2.1 Zero操作系統選擇
操作系統是相當於開車的司機,為zero選擇一個合適、方便的系統如虎添翼。由於項目需要,我們選擇headless模式進行操作,不需要圖形界面,這里講兩個系統:Raspbian和DietPi。
2.1.1 DietPi
一直以來使用的且十分推崇的樹莓派操作系統,有些過相關介紹,很久沒更新了,現在又增加了很多新特性。其特色包括性能優化,可以快速方便地自動安裝配置各種軟件,無痛學習上手樹莓派,另外作者的腳本寫的很棒,可以學到很多東西。
雖然DietPi支持Zero,但是對OTG 虛擬網卡支持並不好,所以最近一直在嘗試進行適配,也遇到了很多問題,卡在這里很久,記錄如下。
按照《一根數據線玩轉樹莓派Zero》的方法,分別更改boot分區下cmdline.txt和config.txt文件,啟用usb gadget ether功能,並在/etc/network/interfaces里預增加usb0虛擬網卡相關設置文件。使用MicroUSB連接Host后,正常上電可以識別到LAN連接,但是
- 使用ssh登錄zero,即使開啟了網絡共享zero也無法上網;
- windows可以ping通zero,反向ping則無響應。
以上問題在使用Raspbian Lite時並不存在,經群里楓大的提醒,使用Wireshark軟件進行局域網抓包分析和USB2TTL串口模塊直接調試的方式尋找分析問題。結果如下:Wireshark可以捕獲主機ping zero的ICMP協議包,反向無任何響應。最后嘗試關閉Windows防火牆解決,懷疑是Raspbian正常使用,沒有測試ping命令,所以默認為無需關閉防火牆,這里繞了很大彎路。
注意,開啟網卡混淆模式進行監聽數據包時,ping命令會返回(DUP!),提示數據包重復。
此時仍然無法上網,ping www.baidu.com提示unknown host,直接ping IP地址ok,cat /etc/resolv.conf沒有發現正確的DNS服務器地址。手動在interfaces文件增加dns-nameservers 114.114.114.114后解決,可以正常聯網並更新系統。
注意,插拔zero后可能會無法聯網,此時關閉|重新開啟主機網卡網絡共享稍等即可。
完成以上設置之后,安裝Lighttpd網頁服務器、php等之后,重啟失敗,串口無任何輸出。如此這般,屢試不爽。長久的沉默與崩潰,遂放棄。經歷閱讀DietPi腳本源碼,完善修改相關設置,查看了很多Gadget相關驅動說明和其他文檔資料,都准備向github上提交commit了,然后又回到原點,個中滋味,百般無奈,於是怒打了幾把王者榮耀平復心情。。。話說之前玩DOTA的,對王者榮耀這種小學生游戲嗤之以鼻,某日和師弟們玩了下,發現我湊上癮了---
注意,使用otg時推薦使用Raspbian,在正式環境(GPIO供電+USB無線網卡),DietPi是沒問題的。
2.1.2 Raspbian Jessie Lite
平復一下心情之后,我們回到樹莓派基金會官方推薦的Raspbian Lite,無圖形界面,沒有預裝各種Bloatware。之前的文章是以此為基礎進行演示的,各方面比較完善。安裝使用過程中比較順利,這次沒有出什么幺蛾子了,淚目。。。
2.2 RPi Cam Web Interface
Camera 圖像傳輸與控制首先想到的是使用RPi Cam Web Interface來管理Camera和傳輸圖像:
Web based interface for controlling the Raspberry Pi Camera, includes motion detection, time lapse, and image and video recording。控制樹莓派攝像頭的網頁前端,支持motion運動檢測、定時拍攝以及圖像、視頻錄制。
- eLinux wiki 介紹:http://elinux.org/RPi-Cam-Web-Interface
- GitHub項目主頁:https://github.com/silvanmelchior/RPi_Cam_Web_Interface
- 相關討論:http://www.raspberrypi.org/forums/viewtopic.php?f=43&t=63276
項目架構如下,主要包括motion——負責運動檢測、raspimjpeg——圖像捕獲與視頻流傳輸、Web Server (Apcahe|Ngnix|Lighttpd)——網頁控制界面。受限於zero的性能,以及並不需要多少高級特性,這里Web Server選用更輕量的Lighttpd。

原本執着於DietPi就是因為可以一鍵安裝配置好各種軟件,RPi-Cam-Web-Interface也在其中。因為存在問題沒解決,所以按照Daniel Knight的腳本手動操作,仍然失敗。。。最終在Raspbian上按照官網的方法安裝成功。
-
啟用RPi Camera:
sudo raspi-config命令 -
正確連接Camera:金手指朝下(LattePanda也是如此)
-
安裝RCWI:
# 更新系統並安裝git sudo apt update && sudo apt dist-upgrade && sudo apt install git # 下載源碼並進行安裝 git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git cd RPi_Cam_Web_Interface chmod u+x *.sh sudo ./install.sh期間會跳出一個命令行對話框:

使用Backspace鍵刪除,無法使用Del。如圖所示,則可以通過在瀏覽器里輸入
[pi_ip]:80/rcam訪問Web Interface,且開機自動運行。這里[pi_ip]填入樹莓派的ip地址,我這里是192.168.137.2。注意:
- 關閉camera上的紅色led可以在
/boot/config.txt文件增加disable_camera_led=1 - 只想要最簡潔的圖像界面可以訪問
[pi_ip]/rcam/min.php
- 關閉camera上的紅色led可以在
Zero 圖像傳輸部分

分別是a. OTG線+USB無線網卡(RT3070為例,小米WIFI沒找着); b. Zero本體; c. RPi Camera + 排線; d. CH340G TTL轉USB模塊,可以進行調試同時通過GPIO引腳為樹莓派提供5v供電。正式版僅需要兩根線為Zero供電即可。
LattePanda 獲取Zero實時圖像(網頁)

幀率和清晰度都相當可以,拍得比較糊,大家湊合着看,看不清的想象一下。只需要在LattePanda里打開網頁,地址填[pi_ip/dietpicam]即可。注意在System里設置為Default Steam比MJPEG Steam流暢。
移動設備獲取Zero實時圖像(網頁)

和PC版基本相同,注意似乎同時只支持串流到一個設備。
移動設備獲取Zero實時圖像(APP)
這里可以使用免費版的IP Cam Viewer Lite(支持Android和iPhone),當然你也可以購買Pro版,不過Lite版足夠使用了。ICVL內置支持RPi-Cam-Web-Interface,如圖添加攝像頭,修改相關參數。


PC軟件獲取Zero實時圖像(待補充)
因為RPi-Cam-Web-Interface支持視頻串流,我們可以使用VLC或者自己寫軟件(比如QT編寫的圖形界面程序)直接播放視頻流,由於遇到一些問題,后面再完善相關內容。
總結
以上通過多種方式獲得樹莓派Zero傳輸過來的實時圖像,並且清晰度和幀率都相當不錯,符合我們的項目預期。在室外可以讓樹莓派或者LattePanda建立無線熱點,提供兩者通訊的手段,當然,WiFiDirect也可以,待求證。
進一步閱讀
- 模塊成品化比較高的Pi Cam by WMAGNER|hackmypi.com
- 給大家講講什么是FPV|tieba
