|
本帖最后由 422234 于 2017-8-31 00:09 编辑
1.Raspberry Pi Zero上的资源介绍:
未填充的40-pin GPIO头(标准B + / A + / Pi2B布局)
micro-USB电源端口
micro-USB OTG主机端口
迷你HDMI端口
未填充的复合头(TV)
未填充的复位头(RUN)
CSI摄像机连接器(她很脆弱,请温柔些)
micro-SD插槽,为操作系统准备的
WiFi /蓝牙
RPI zero的体积非常的小,只有65mm x 30mm重9g可以说非常适合无人机这种对重量要求很严的设备,但其迷
你的体积也有不方便的地方,开发的时候接口太少,只有两个micro-USB口,HDMI接口还是迷你的,不是标准
件,因此为了方便玩RPI zero就需要借助Xshell等软件来远程连接 RPI zero 具体连接的方法去网上找相关
的教程即可。
2.硬件材料:
· Raspberry Pi Zero *1
· 8GBTF卡一张
· Pi Camera V2(注意排线规格)
· 三叶草天线
· FPV 5.8G无线发射器5802
· 地面站
3.RPI zero操作系统的选择与烧选
我们这里的操作系统选择的是RPI 官方的操作系统Raspbian Jessie Lite,这个操作系统没有图形界面节省了一部分RPI zero的资源,因为我们在将RPI作为图传时并不需要图形界面。
Raspbian Jessie Lite系统下载链接:链接 下载完后然后下载固件烧写工具 (下载地址)将固件烧写进SD卡里,烧写方法:
打开烧写工具,选择刚刚下载的Raspbian Jessie Lite
选择完后点write等待烧写成功后即可,这样一张带有Raspbian Jessie Lite系统的TF卡就制作成功了。
4.安装python
由于图传程序是python语言,因此需要安装Python modules,我还在网上找到了RPI zero连接到GPS的教程,按照这个安装:RPI连接GPS
[mw_shl_code=bash,true]sudo raspi-config[/mw_shl_code]
[mw_shl_code=bash,true]sudo apt-get update
sudo apt-get install gpsd gpsd-clients python-gps[/mw_shl_code]
5.连接设备
RPI zero供电:
这里选择5V供电,许多飞控都是5V供电的因此从四轴上引出5V电源连接即可。
5.8G无线发射器连接RPI zero
这里有个是老外连接了GPS的接线图(我不会画这种图)
将摄像头排线插入RPI zero的接口中
6.运行py程序
[mw_shl_code=python,true]import picamera
import time
import numpy as np
import string
import random
import os
from PIL import Image, ImageDraw, ImageFont
#设置录像分辨率
VIDEO_HEIGHT = 940
VIDEO_WIDTH = 1280
baseDir='/home/pi/osd/' #录制视频的储存目录
os.system('clear') # clear the terminal from any other text
# Create empty images to store text overlays
textOverlayCanvas = Image.new("RGB", (704, 60))
textOverlayPixels = textOverlayCanvas.load()
# 试用robot字体
font = ImageFont.truetype("/usr/share/fonts/truetype/roboto/Roboto-Regular.ttf", 20)
with picamera.PiCamera() as camera:
camera.resolution = (VIDEO_WIDTH, VIDEO_HEIGHT)
camera.framerate = 60
camera.led = False
camera.start_preview()
topText = "Alt: 310m Spd: 45km/h Dir: N"
bottomText = "47.6062 N, 122.3321 W Home: 322m Rec: 3:22"
topOverlayImage = textOverlayCanvas.copy()
bottomOverlayImage = textOverlayCanvas.copy()
#十字准线
crosshairImg = Image.open('crosshair.png')
# Create an image padded to the required size with
crosshairPad = Image.new('RGB', (((crosshairImg.size[0] + 31) // 32) * 32, ((crosshairImg.size[1] + 15) // 16) * 16))
crosshairPad.paste(crosshairImg, (0, 0))
# Attach overlays
topOverlay = camera.add_overlay(topOverlayImage.tostring(), size=(704,60), layer=3, alpha=128, fullscreen=False, window=(0,20,704,60))
bottomOverlay = camera.add_overlay(bottomOverlayImage.tostring(), size=(704,60), layer=4, alpha=128, fullscreen=False, window=(0,500,704,60))
crosshairOverlay = camera.add_overlay(crosshairPad.tostring(), size=(704,512), layer=5, alpha=10, fullscreen=False, window=(20,30,704,512))
try:
while True:
topOverlayImage = textOverlayCanvas.copy()
bottomOverlayImage = textOverlayCanvas.copy()
drawTopOverlay = ImageDraw.Draw(topOverlayImage)
drawTopOverlay.text((200, 15), topText, font=font, fill=(255, 0, 255))
topOverlay.update(topOverlayImage.tostring())
drawBottomOverlay = ImageDraw.Draw(bottomOverlayImage)
drawBottomOverlay.text((150, 20), bottomText, font=font, fill=(255, 255, 255))
bottomOverlay.update(bottomOverlayImage.tostring())
time.sleep(1)
except KeyboardInterrupt:
camera.remove_overlay(topOverlay)
camera.remove_overlay(bottomOverlay)
camera.remove_overlay(crosshairOverlay)
print "Cancelled"
finally:
camera.remove_overlay(topOverlay)
camera.remove_overlay(bottomOverlay)
camera.remove_overlay(crosshairOverlay)
[/mw_shl_code]
|
|