树莓派 Zero做飞控图传

前言

原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正。

本文使用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.txtconfig.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运动检测、定时拍摄以及图像、视频录制。

项目架构如下,主要包括motion——负责运动检测、raspimjpeg——图像捕获与视频流传输、Web Server (Apcahe|Ngnix|Lighttpd)——网页控制界面。受限于zero的性能,以及并不需要多少高级特性,这里Web Server选用更轻量的Lighttpd。

原本执着于DietPi就是因为可以一键安装配置好各种软件,RPi-Cam-Web-Interface也在其中。因为存在问题没解决,所以按照Daniel Knight的脚本手动操作,仍然失败。。。最终在Raspbian上按照官网的方法安装成功。

  1. 启用RPi Camera:sudo raspi-config命令
  2. 正确连接Camera:金手指朝下(LattePanda也是如此)
  3. 安装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

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

一根数据线玩转树莓派Zero

0. 前言

原创文章,转载引用务必注明链接。水平有限,如有疏漏,欢迎指正。

本文使用Markdown写成,为获得更好的阅读体验和正常的链接、图片显示,请访问我的博客原文:

http://www.cnblogs.com/sjqlwy/p/zero_otg.html

想要上电启动Zero,所需要的最少配件包括一根MicroUSB数据线MicroSD卡。是的,不需要额外的miniHDMI线+显示器、MicroUSB电源线。那么究竟如何操作的呢,请紧张地往下看。

运行环境:Raspbian Jessie Lite 2017-02-16;Windows 7 Home Pentium x64

1. 基础知识

1.1 USB接口工作模式

Device和Host模式 (待补充…)

1.2 Zero的USB接口

标有PWR IN的是供电接口,没有数据功能;标记USB的是OTG接口,可以使用USB-OTG线接USB-Hub,继而连接鼠标键盘、有线无线网卡、U盘等其他设备。另外该接口竟然可以供电,没有看到电路图,不知道有木有保护电路,不过因为使用笔记本接口供电,另外有人这样供电搞过docker swarm 集群,所以比较放心。

1.3 USB Gadget 驱动

可以实现的功能包括:

2. 实战数据线访问Zero

2.1 烧录镜像

根据我们的需要,选用不带图形界面的Raspbian Jessie Lite下载链接发行日志) 和 dietpi下载链接发行日志)这两个操作系统,先以RJL为例,Windows使用Win32 disk imager, Linux使用dd烧录到存储卡,不再赘述。

2.2 初始设置

其实就是使用USB Gadget驱动将USB-OTG模拟为有线网卡,之前需要的设置比较繁琐,好在新版的Raspbian内核不需要额外安装补丁,可以直接启用,另外虚拟出来的和有线网卡基本一样,不像串口那样只能打开一个终端。方法如下:

# 修改boot分区里的config.txt文件,在新一行增加如下内容 
dtoverlay=dwc2 
# 修改boot分区里的cmdline.txt文件,在rootwait后面增加如下内容,注意每个参数之间空格分开,且都是在同一行 
modules-load=dwc2,g_ether

注意:关于dtoverlay的更多内容可以查看boot分区overlay文件夹的README介绍,dt=Device Tree。

在boot分区根目录创建一个文本文件,然后重命名为ssh,注意去掉.txt后缀,此时即可以 开启ssh登录(新版Raspbian的改动)。

2.3 开机上电

将MicroUSB数据线一头接在Zero USB 接口,一头连接电脑,稍等片刻即可听到“咯噔”一声,此时电脑会安装相关驱动并显示一个新网卡。我们使用远程管理软件如Xshell或Putty,服务器(host)填raspberrypi.local ,端口22,用户名pi,密码raspberry即使用SSH登录控制Zero了。

参考:

2.4 教练我还想上网

我们通过ifconfig命令可以看到获取的ip地址其实是169.254.x.x这种用于本地自动配置的保留地址,而且并不能共享主机的网络访问互联网。上面yfgeek的解决方法是使用squid代理软件,但是联想到之前写的《网线直连控制Guitar (增强版)》,使用Windows系统自带网络共享功能即可。

2.4.1 zero网络设置

# 修改/etc/network/interfaces文件,增加如下内容: 
## USB  
allow-hotplug usb0 # 允许热插拔 
auto usb0 # 开机自动连接usb0,也就是虚拟有线网卡 
iface usb0 inet static # 设置usb0使用静态ip 
address 192.168.137.2 # 设置静态ip地址,和windows的在同一网段组成LAN netmask 255.255.255.0 
gateway 192.168.137.1 # 设置网关 
dns-nameservers 114.114.114.114 # DietPi 需要设置dns服务器

2.4.2 Windows网络共享设置

在主机联网的网卡上右击选择属性——共享标签——选择虚拟有线网卡(一般带有RNDIS字样)保存即可。重启Zero,登陆后即可发现Zero可以访问互联网了。

使用ping命令查看网络连接情况:

大功告成。

3. 借鉴Beaglebone进一步完善

https://github.com/RobertCNelson/tools/blob/master/scripts/beaglebone-black-g-ether-load.sh#L28

http://www.elinux.org/BeagleBoardBeginners

https://github.com/beagleboard

4. raspberrypi.local 背后的故事

https://wiki.archlinux.org/index.php/Avahi

DietPi的设置,自动脚本安装dnsmasq|udhcpd

Pi shank

 

裸板开发操作系统Baking-Pi教程 零

这个系列的文章翻译改编自剑桥大学的关于树莓派操作系统开发的系列文章,课程制作人是Alex Chadwick,不是直译,和原文会有些比较大的区别
而且系列没有针对B+、A+和v2,v3进行更新,一些地方可能会无法工作,尤其是最开始的一些关于LED的课程
不过你可以在GitHub对它进行贡献和更新

这个课程是带你了解开发一个在树莓派上能运行的几乎最基本的操作系统(裸板开发),使用的是汇编语言,准确的说是ARM上的汇编,原作者尽可能的减少汇编带来的难度(其实本质的难度就在那里..),整个课程由11个小课和一个小的入门构成,每个小课都有一些理论知识和一个实际的操作(上机),不过作者都给出了参考答案。
作者在设计课程的时候更加注重于实现一些操作系统常有的功能任务,而不是把操作系统的方方面面都实现一遍,到最后,读者应该是有能力把学到的所有知识都整合到一起,做出一个自己的操作系统的。

课程列表

0 Introduction

这里面不包含任何的动手操作,就是讲了一些简单的基础先修知识而已,即使不看直接上手后面的教程也是没有关系的。

OK LED (入门)

1 OK01

这个教程包含了一个上手的解释,以及具体的如何控制树莓派板子上面的OKACT的LED。

2 OK02

以OK01为基础,控制板子上的LED循环闪烁,也就是反复的点亮和关闭。

3 OK03

在OK02的基础上,使用函数来使得汇编代码具有更大的可读性。

4 OK04

在OK03基础上,如何使用定时器来让LED的闪烁达到精确的时间间隔。

5 OK05

在OK04基础上,使用摩尔斯电码来发送SOS的信号。

显示 (进阶)

Screen01

这个教程会介绍一些基础的图形学知识,并把一个梯度变换的图案显示到显示器上。

Screen02

在上一个教程的基础上,介绍如何在显示器上画一条线和如何产生伪随机数。

Screen03

上一个教程基础上,介绍如何在显示器上画出文字,并对内核命令行的概念做一定的讲解。

Screen04

上一个教程为基础,介绍如何通过操作文本在显示器上显示一些计算量。

输入 (进阶)

Input01

介绍一些驱动的理论,以及代码的链接和键盘输入,通过这个教程就能把字符输入到显示器上了。

Input2

在Input2的基础上,介绍如何为操作系统做一个命令行的接口。

 

需要的材料

硬件

  • 一台计算机用来写代码
  • 树莓派和SD卡
  • 显示器
  • 键盘

软件

只需要一个ARMv6的GNU的编译器,准确的说是一堆工具或者说是交叉编译环境,这个交叉编译器可以把你的源代码转换成树莓派SD卡上可以运行的文件

Linux

有好几种安装方式,对于Ubuntu这种,直接用apt-get就行了

$ sudo apt-get install gcc-arm-none-eabi

操作系统

一个操作系统只是一个非常复杂的程序而已,它的任务就是组织它上面的各种程序怎么运行以及如何给这些程序分配计算机的时间、内存、硬件和其他的资源。常见的操作系统包括GNU/Linux,Mac OS X和Windows这些桌面系统,当然也有安卓和iOS这些手机操作系统。

由于操作系统必须要和实体的硬件有交互联系,所以它必须要对当前运行的硬件底层有一定的具体的了解。为了让操作系统在不同的硬件架构上都能使用,驱动的概念也被提出来了,驱动是操作系统上的一段可以添加也可以删掉的代码,通过它可以让操作系统调动硬件上的某个部分,在整个教程中,我们不会讲到如何创建可移除的驱动,但会重点介绍针对树莓派的驱动怎么来写。

操作系统的设计模式有很多很多种,这个教程只能讲到一些最表面的东西。

汇编代码

这个课程几乎全部都要用汇编来写,毕竟汇编是最接近机器代码的。
那么计算机是怎么工作的呢?假如你上过计算机组成原理课,那你就知道是处理器在不断的执行指令,进行一些数字的加减,然后有内存来存这些数字,同时要和连着的硬件部分相交互,汇编代码就是这些指令的人能相对读的文本格式了。

当我们正常编程写代码的时候,我们写的是C++,Java,C#和Basic等等,然后会有一个程序把这些代码转成汇编代码,然后汇编代码再转成二进制的机器码。二进制的机器码是计算机能读的代码,但对人类而言是几乎不可能读懂的一串0、1序列。

 

bakding-pi-0-1

和普通编程一样,汇编代码也有好几种,不同的种类针对不同的处理器,这也就意味着同一份代码,想用在不同的硬件架构上,我们就需要用不同汇编语言来重写一边,这是一件让人很头大的事情,好在后来有了C语言,我们可以写一份C代码,然后让编译器转换成不同种类的汇编代码,这样就能在各种不同的硬件上都能顺利的跑起来了。

参考

树莓派运行TensorFlow-hotgarlic

来自52Pi社区的热人投稿~欢迎广大网友投稿至管理员

创客们,今天我来分享一下我在pi上运行tensorflow的经历。这篇帖子比较适合对深度学习有一点点了解的创客,最好用过这类开发包,比如keras,tensorflow等等。如果你是pi 的玩家,并且想做一些时髦的玩意,那可以从这里开始。

首先要感谢将谷歌正式发布的tensorflow1.0进行编译的作者Sam Abrahams,光编译就要花上10多个小时,更不用说编译之前的艰苦摸索,如果喜欢这个可以向他捐赠来维护这个平台。

 

Tensorflow的安装:

  1. 准备工作设备:pi3B

    操作系统:Raspbian Jessie with PIXEL(2017-03-02

  2. 登录编译者的GitHub,按照方法1来进行操作,只要网速稳定,半个小时就可以将tensorflow安装到pi上,如果下载太慢,可以下载我的例子,里面有安装包(后缀whl),放到合适的文件夹里面,然后pip install就可以了。图片2图片3
  3. 运行例子下载解压到pi上,然后进入pi的terminal,cd进入例子的文件夹,再运行digits_recog. Py。约十几秒后,在terminal上应该显示0.97,说明tensorflow已经可以在pi上使用了。

例子的制作:

可能看到这篇帖子的朋友大多是pi的玩家,对深度学习不是太了解,所以我就讲解一下例子,也当是深度学习技术的入门知识。

digits_recog. py是一个采用CNN方法,来识别手写数字的脚本。有3个主要部分。

  • 建立一个空的CNN模型(CNN是一种在机器视觉方面相当好的模型)
  • 载入这个模型需要的参数(model文件夹),这些参数是我在速度更快的主机上计算(训练)出来的
  • 运用完整的CNN模型,去识别手写的数字(pkl文件),然后再评估识别率(0.97代表识别正确率为97%)

具体可以看文件里面的comment。

训练的过程也需要先建立模型,并且和digits_recog. py中的模型一样,我的例子文件夹里有个train.py文件,你下载下来的model文件夹就是运行这个训练程序后产生的,你可以在你的台式机上跑一下train.py,当然也可以在pi上运行,只不过速度比较慢。还有,脚本运行时会载入tensorflow自带的训练集mnist,里面的东西是50000个手写数字的像素图片,以及这些图片的答案(对应的数字)。如果减少训练集,会导致模型的训练不充分,造成识别率降低。

图片5

Mnist还包含了测试用的数据,这些数据当然是训练集所不包含的,但是训练集也很大,所以我精简了一下。做成实际的项目后,也不会一下子运行几万个图片。

建模,训练,识别的整个过程,是用tensorflow这个开发工具来完成的,它就相当于一个python的library。

最后你可以自己写几个数字,然后用picamera录到pi上,运行digits_recog. py,看看准不准。

 

期间还遇到了一个坑,那就是用jupyter notebook调试代码,会出现莫名的错误,但是在terminal运行.py就没问题。查看了报错,是在加载参数时发生的,各位喜欢用jupyter的朋友要当心了。

在识别的过程中,也可能提示GPU不能使用等等问题,不用去管,等着输出结果就行。

GPU模式是在训练参数的过程中才起作用的,训练的过程非常消耗硬件资源,所以现在都采用了GPU来加速,将来的项目我打算在云服务器上进行训练,如果有兴趣可以去看看这个网站

 

类似的项目:

这个自动驾驶玩具车的项目,识别的过程不是在pi上运行的,而是其他主机上运行,再去控制小车,我猜一个是当时还没法在pi上装tensorflow,另一个就是担心pi的性能跟不上。

另一个识别物体的小车项目,是谷歌的工程师发布的,我的这次实验的思路也和他一样,就是将参数文件加载到pi上,然后让pi在当地运行识别程序,不过这个项目的模型和参数都是现成的。类似的还有这个项目,可惜这个项目的参数现在似乎下载不到了。所以我打算自己建立模型和训练,这样也可以根据自己设定的任务灵活调整参数和训练数据。

 

一些感想:

大家也不必太担心pi的性能不行,因为64位的系统,52pi的牛人们已经试过了,性能提高很多,官方可能不久就要发布。更值得一提的是谷歌这个tensorflow的开发者,也打算为pi定制人工智能的开发工具,到时候软件更容易装,使用更方便。你可以说他们是双赢互利,因为pi的社区聚集了人气和强烈的创造激情,而谷歌则可以提供强大的技术支持。所以,各位追求新奇的创客,又会有很多好玩的东西等着你们。

 

本人才刚刚开始玩pi,有些讲的不对的地方还请包涵。最后也要感谢52pi社区的牛人们,帮我这个新手解决了一些硬件方面的问题。

 

树莓派64位系统来袭,速度最快提升30倍!

今天,我们团队感受了一下在树莓派3B的主板上运行64bit系统的感觉!那种感觉您如果有幸感受的话,您一定会说:这才是我要的树莓派3B!

体验Debian 9 arm64版本的感觉总结如下:

作为一个专业的用户,我们必须从专业的角度来做一次真实的评测。

硬件测试环境:

  • RaspberryPi 3 Model B
  • 16GB Class 10 TF卡
  • 5v2.5A电源
  • 以太网网线及能连外网路由设备

软件测试环境:

  • GEEEKPI-64bit-beta(内核移植版)

操作系统是基于Debian 9的arm64位源码,Debian 9目前还没发布,目前属于beta版,RaspberryPi 官方也没有发布64bit操作系统的计划,但是我们迫切需要64bit的性能!

另外,只有pi364bitCPU,所以只有Raspberry Pi 3B可以跑这个系统。

 

评测参照组硬件环境与之前提到的环境一致,软件环境为:

Raspbian-2017-03-02        
该系统为32bit

此次评测的关键是看64位系统对树莓派速度的提升,同时关注树莓派的温度,开机速度,CPU性能,数据库性能,网络性能,内存性能和多线程性能。

  1. 首先开机后联网,两台设备全部进入字符界面(console)模式,外部不连接任何外设,通过ssh远程登录到两台主机上,然后安装sysbench软件进行压力测试,并通过htop简单的进行观察。
  2. 执行命令为:
    sudo apt-get update && sudo apt-get –y install sysbench htop iperf3

    1

  3. 首先我们进行对照组的评测

进入系统检查系统版本及硬件架构信息:

1

系统仍然保留了ext4文件系统,同时看到shell环境bash的软件结构为32bit。

3.1测试CPU性能:

Raspbian-2017-03-02-jessie

sysbench —test=cpu —num-threads=1 —max-requests=10000 run

结果:

2

Debian-9-arm64bit-beta

sysbench —test=cpu —num-threads=1 —max-requests=10000 run

结果:

3

总结:

367.2971/25.1195=14.622倍

4 线程测试:

Raspbian-2017-03-02-jessie

sysbench —test=cpu —num-threads=4 —max-requests=100000 run

结果:

4

Debian-9-arm64bit-beta

sysbench —test=cpu —num-threads=4 —max-requests=100000 run

结果:

5

总结结果:

测试4线程的结果是:1017/62=16.40 倍,64位系统仍然占据领先优势

 

8线程测试:

Raspbian-2017-03-02-jessie

sysbench —test=cpu —num-threads=8 —max-requests=100000 run

结果:

6

Debian-9-arm64bit-beta

sysbench —test=cpu —num-threads=8 —max-requests=100000 run

结果:

7

3.2 测试内存性能

内存随机测试:

Raspbian-2017-03-02-jessie

sysbench —test=memory --memory-block-size=1K –memory-total-size=1G --memory-access-mode=rnd  run

结果:

8

Debian-9-arm64bit-beta

sysbench --test=memory --memory-block-size=1K --memory-total-size=1G --memory-access-mode=rnd run

结果:

9

内存连续测试:

Raspbian-2017-03-02-jessie

sysbench —test=memory --memory-block-size=1K –memory-total-size=1G --memory-access-mode=seq  run

结果:

10

Debian-9-arm64bit-beta

sysbench --test=memory --memory-block-size=1K --memory-total-size=1G --memory-access-mode=seq  run

结果:

11

3.3 测试网络性能:

Raspbian-2017-03-02-jessie

12

Debian-9-arm64bit-beta

13

3.4 八线程测试:

Raspbian-2017-03-02-jessie

sysbench --test=threads --num-threads=1000 --thread-yields=1000 --thread-locks=8 run

结果:

14

Debian-9-arm64bit-beta

sysbench --test=threads --num-threads=1000 --thread-yields=1000 --thread-locks=8 run

结果:

15

在进行多线程测试的时候,我选择了1000线程共享8个锁。

3.5 互斥锁测试

Raspbian-2017-03-02-jessie

sysbench --test=mutex --mutex-num=4096 --mutex-locks=50000 --mutex-loops=10000  run

结果:

16

Debian-9-arm64bit-beta

sysbench --test=mutex --mutex-num=4096 --mutex-locks=50000 --mutex-loops=10000  run

结果:

17

 

3.6 文件连续读写:

Raspbian-2017-03-02-jessie

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=seqrewr run

结果:

18

Debian-9-arm64bit-beta

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=seqrewr run

结果:

19

随机文件读写:

Raspbian-2017-03-02-jessie

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=rndwr run

结果:

20

失败了,不支持随机读写。

Debian-9-arm64bit-beta

sysbench --test=fileio --file-num=2 --file-total-size=64M --file-test-mode=rndwr run

结果:

21

4.进入系统检查系统版本信息及硬件架构平台信息22

 

发现架构已经是64bit,并且新增了一款f2fs文件系统,F2FS是三星与华为一起开发的针对TF卡,SSD,EMMC等等闪存优化的文件系统,对延长设备使用寿命,提升设备性能有很大的帮助,同时支持传统的ext4文件系统。

 

总结:

下面通过一张表来进行对比:

测试项目 Raspbian

2017-03-03

Debian 9 Arm64bit 提升倍数
系统信息 Arm 32bit/ext4文件系统 Aarm64bit/f2fs文件系统 见文件系统测试
CPU单线程 367.2971 25.1195 14.62倍

 

 

四线程 1017.6742 62.6079 16.40倍
八线程 1920.0601 62.6711 30.64倍
内存随机 5.7678 2.1925 2.63倍
内存连续 6.3309 2.9392 2.15倍
网络性能 74.6Mbps 94.3Mbps 1.26倍
文件连续读写 5.7655 7.1506 见下文说明
文件随机读写 不支持 21.8336
互斥锁性能 0.0231s 0.0186s 1.24倍

 

最后总结:

文件系统采用了三星与华为合力开发的f2fs,针对mmc和emmc还有tf存储进行了优化,除了大大提升了性能之外,还增加了TF卡的使用寿命,提供了意外断电文件系统的保护,大大避免意外断电导致的文件系统崩溃的情况。

其中由于TF卡的细微差异,导致文件连续读写出现了反转,实际上通过测试文件连续读写的性能方面,f2fs更加优化,超越ext4很多倍。

总体上,64位的系统提供了更好的使用体验,我身边曾经抱怨树莓派跑opencv性能不能够够超越nanopi的小伙伴也逐渐改变了他们的看法,很多朋友表示,曾经在家吃灰的树莓派终于等到了扬眉吐气的这一天!

我个人觉得这次的树莓派性能提升虽然不是硬件层面的提升,但是带来的体验已经超越了以前的各种开发板平台,从树莓派官方的表现来看,今年树莓派官方没有发布新款树莓派设备,而是努力完善了操作系统,在另一个层面上也展示了其对树莓派生态的关注,软件系统的提升将会让树莓派的运行性能和效率上升到一个新的层次,虽然目前的Debian 9 Arm64bit的beta版未能提供图形界面的环境,但是作为服务器端的应用更加明显了,感谢这次提供测试系统的GEEEKPI团队所有成员,为树莓派3B的测试提供了非常好的测试环境和测试硬件!相信未来的树莓派3B上会有更多更好的应用展现出来!让我们拭目以待!

Raspberry Turk:基于树莓派的国际象棋对战机器人开源项目

国际象棋是备受推崇的棋盘游戏,而它同时也能成为非常优秀的编程教材。Raspberry Turk 就是由开发者 Joey Meyer 开发的国际象棋机器人,能够帮助感兴趣的人们学习计算机图形、机器人和人工智能方面的各种知识。

访问:Raspberry Turk

简单来说,Raspberry Turk 就是一款能够跟你下国际象棋的机器人。18 世纪末,出现了名为 Turk 的虚假国际象棋机器人,就是由人类藏在盒子内同其他人对战。不过同原版 Turk 不同的是,现在的 Raspberry Turk 基于树莓派主板,能够进行真正的人机对战,它不仅能够识别棋盘上的棋子,而且能够移动它们进行对战。

这是非常酷炫的 DIY 项目,但是最吸引人的部分是 Raspberry Turk 具备良好的文档支持,Meyer 提供了详实的 Raspberry Turk 开发细节,感兴趣的用户能够进行自己创建。

视频地址:http://www.tudou.com/v/enBrZD0wUqU/&resourceId=0_04_02_99/v.swf

本文转自https://news.cnblogs.com/n/565712

树莓派忘记密码了?四步重设密码

树莓派忘记密码了?四步重设密码,收藏之以供不时之需~

第1步:取出SD卡

将树莓派关机,移除sd卡,插入到你的电脑。

第2步:编辑 cmdline.txt

在PC上打开SD卡根目录,启动部分是可见的,并包含一个名为“cmdline.txt”的文件。在编辑器中编辑这个文本,并将下文插入到已有文本的最后

init=/bin/sh

举个例子,如果原文是这样的:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

那么编辑后应该是这样的:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait init=/bin/sh

确保所有内容在同一行。保存文本内容,从pi出取出sd卡。

第3步:重设密码

将sd卡插入树莓派(我们在这里需要连上显示器和键盘)。将树莓派开机,估计在显示闪动的光标前需要等一会。
在标识符后,输入以下命令:

mount -rw -o remount /
passwd pi

你会被提示输入一个新的密码,请仔细输入后并敲下回车键。系统会提示你再次确认输入密码

passwd pi
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully

这样密码就修改完成了,现在输入以下命令去同步并执行初始化程序

sync
exec /sbin/init

树莓派会继续启动,然后关掉树莓派并且断电。

sudo halt

第4步:编辑cmdline.txt文本

用电脑再次编辑这个文本:把我们在第二步加入的最后数据删除。
现在你可以插入sd卡到你的树莓派啦,再次启动就可以使用新的密码啦。

20170217164851634-0

引用:raspberrypi-spy

本文来自:树莓派实验室
链接地址:http://shumeipai.nxez.com/2017/02/17/how-to-reset-a-forgotten-raspberry-pi-password.html

 

 

 

 

 

使用树莓派打造面部识别安全设备

清单

硬件部分

Raspberry Pi 2 Model B

PIR运动传感器(通用)

Microsoft LifeCam 3000 HD摄像头

伺服马达FS5103R

5V电源

电阻器 1k欧姆

软件应用程序及在线服务

Microsoft Windows 10 IoT Core

Microsoft Visual Studio 2015

Microsoft Project Oxford

Microsoft Azure

Microsoft Azure云存储服务

动手实践

关于项目:

该设备使用Microsoft Project Oxford面部识别方案,检测访问者是否为房子的所有者,通过验证之后会立马打开房门,否则系统将向房屋所有者绑定的移动设备推送一条警告信息,并询问是否给该访问者开门。

使用/集成的服务

Azure storage云存储服务

Microsoft Project Oxford: 面部识别API

使用ASP.Net SignalR将所有者的行为发送给树莓派

使用WNS向移动设备发送通知信息

组件

Raspberry Pi 2 Model B x1

RIP传感器 x1

微软LifeCam 3000 HD x1

伺服马达 FS5103R x1

电池组 x1

1kΩ电阻 x1

电路图以及线路图

14817893813869

14817893927566

Pin分配

14817894206623

 

移动侦测,捕捉图像以及访问者分析

首次运行该应用程序,默认会创建一个IsActive属性为真的PIRProximitySensor类实例。
该实例用于RIP传感器与应用程序之间的连接。如果IsActive属性设置为真,当传感器检测到一个动作发生时会触发MotionDetected事件,然后要求连接到传感器的GPIO pin number执行对应的操作。移动侦测的捕捉影片命令会将获取到的访问者面部图像,发送到Project Oxford服务器进行识别。如果确认为该房屋的所有者,伺服马达将打开房门;否则将获取到的访问者面部图像发送到绑定的移动设备。如果房屋所有者选择打开房门,命令将通过后端服务的SignalR推送给树莓派,然后打开房门。
当在识别访问者过程以及传感器进行必要操作期间,IsActive属性不能被设置为假。关闭房门之后该属性重新设置回真,激活识别系统。

芝麻开门

我们使用伺服马达控制房门。向马达发送2毫秒脉冲时,马达会旋转180°门就打开了;向马达发送1毫秒脉冲时,马达会旋转回0°,门再次关闭。 伺服马达的位置是由脉冲长度决定。转动系统预期至少每隔20毫秒收到一个脉冲,如果脉冲超过1毫秒,伺服马达将转到0°;如果为1.5毫秒脉冲,其转到90°位置;如果是2毫秒,将会转到180°位置。

14817894345998

Project Oxford: Face API

Face API是一个基于云计算的API,其提供了当前最先进的人脸检测识别的算法。Face API的主要功能可以分为两类:其一对人脸进行检测提取其特征提取,其二便是人脸识别 戳这里访问该项目主页。

如何部署以及工作

按照上面图表连接好电路之后,从HomeVisitsManager.VisitsController项目的方案平台选择ARM,之后从模拟器列表选择远程机器并输入你的树莓派IP和凭证,最后运行该方案;多个项目同时运行(所有者的windows phone应用,后端服务以及物联网设备)

引用:

伺服马达:http://razzpisampler.oreilly.com/ch05.html

人脸检测和识别:https://www.projectoxford.ai/doc/face/How-To/identifyperson

项目代码

https://github.com/IslamKHALIL/Home-Visits-Manager

参考来源:hackster,FB小编鸢尾编译,转载请注明来自FreeBuf(FreeBuf.COM)

 

 

 

 

 

 

 

 

 

 

 

 

Python脚本实现树莓派WiFi断线自动重连

实现 WiFi 断线自动重连。原理是用 Python 监测网络是否断线,如果断线则重启网络服务。

1.Python 代码 autowifi.py,放在 /home/pi 目录下:

#!/usr/bin/python
import os, time
while True:
    if '192' not in os.popen('ifconfig | grep 192').read():
        print '\n****** wifi is down, restart... ******\n'
        os.system('sudo /etc/init.d/networking restart')
    time.sleep(5*60) #5 minutes

2.Shell脚本autowifi.sh,也放在 /home/pi 目录下:

#!/bin/sh
python /home/pi/autowifi.py &

3.开机自动启动以上脚本:在终端窗口执行以下命令即可

sudo cp -f /home/pi/autowifi.sh /etc/init.d/
sudo chmod +x /etc/init.d/autowifi.sh
sudo chown root:root /etc/init.d/autowifi.sh
sudo update-rc.d autowifi.sh defaults

每5分钟检测一次,若 WiFi 断线,则自动重新连接。

本文来自:树莓派实验室
链接地址:http://shumeipai.nxez.com/2017/01/25/raspberry-pi-wifi-broken-automatically-reconnect.html

 

Raspbian Update-rc.d 命令用法详解

Raspbian、Ubuntu或者Debian系统中update-rc.d命令,是用来更新系统开机启动项的脚本。这些脚本的链接位于/etc/rcN.d/目录,对应脚本位于/etc/init.d/目录。在了解update-rc.d命令之前,你需要知道的是有关Linux 系统主要启动步骤,以及Ubuntu中运行级别的知识。

一、Linux 系统主要启动步骤

  1. 读取 MBR 的信息,启动 Boot Manager。
  2. 加载系统内核,启动 init 进程, init 进程是 Linux 的根进程,所有的系统进程都是它的子进程。
  3. init 进程读取 /etc/inittab 文件中的信息,并进入预设的运行级别。通常情况下 /etc/rcS.d/ 目录下的启动脚本首先被执行,然后是/etc/rcN.d/ 目录。
  4. 根据 /etc/rcS.d/ 文件夹中对应的脚本启动 Xwindow 服务器 xorg,Xwindow 为 Linux 下的图形用户界面系统。
  5. 启动登录管理器,等待用户登录。

二、运行级别

Ubuntu中的运行级别

  • 0(关闭系统)
  • 1(单用户模式,只允许root用户对系统进行维护。)
  • 2 到 5(多用户模式,其中3为字符界面,5为图形界面。)
  • 6(重启系统)

切换运行级别

init [0123456Ss]

例如:init 0 命令关机; init 6 命令重新启动

启动项管理工具

sudo install sysv-rc-conf //或者使用带gui的工具bum
sudo sysv-rc-conf

三、update-rc.d命令详解

从所有的运行级别中删除指定启动项

update-rc.d -f <basename> remove

按指定顺序、在指定运行级别中启动或关闭

update-rc.d <basename> start|stop <order> <runlevels>

实例:

update-rc.d apachectl start 20 2 3 4 5 . stop 20 0 1 6 .

解析:表示在2、3、4、5这五个运行级别中,由小到大,第20个开始运行apachectl;在 0 1 6这3个运行级别中,第20个关闭apachectl。这是合并起来的写法,注意它有2个点号,效果等于下面方法:

update-rc.d apachectl defaults

A启动后B才能启动,B关闭后A才关闭

update-rc.d A defaults 80 20
update-rc.d B defaults 90 10

启动和关闭顺序为90,级别默认

update-rc.d <basename> defaults 90

本文来自:树莓派实验室
链接地址:http://shumeipai.nxez.com/2017/01/23/updatercd-command-usage-details.html