阿木社区整理,转载请注明出处。阿木社区玩也要玩的专业!/?p=317#more-317欢迎加入阿木QQ群
为什么要使用3G/4G的数据链传输
使用3G/4G的传输链路可以达到远程控制的目的,打个比方就是全球只要有网络的地方都可以实现数据的交换和控制,远程采集显示无人机的数据,这就为一些无人设备,提供了更远的活动范围和更丰富的想想空间。但是和美国最先进的无人机采用卫星信号中继不同。在民用领域4G网络,或者以后的5G网络,无疑是最经济和最方便的。
先从比较实用和简单的3G数据传输开始,这里设计的数据链路是基于Java的后台服务器的。建议大家有一定Java语言基础,可以在网上搜索,几集的Java视频教程看看,再来入手学习,会比较简单,看完前5集,完成过基本的HelloWord程序和Java的要点即可。同时需要一些TCP/IP的知识,建议用C语言或者C++语言完成过基本的TCP/IP通信程序即可。电子或者计算机专业的同学应该大二就会具备以上的知识。
准备材料:
3G/4G数据传输模块一块,APM系统全套,联网的服务器主机一台。关于可以公网服务器,这边建议大家准备一台公网服务器,后面想实现视频数据的传输也需要一台云服务器。大家可以申请阿里云的服务器,如果是大学生只需要9.9一个月(/2/27),1G的内存,40G的硬盘,15G流量,够用了。如果不是大学生也只要50元左右一个月。后期会考虑想机智云方面移植,就不需要云服务器了。以后要实现的4G视频传输还是需要一台云服务器的。
一张可以上网的电话卡
知识领域:
C/C++,Java,TCP/IP,APM/PIX4 的MAVLINK协议。
作用:车辆状态的远程数据传输,远程控制。
在MP地面站中支持TCP协议的数据连接,MP地面站作为TCP协议的客户端,去连接服务器的主机(SERVER)端。把3G/4G数据模块接入APM数传接口,3G/4G模块接入网络之后,就会像服务器发送数据,数据量为10分钟1MB的3G/4G的流量消耗。服务器接收到数据,经过数据的转发,把数据转发到指定的端口,这时候如果有地面站请求数据,那么这个数据就会发送给地面站。完成了APM-->3G模块-->服务器-->地面站的数据链路。
图1.1 3G/4G数传链路图
通过这个数据链路就可以把车辆的当前气压,GPS方位,航向等数据传回远端的巡航车上。也可以实现远程的车辆控制。
实现原理
在熟悉Java之后,我们采用Java的QuickServer这个TCP通信框架库,来实现TCP的数据传输。至于什么是QuickServer的TCP通信框架,这里有详细的资料链接:
/clearwater21cn/article/details/297117
在实现我们的数据转发服务器之前最好先完整实现一遍上面链接里面的例程,对于QuickServer框架有个详细的认识,这个框架可以用在其他的物联网服务器上,是一个简洁小巧的框架,不必担心TCP通信的底层,用功能函数封装好了,非常实用。对于实现远程数据传输的地方非常实用。由于采用的3G/4G的数据传输链路,信号不管怎么样都会有延迟,我们测得的数据为100MS到600MS之间,要看当地的网络信号条件,可以看出这个延迟的情况并不适合作为多旋翼的飞行控制,可以用在车船,固定翼等对于实时性要求不高的场合。
硬件原理:
可以选择的硬件有串口转3G/4G,硬件原理也很简单,就是把串口信号转为3G/4G信号,目前比较成熟也可以选择2G网络的DTU,GPRS透传模块。他们的原理都是一样的,只不过3G/4G模块信号,以后可以用来传输视频数据,而DTU这种GPRS透传模块是不能传输视频数据的,带宽不够。在使用之前都要使用AT指令集进行配置,具体怎么配置成网络透传模式,还是要更具模块的使用说明书,我们也提供这种3G/4G模块,具体怎么配置请看我们的配置说明书。
图1.2 数传模块
软件框架:
因为使用了网络透传模块之后,APM的数传数据可以直接通过透传模式发送到一个固定的公网地址上,这个公网地址可以是云服务器,也可以是经过花生壳绑定过得一台可以上网的电脑,总之外网可以访问的到的地址。有TCP/IP的编程的经验我们都知道,只要公网的服务器监听某一个固定的端口,透传模块把数据发送给这个公网服务器的固定端口,这时候数据就发送给公网服务器了,公网服务器再把接收到的数据转发给连接到公网服务器的地面站。具体图示可以看图1.1。
至于怎么监听数据,怎么建立连接,怎么转发数据,就是Java服务器的工作了,在有耐心往下阅读之前,强烈建议阅读完QuickServer的资料连接。同时保证你使用的服务器支持Java运行环境,怎么安装Java的运行环境请参考如下资料:
/article/e75aca85b29c3b142edac6a8.html
阅读完并且把资料链接里面的例子都运行完之后,可以来参考,下面的讲解。
有网络基础的朋友都知道,我们普通的可以上网的电脑,对外的IP地址并不固定,而作为一台服务器的必备条件就是有固定的对外IP地址。购买云服务器的直接让程序在服务器上运行即可。
服务器启动方式
进入Windows的exe命令行。从命令行进入源代码所在目录,如果安装好了Java的运行环境,就先编译下代码。请确保Java的运行环境搭建完毕,还有Java的环境变量设置。
javacforwordserver/*.java (编译出java程序)
setclasspath=%classpath%;d:/QuickServer/dist/QuickServer.jar;./(类所在文件夹,给QuickServer.jar包指定环境变量,更具本地主机的路径来填写,否则找不到包)
javaforwardserver.ForwardServer(执行服务器程序)
注意在conf的文件夹中我们设置了转发服务器的监听端口,在comServerAPM.xml文件中设置了<port>5001</port>,5001这个监听端口,这个值可以根据不同的服务器来修改即可,我们在MP地面站连接端口的时候也要填入5001这个对应的转发端口。
图1.3 运行服务器效果图
服务器启动成功之后,启动3G/4G数传,把数传模块插入APM的数传接口,
图1.4输入服务器的IP地址和连接端口
就可以把APM的实时数据上传了,然后地面站切换到TCP连接输入服务器的IP地址和监听的端口号码,这是候地面站就可以连接成功,可以实现全球任何一个有网络的地方,都可以监控这个巡航车的数据了。
源码下载链接:
链接:/s/1ckIYiq 密码:otms
其中转发服务器代码在QuickServer1.4.7\examples\mydemo\forwardback\forwardserver 下面。在阿里云或者本机电脑使用之前请确保安装好了,JAVA运行环境。并且重新编译代码,然后按照上面的步骤运行代码!
阿木社区 玩也要玩的专业/?p=317#more-317 同时欢迎加入社区QQ群!