typora-copy-images-to |
---|
img |
本仓库是作为申请第十届大赛“浪潮5G+机械创新设计奖学金”的佐证材料,参与评选的项目是“海上森林”——红树林种植机器。
本系统最终采用了SIM8200EA-M2模组进行5G的开发,利用RNDIS技术,将模组做为一个网卡,提供给树莓派5G上网的能力。树莓派利用5G的低延时、大带宽能力实现对树莓派的实时摄像头图传和远程遥控,两者呈现在web网页上。远程遥控采用的是MQTT协议数据传输方案,服务器将指令发送给树莓派,树莓派通过串口转发给单片机芯片,从而实现机器的控制。远程图传采用的是mjpg-streamer+内网穿透方案,mjpg-streamer推流链接兼容性强,可以很好的嵌入到各种平台进行图传显示。其次它的系统占用很小,可以直接使用相机生成的jpeg图像。内网穿透使用的是NPS方案,利用阿里云的公网服务器,将内网的端口映射到了公网服务器端口上。经测试,图传的实际效果因实验环境而异,因为运营商提供的带宽都是非对称,上传速度往往偏低。在最理想(空旷开拓信号无遮挡的位置)的情况下,能达到70ms的延迟和15FPS的帧率。达不到正常30FPS帧率的原因来自上传带宽的受限和HTTP协议基于TCP传输。
文档将从系统设计、系统分析、系统部署和系统优化这四个角度进行阐述。
1、用树莓派调用种植机器上的摄像头,树莓派通过5G模组将图像暴露传输在公网上,让任意接入互联网的设备都可以访问到低时延的图传,提供远程控制的基础。
2、将树莓派接入MQTT协议,接收远程控制端的指令,利用5G的低延时,获得实时控制的效果。树莓派通过串口将指令转发给单片机,控制机器运动。
5G上网采用的是SIM8200EA-M2模组,经过实测,该模组对树莓派的驱动支持比较好,与其他模组相比具有更好的稳点性。
摄像头选用普通的USB摄像头,使用mjpg-streamer将视频流以图片帧的形式传输出去
在公网服务器上部署NPS进行内网穿透,NPS有网页管理界面,能更加方便快捷的部署各种穿透业务。
使用比较成熟的MQTT协议进行数据的传输,MQTT对带宽的需求小,在较差的网络环境下也能够有较好的表现,也方便后期拓展其他的传感器接口,将传感器的数据上传到云端,进行可视化的呈现。
在5G模组选型上,我们利用了实验室的条件实际测试了3种5G模组(采购了一种,实验室借用测试了两种),测试的3种5G模组分别为RM500U-CN、SIM8200EA-M2、FM650-CN。
在实际使用测试中RM500U-CN在树莓派拨号上网十分不稳定,容易断线,且模组发热量很大,FM650对于树莓派5.x内核的AT指令串口驱动并不完善,需要自己开发定option.c驱动,基于一个快速业务部署的需要,我们暂时选择了SIM8200EA-M2模组作为本系统方案的选择。
对于图传,我们要分辨清楚图传和直播的区别,图传追求的是低延迟和一定的帧率,而直播追求的是流畅和帧率,对延迟的要求不是很高。所以现有的直播推流方案延迟都在1~10S内,延迟对于图传来说是致命的。图传一般用于远程控制,大于1s的延迟对于操作体验来说都是很差的,并且具有极大的不安全性。
经过对各种推流方案的对比和一些测试后,只有mjpg-streamer和WebRTC适合作为低延时的方案,从系统占用和兼容度的两个角度考虑,暂时选择了mjpg-streamer进行图传。
mjpg-streamer具有以下优点
mjpg-streamer可以直接使用相机生成的jpeg图像,处理器无需做过多的处理,因此可以减少处理器的负载
其以图片帧的形式传输可以很容易在任何平台上调用视频流。
内网穿透主流的方案有frp和nps,两者在性能上没有太大的差距,所以采用了带有较好web管理端的nps。
远程遥控采用MQTT协议传输数据,MQTT是专门为物联网设备打造的协议,具有轻量级、低带宽、稳定性好等优点,是比较成熟的方案。MQTT除了传输遥控器数据外,还可以用于后期传感器数据的拓展,将小车搭载的传感器上传到云端,进行一个可视化的展现,能够更加全面直观的呈现小车的状态
本地端部署在树莓派上,请先克隆本仓库到本地,安装SIM8200EA-M2模组的树莓派驱动。
git clone https://gitee.com/nebula-yong/5g_img_transmit_and_remote_control.git
cd 5g_img_transmit_and_remote_control
sudo chmod 777 -R SIM8200_for_RPI
cd SIM8200_for_RPI
sudo ./install.sh
安装minicom用于AT串口指令调试
sudo apt-get install minicom
通过AT指令查看模组的状态,下面列出一些常用指令
sudo minicom -D /dev/ttyUSB2
AT #测试串口是否通顺
AT+CPIN? #测试SIM是否正常插入
AT+CSQ #查看信号质量
AT+CNMP=2 #设置自动寻网
5G上网配置
cd Goonline
make
sudo ./simcom-cm &
通过ifconfig工具可以查看wwan0网卡是拿到了公网ip,如果没有,执行下面命令获取IP设置DNS
sudo dhclient -v wwan0
sudo route add -net 0.0.0.0 wwan0
安装依赖
sudo apt-get install cmake libjpeg8-dev gcc g++
cd mjpg-streamer
make
测试是否成功安装,在mjpg-streamer目录下执行以下命令开启本地测试,运行后在浏览器输入127.0.0.1:8080看看是否调用到了本地的摄像头
./start.sh
准备一台具有公网ip的服务器,通过ssh远程连接到服务器。
git clone https://gitee.com/nebula-yong/5g_img_transmit_and_remote_control.git
cd ./5g_img_transmit_and_remote_control/server
chmod 777 nps
./nps install
nps start
执行完最后一句后,如果没有报错,在浏览器输入服务器IP:8080就可以打开服务器的管理界面,账户名admin,密码123。
进入管理界面后,先添加一个客户端,点+号可以看到客户端一键运行的命令,复制一键运行命令。
选择TCP隧道,新建隧道,填要映射的客户端ID,服务器端口选择9000(可以自定义),目标填8080。
进入nps文件夹,输入从服务器复制的客户端运行命令即可接入服务器。
打开mjpg-streamer,浏览器输入服务器IP:9000。能看到本地的网页即成功穿透
我们为我们的小车打造了一份web控制平台,首先需要将/5g_img_transmit_and_remote_control/web/src/components/Home.vue文件中的图传ip改为自己公网服务器的ip。
安装依赖
sudo apt-get install npm
node -v #查看node版本号,需要node版本大于14,若小于14,执行以下命令
sudo npm install n -g
n 14.15.1 #安装14版本
hash -r #更新缓存
运行web服务器
cd ./5g_img_transmit_and_remote_control/web
npm run serve -- --port 9000
之后在浏览器输入服务器IP:9000即可以看到一个web的界面。
经过实际的不断测试,在最理想的情况下(室外空旷无遮挡的位置)可以达到70ms和15FPS的帧率,在该效果下已经能够有非常流畅的图传体验。
但在其他场景下普遍在200-500ms的延迟。实际效果受5G信号的影响。优化方向有两个方向,第一个是从信号的角度,另外一个是从代码优化的角度。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。