设计思路

灵感来源于watch dogs里面的黑客无人机,以树莓派+pixhawk为主体,搭载大疆F450机架,配以2000毫安锂电池,可以凭借pixhawk出色的飞控能力,以及树莓派优秀的运算能力,在空中完成近源渗透,人脸识别,数据转发(星链),无人机送货等多项功能。


注意:建议先给pixhawk和树莓派刷入固件,调试好各项参数(根据情况可以无线调试,建议先调试完可以无线调试的项目),再组装飞机(gps,电机电调调试必须先组装好飞机),不一定要按照文章顺序来做


材料准备

大概要这些

F450机架(动力套装)

如果懂得焊接可以更自由的购买电机电调来组装,不懂焊接的建议直接咸鱼(淘宝上很少或者没有组装好的)买F450的动力套装,因为动力套装插上飞控就可以操作,不需焊接,购买前请注意是否真的不需要焊接。

减震板

用于给pixhawk和树莓派减震,不同的机架组装方式会有不同的减震组装方案,对飞机的保护起重要作用。

电池

2000毫安4S足够了,电池尺寸长155mm宽45mm高28mm已经很极限了,建议买以下这种款式的电池

机载电脑(树莓派或其他嵌入式开发设备)

经费足够所以采用了8G树莓派4b做机载电脑,记载电脑建议配套散热措施

pixhawk套件(也可其他飞控但pixhawk配件较为齐全)

经费足够所以购买了全套的pixhawk套件,包括M8NGPS以及支架,电流计,pixhawk飞控,减震板

游戏手柄(或遥控器)

买个便宜的就行,游戏手柄可以连接手机,手机4g控制无人机,没有距离限制,但对网络稳定性有要求。遥控器稳定性会比4g好,但是控制距离十分有限,而且要额外加装接收机。

摄像头

购买十几块钱的树莓派配套摄像头(或者其他机载电脑的配套摄像头)

随身WIFI

随身WIFI用于树莓派上网,也可以用4g模块,但随身WIFI可以插手机卡,而且可以很方便的插入usb口

其他

锂电池T插转usb,锂电池T插一公分二母,平衡充,BB响,3M胶或者强力双面胶若干,扎带若干,魔术贴带子一条,无线网卡(渗透用)……可以根据需要设计模块来购买,任君想象,任君选择

购物清单

这里是我为项目购买的所有东西,供参考














硬件组装

机架焊接(如果不用焊接可以跳过)

第一步:底板焊接

将4个电调,XT60电源线,和2根JST公头线如图所示焊接在底板上。如下所示:

注意:

1.电调与底板之间的焊点不能虚焊。飞行器启动后电流比较大,虚焊会导致发热严重并脱落,造成飞行中的严重事故!

2.前后四个焊点(上图)不能太大,否则会阻挡以后电池的安装。

3.JST公头线作为预留给云台和图传供电的接口。以往的教程没有提及这点,在后期加装云台图传时稍显不便,需要重新焊接电源线比较麻烦。

焊点要光滑饱满,焊锡覆盖整个焊点和接线。焊接好以后用手拖拽测试是否牢固。

第二步:电机香蕉头焊接和套上热缩管

很多电机出厂都没有焊接香蕉头,需要自己焊接。香蕉头焊接也是组装过程中一个重要的地方。香蕉头焊接不好,通电后会导致电机缺相烧毁。

香蕉头用纸巾包裹好,夹在老虎钳上。用纸巾的目的是防止焊锡里面的松香融化后流到插头部分,会造成接触不好。焊接时先将焊锡融入香蕉头内并填满,然后再插入电机线。如下图所示:

焊接好冷却后,用手拖拽测试是否牢固。

确认没有问题,就可以将热宿管套上,用热风枪或则电吹风高温档或则打火机,吹烤包裹部分。使其紧贴。如下所示:

2812电机焊接好香蕉头如下:

机架组装

1.将电机固定在机臂上。注意:用机架里面配套的银色大螺丝安装电机。如下所示:

2.用机架里面的银色小螺丝将机臂固定在底板上,螺丝先不用拧得太紧,方便后面调节,如下图:

注意:银色头电机和黑色头电机的安装位置不能装错!!!

银色电机螺帽是反丝,以后是顺时针旋转;黑色电机螺帽是正丝,以后是逆时针旋转,这样安装以后才不会射桨!

  1. 安装机架上板

4.上板安装好以后,再拧紧底板螺丝!紧固所有螺丝。

5.连接电机与电调

将电机焊接好的香蕉头分别插到电调的3个香蕉头里面

注意:先任意连接。要无人机正常飞行对电机的旋转方向是有要求的。但做到这步电机还无法启动,等后面飞控调试好以后,我们再来调整电机的旋转方向。

四个电机和电调都要分别接好。

安装飞控以及机载电脑(两种减震方案)

首先先将减震板组装好,两种减震方案都需要先将减震板这样安装好:
先把减震板和减震球组装好,小技巧:先将减震球安装于小板上,然后再连接大板。注意:减震球不可用尖锐的工具安装,减震球破损后就没有减震的功能了。(小球硬塞进去)

取一块3M胶,将减震板粘在机架上板中心。可在四个角用尼龙扎带绑扎一下,进一步加固减震板。


然后,在减震板上方也贴上胶:

第一种(材料少,美观,对机载电脑的保护性更好,成本高)

先将机载电脑贴在减震板上,树莓派4b要将usb口朝向机头(即机架红色臂的方向)随后在机载电脑上用螺丝安装一块装载飞控的塑胶板,再将飞控贴在塑胶板上(飞控箭头方向为机头方向),塑胶板的3D打印文件在下方给出,这个方案贵就贵在这个3d打印板,普遍要50+一块

飞控装载板(点击下载)

第二种(材料体积大,不太美观,对飞控板的保护性更好,对机载电脑的减震效果不太好,成本稍微便宜)

按照第一种的方法,不过是先将飞控板安装在减震板上,然后再加装上文购物清单中的碳钎维扩展版,再将机载电脑装载在扩展版上


我的成品一开始采用的是方案一,后来操作不当炸机后因为经费不足,改用了方案二,实测两种方案对飞行影响不大,不过个人更喜欢方案一


安装GPS支架,蜂鸣器,安全开关等

这些的安装十分简单,用扎带和胶等工具固定即可。需要注意的是,GPS支架有高矮两种,建议选择高的那种,我的成品一开始也是选高款,但炸机之后我就选了矮款(轻信了淘宝商家的“防屏蔽”,其实感觉没啥用)以下附上成品关于这些细节的图片:







(图片拍的不好请见谅,但足够清晰,可以使用)
注意图中没有安装bb响,bb响的安装要求锂电池引出的pin从左到右插入bb响(或者从右到左,不记得了,都试试吧),树莓派采用的是锂电池T插转usb供电(注意输出电压,不然会烧坏树莓派)

Pixhawk的连接

像蜂鸣器,安全开关,gps等都要与pixhawk连接,具体的连接如下:

器件 pixhawk接口1 pixhawk接口2
蜂鸣器 buzzer ——
安全开关 switch ——
GPS GPS I2C
6pin线数传(连接机载电脑) telem 2 ——
电流计 power ——

电调与飞控的连接

这里直接摘录:
按照下图上面的电机标识,将电机对应的电调连接到飞控主要输出口(main out)14通道。电调线从机臂之间穿过到飞控后方。注意:main out接口是从右边开始第7针脚开始(前面是AUX1AUX6辅助接口)

电调连接飞控的顺序不能接错。否则会导致飞机解锁推油门就翻跟斗。

和S500机架的接线一样,注意黑色负极在上,白色信号在下:


下面再附上一张跟桨动力有关的图片,方便理解与调试:
正桨—CCW—逆时针旋转 反桨—CW—顺时针旋转
判断方法一:用桨叶迎风面区分正反桨:螺旋桨横着放,桨叶有字的一面向上,右边桨叶的迎风面在后面的是正桨,右边桨叶的迎风面在前面的是反桨。
判断方法二:桨叶平放,左高右低为反桨,反之为正桨

飞控与机载电脑连接(以树莓派为例)

通过pixhawk侧边的micro-usb与树莓派的usb连接是最方便最稳定的,但是usb线不够美观而且很占位置,于是我采用了serial串口连接方式,以下给出树莓派接口图和pixhawk数传的接口图
树莓派:

图片下方是树莓派USB接口的朝向
pixhawk:

pixhawk的图可能有点看不清,解释一下:telem2口右6个pin,pixhawk箭头朝下,telem从左往右数前三个分别是:5V,Tx,Rx 最右边的是Ground。在连接时,如果pixhawk连接了电流计,则不需要将5V供电和Ground连接树莓派,如果没有连接电流计,则需要将5V和Ground连接树莓派,让树莓派给pixhawk供电。连接时,将pixhawk的5V和树莓派的5V连接,将Ground与Ground连接,将pixhawk的Tx与树莓派的Rx连接,将pixhawk的Rx与树莓派的Tx连接(图片中的连接方式是错的)

摄像头与树莓派连接

将摄像头相机朝向树莓派usb口的方向(金手指朝着typec口,即与usb口反向),缕直摄像头的数据线,直接将金手指插入树莓派靠近usb口的那个插摄像头的接口(大力出奇迹)

软件设置

烧录pixhawk

在以下网址下载mission planner到电脑:
https://ardupilot.org/planner/docs/mission-planner-installation.html
打开mission planner后,将烧录好的sd卡(4G以上,FAT32格式)插入pixhawk的卡槽内,将pixhawk通过usb线连接电脑。点击初始设置-安装固件-All Options 记住上方相应飞机的最新支持版本(例如copter v4.4.0)

在跳出的弹窗里最上一栏版本选择相应的版本,platform选择Pixhawk 1,下面version选择与最上一栏相应的,最下面firmware选择相应的apj文件(比如我选择的是copter)

这套配置适合pixhawk2.4.8的硬件使用
最后点击upload firmware上传固件到pixhawk

离线烧录

可能有时会因为网路问题无法联网烧录,可以选择load costume firmware加载本地固件,文件我放在下面:
离线固件(点击下载)

烧录树莓派

在网上下载树莓派官方烧录工具:https://www.raspberrypi.com/software/
根据树莓派的不同,选择相应位数的带桌面版本的pi os镜像,(可以在官方烧录工具中联网烧录,也可以使用本地镜像,如果使用本地镜像,先到给出网址下载相应镜像文件)我购买的8G树莓派,可以选择64位的镜像:https://www.raspberrypi.com/software/operating-systems/
找一张32G以上的sd卡,使用官方烧录软件格式化(选择操作系统-擦除),格式化后,选择相应系统,先别急着烧录,在烧录界面找到一个高级设置之类的东西,将树莓派初始的账户,连接WiFi等设置好再烧录,不然可能出现无法登录,无法联网等问题(无法连接wifi还可以接网线后ssh,进入桌面连接wifi,但无法登录只能重新烧录)
烧录完成后将sd卡插入树莓派卡槽,给树莓派上电开机,如果树莓派红灯常亮,绿灯不定时闪烁则正常启动。

设置树莓派

ssh进入树莓派,敲入:

sudo raspi-config #这个config还可以改很多东西,比如修改分配给相机的内存大小,或者优化性能

在出来的界面选择interface options,将Legacy camera打开,将vnc打开,进入serial port,将通过serial登录shell关闭,将serial port hardware打开,然后树莓派会询问是否要重启,先不要重启,修改/boot/config.txt,在末尾加上:

enable_uart=1
dtoverlay=disable-bt

保存修改后重启树莓派

安装motion以及飞控软件

在树莓派上执行以下命令

sudo apt-get install motion python3 python3-dev python3-opencv python3-wxgtk4.0 python3-pip python3-matplotlib python3-lxml python3-pygame
pip3 install PyYAML mavproxy --user
echo 'export PATH="$PATH:$HOME/.local/bin"' >> ~/.bashrc #这一行我印象中没用过,算式非必要?

安装好motion后,将树莓派/etc/motion/motion.conf文件中的内容改成以下内容:

# Rename this distribution example file to motion.conf
#
# This config file was generated by motion 4.5.1
# Documentation:  /usr/share/doc/motion/motion_guide.html
#
# This file contains only the basic configuration options to get a
# system working.  There are many more options available.  Please
# consult the documentation for the complete list of all options.
#

############################################################
# System control configuration parameters
############################################################

# Start in daemon (background) mode and release terminal.
daemon on

# Start in Setup-Mode, daemon disabled.
setup_mode off

# File to store the process ID.
; pid_file value

# File to write logs messages into.  If not defined stderr and syslog is used.
log_file /var/log/motion/motion.log

# Level of log messages [1..9] (EMG, ALR, CRT, ERR, WRN, NTC, INF, DBG, ALL).
log_level 6

# Target directory for pictures, snapshots and movies
target_dir /var/lib/motion

# Video device (e.g. /dev/video0) to be used for capturing.
video_device /dev/video0

# Parameters to control video device.  See motion_guide.html
; video_params value

# The full URL of the network camera stream.
; netcam_url value

# Name of mmal camera (e.g. vc.ril.camera for pi camera).
; mmalcam_name value

# Camera control parameters (see raspivid/raspistill tool documentation)
; mmalcam_params value

############################################################
# Image Processing configuration parameters
############################################################

# Image width in pixels.
width 640

# Image height in pixels.
height 480

# Maximum number of frames to be captured per second.
framerate 15

# Text to be overlayed in the lower left corner of images
text_left CAMERA1

# Text to be overlayed in the lower right corner of images.
text_right %Y-%m-%d\n%T-%q

############################################################
# Motion detection configuration parameters
############################################################

# Always save pictures and movies even if there was no motion.
emulate_motion off

# Threshold for number of changed pixels that triggers motion.
threshold 1500

# Noise threshold for the motion detection.
; noise_level 32

# Despeckle the image using (E/e)rode or (D/d)ilate or (l)abel.
despeckle_filter EedDl

# Number of images that must contain motion to trigger an event.
minimum_motion_frames 1

# Gap in seconds of no motion detected that triggers the end of an event.
event_gap 60

# The number of pre-captured (buffered) pictures from before motion.
pre_capture 3

# Number of frames to capture after motion is no longer detected.
post_capture 0

############################################################
# Script execution configuration parameters
############################################################

# Command to be executed when an event starts.
; on_event_start value

# Command to be executed when an event ends.
; on_event_end value

# Command to be executed when a movie file is closed.
; on_movie_end value

############################################################
# Picture output configuration parameters
############################################################

# Output pictures when motion is detected
picture_output off

# File name(without extension) for pictures relative to target directory
picture_filename %Y%m%d%H%M%S-%q

############################################################
# Movie output configuration parameters
############################################################

# Create movies of motion events.
movie_output off

# Maximum length of movie in seconds.
movie_max_time 60

# The encoding quality of the movie. (0=use bitrate. 1=worst quality, 100=best)
movie_quality 45

# Container/Codec to used for the movie. See motion_guide.html
movie_codec mkv

# File name(without extension) for movies relative to target directory
movie_filename %t-%v-%Y%m%d%H%M%S

############################################################
# Webcontrol configuration parameters
############################################################

# Port number used for the webcontrol.
webcontrol_port 8080

# Restrict webcontrol connections to the localhost.
webcontrol_localhost off

# Type of configuration options to allow via the webcontrol.
webcontrol_parms 0

############################################################
# Live stream configuration parameters
############################################################

# The port number for the live stream.
stream_port 8081

# Restrict stream connections to the localhost.
stream_localhost off

##############################################################
# Camera config files - One for each camera.
##############################################################
; camera /usr/etc/motion/camera1.conf
; camera /usr/etc/motion/camera2.conf
; camera /usr/etc/motion/camera3.conf
; camera /usr/etc/motion/camera4.conf

##############################################################
# Directory to read '.conf' files for cameras.
##############################################################
; camera_dir /usr/etc/motion/conf.d
stream_maxrate 15

更改后键入:

vcgencmd get_camera

如果返回:

supported=1 detected=1, libcamera interfaces=0

则说明成功,使用sudo motion 来启动motion服务,并在浏览器中打开相应ip的8080端口来管理摄像头,通过打开8081端口来查看摄像头画面,使用sudo motion stop来停止motion的服务


我也尝试过很多其他的摄像头方案,但motion是最稳定同时也还算方便的,于是采用了motion


树莓派连接地面站以及内网穿透

在手机谷歌商店中下载mission planner和qgc(qgc也可以在其官网下载app),将地面站安装至手机。确保pixhawk和树莓派均已上电,并且pixhawk已经连接好树莓派,打开树莓派键入:

mavproxy.py --master=/dev/ttyAMA0 --aircraft=test --out=127.0.0.1:14550

这句命令的语法是:

mavproxy.py --master=pixhawk连接的端口文件 --aircraft=自己选一个名字 --out=ip:端口

这里推流到本地端口,然后将本地端口映射出去,就可以通过qgc访问了,推流对带宽的需求不高,2m已经很足够了(你也可以将手机的端口通过natapp映射出去,然后推流到qgc)


注意事项:
1.qgc默认使用14550端口
2.地面站软件和mavproxy默认使用udp协议推流,如果要使用tcp协议则要写成--out=tcpin:0.0.0.0:<port>这点会影响到你在内网穿透时隧道的选择(比如natapp不限流量隧道只有tcp)


除了与地面站的通讯需要内网穿透,ssh以及motion也要内网穿透,具体操作不赘述,课自行查看natapp官网:https://natapp.cn/

飞机调试

一切连接好设置好之后还不能起飞,我们可以根据以下的教程在mission planner里调试(注意飞行模式一定要设置,一定要在mission planner里面设置)同时因为我们没有配遥控器,于是就省去了遥控器调试的部分,建议在mission planner里设置完飞行模式后到qgc里调试,调试方法大同小异,在调试完加速度计,罗盘,地平线,电池等后(需要电流计):
飞控连接地面站以后,初始设置 页面会多出 必要硬件,选择 机架类型 ,选择与图片相应的类型

注意:新版固件如果不设置机架类型,就会警报:check firmware or FRAME_CLASS

第三步:加速度校准
初始设置 页面,点 加速度计校准

做加速度计校准前,将飞机水平放置,校准过程会执行 6个动作,每次按电脑回车键或则空格键确认,点击 校准加速度计

  1. Place vehicle level and press any key(水平放置)完成后回车

  1. Place vehicle on its LEFT side and press any key(向左边放置)完成后回车

  1. Place vehicle on its RIGHT side and press any key(向右边放置)完成后回车

  1. Place vehicle nose DOWN and press any key(向下放置)完成后回车

  1. Place vehicle nose UP and press any key(向上放置)完成后回车

  1. Place vehicle on its BACK and press any key(反过来放置)完成后回车

校准完成,会显示calibration Successful。

如果校准失败,请重新校准。

第四步:指南针校准

点击初始设置下的必要硬件菜单,请确保GPS接线正确。

选择指南针菜单,按下图勾选对应的设置以后点击开始,如下所示:

飞控里面和GPS模块里分别各有一个指南针。

GPS里集成的指南针一般叫做外置罗盘是1#,飞控里面的指南针叫内置罗盘是2#。

注意:校准罗盘请远离金属构件、喇叭等强磁性东西。

校准时要求将飞机每个面都朝上旋转1~2圈(正反均可)。

1.水平放置旋转1~2周

旋转的时候注意USB线打结,可顺时针旋转一周,逆时针旋转一周。

或则用数传模块代替USB线,就能避免USB线缠绕。

2.左侧朝下旋转1~2周

3.右侧朝下旋转1~2周

4.机头朝下旋转1~2周

5.机头朝上旋转1~2周

6.底朝上旋转1~2周

校准过程会伴随着2个进度条的行进,当进度条行进完毕,校准就完成了。如果不能校准,请断开连接检查接线是否正确,重新执行校准。

校准完成后要求重启飞控。

重新连接USB后,再连接地面站,指南针页面就能看到指南针的数据。数值小于 400 为绿色代表数值正常可用,当大于 400 黄色代表警告,当超过 600为红色完全不可用。大于400数值需要重新校准。
然后,在对飞行模式,手柄等进行调试和设置,以下给出我的一些设置参考:








调试好后装上螺旋桨,在电机一栏以很小的速度旋转电机,确保风是吹向地下的,飞机才能起飞

起飞时刻

起飞前先使用screen -R 喜欢的名字创建一个screen来运行mavproxy,以防mavproxy掉线,这里的演示时是没有装螺旋桨的,这样不会太危险,实际上电机的转速是非常快的,所以装上螺旋桨飞行时要远离人群,而且要通过练习操作熟练
(视频飞机电机的声音会有些大,提前调小一点音量,因为是用github pages做的博客,视频可能加载不出来)

飞机保养

注意以下两点:
1.飞机的锂电池一定要使用专门的充电器,这样可以监测电压不至于过充,如果充电器不支持监测电压,那就人工监测bb响的数值,充电时一定要清楚电池是什么电池(比如纳米聚合物电池),每一节电池的满电电压是4.2V,最低电压是3.6V,保存电压是3.8V到3.9V,过放和过充都会影响电池的寿命和性能。
2.飞机的四个着陆位置均装上防震海绵胶,有钱的可以买个脚架,但不可以不装任何防护措施

反思总结

1.飞机的成本还可以压缩,比如可以购买更小的机架,更便宜的机载电脑和飞控
2.可以研究更好更方便,可以直接在地面站观看,基于推流的飞行摄像系统
3.飞机的飞行并不好,怀疑是电磁屏蔽导致的,也可能是没有调试好
4.应该在电源处加装开关,而不是靠插拔电源线来启动或关闭飞机电源

⬆︎TOP