使用Raspberry pi进行FPV控制和监视沿H.264向量的帧中的运动的主题并不新鲜。 该开发并非假装是原始的,并且花了相对较少的时间(有时从7月开始在周末)。
但是也许我的经验(和资料来源)对任何人都有用。
在邻居说有人正在钻研门锁之后,出现了需要在公寓中进行视频监视的想法。
首先要引起注意的是使用相机v1.3在Raspberry pi 0上安装了著名的运动程序。 原则上,它可以解决问题。 如果您对通过邮件发送的通知感到满意,并且fps = 4-5。
但这似乎并不有趣。 手边是一个平台,带有旧实验的车轮和线束,以及旧笔记本电脑的18650电池。
结果是移动视频监控和运动检测的有趣组合。
因为我有租用的VPS,所以从外部(NAT后面的家庭网络)访问没有问题。 如果您不滥用行驶和大灯,电池寿命约为4天。
您可以骑在公寓周围,远程控制摄像头和平台,然后将其置于移动检测模式下的任何所需位置。

硬体
所有硬件可以分为两部分,第一部分不依赖于第二部分,可以单独使用:
视频监控模块
- 树莓派零
- USB WiFi加密狗
- 树莓派相机v1.3
- 2个步进电机28BYJ-48 + ULN2003驱动程序
通过覆盆子的SPI管理移动平台
- 4S 16x18650锂离子+ 4S 30A锂离子18650(BMS)板+具有电流和电压稳定功能的DC-DC充电
- dc-dc降压转换器(15v-> 5v)。
- stm32f103c8t6板
- 4个齿轮马达+ L298N板
- 12v LED灯(前灯)+ IRF3205上的控件(+ smd pnp和npn)
Raspbian映像已配置为只读模式。 在这种配置下,覆盆子很容易承受意外的断电,因为它们根本不使用SD卡进行记录。
软体类
该软件包含3个独立的组件。
Android应用程式(已在LG6 Oreo和旧的Samsung S5 Lollipop上测试)
FPV模式- 以指定的分辨率和比特率显示来自摄像机的H.264视频流
- 相机和平台控件
- 记录流中的视频和照片。
Android服务模式- 主机轮询(以指定频率)
- 按事件将“运动”的事件照片加载到帧中。
python上的Raspberry Pi主机(picamera + spidev + RPi.GPIO)
FPV模式- 广播H.264流(使用Android应用程序指定的参数)
- 接收步进电机的控制命令及其管理。
- 通过SPI广播控制命令(如果启用了模式)
跟踪模式在框架中的移动。- 框架中的运动检测(根据Android应用程序指定的参数)
- 接收请求“以及框架中是否有移动”,并根据请求上传照片
- 将主机中的移动照片发送给主机(无论应用程序如何)。
stm32f103上最简单的固件- 接收SPI命令
- 控制车轮和PWM电机的旋转方向。
- 大灯控制。
运动追踪
事实证明,在h.264向量上进行跟踪非常麻烦,而且容易出现误报。 网络上很少有针对H.264的运动检测实现。 我都试过了。
最原始的选择是对长度超过某个阈值的向量计数。 而且,如果任何矢量都大于阈值,则表示该帧中存在运动。
las 此选项仅适用于说明原理。 误报过多。 特别是在颜色和纹理均匀的表面上。
所有其他选项要么给出过多的误报,要么根本不满足性能标准:“应在帧时间内处理”。
结果,我选择了我的选项。 尽管它实际上不会产生误报,但它需要连续移动几帧。 但是,这种方法比每天几次由于照明的变化或通常由于相机的“决策”导致画面中无法理解的“运动”引起的误报更好。 MV H.264的可靠检测算法主题通常是一个单独且复杂的主题。 算法需要大量时间进行实际调试,并且我对运行时有严格的限制。
运动矢量示例(快照实用程序模式):


在事件“框内移动”时,将生成通知。

原则上,就我的目的而言,事实证明可以确定,当人物(> 15%的帧)移动至少2秒钟时会触发。 由于灵敏度的提高,我根本看不到误报。
运动控制。
平台管理“由拖拉机”。 即 PWM控制和左右旋转方向。 双手拇指下方的控制元素(条带)。 事实证明,这对我来说是最自然的。

摄像机控制-触摸两个条带可发出旋转特定角度的命令(距离条带中心越远-角度越大)。 电机的连续控制令人不舒服(再次受我主观)。

落后FPV
视频延迟相对较小(<1秒)。
要在0.6秒内以3-4 km / h的最大速度控制轮式平台以实现100%PWM滞后-这是很正常的,几乎没有注意到。
但是,在我看来,例如,直升机的滞后时间甚至是0.3秒。
测试表明,与相同的H.264流通过rapivid的输出相比,在python中实现翻译带来了大约50-70ms的延迟。 对我来说,这70毫秒并不重要。 但是,如果有人想压缩最大值,那么他必须考虑到这一点。
通过“本地WiFi”(电话作为接入点)工作时,延迟为350..600ms。 但不超过0.6秒,并且在此范围内稳定。 虽然在空旷地区50-70米-这只是玩转。 而且距离更远,手机的WiFi无法正常工作。
值得注意的是,这是在公寓大楼非常“ RF嘈杂”的环境中,该地区有许多WiFi网络。

我对通过ssh端口从覆盆子转发到VPS的配置“ WiFi路由器->双绞线提供程序-> VPS-> MTC 4G”的结果感到惊讶。
事实证明,典型的延迟甚至比通过本地WiFi(!)还要好。
即使在旅途中或在大型滞后大型超市附近,也只有300毫秒。
但是,有时(非常罕见且不可预测),延迟会达到几秒钟。 重新上下文有帮助。 这些可能是4G / MTS /供应商链中的某些功能等。

一切正常后,人们希望将声音通道双向连接。 从技术上讲,这是可能的,甚至不是很困难。 但是我不想摆弄烙铁。
如果不是“额外”的Rasberry pi,那么使用旧手机作为主机进行视频监控和平台管理会更容易。 与旧手机相比,覆盆子的唯一优势是重量更轻。 而且,功耗可能更低(无法比较)。
所有来源