- 1 -
中国科技论文在线
应急物流车载终端设计
赵贺1,周晓光1,皮人杰2**
作者简介:赵贺(1992 年),男,硕士,控制科学与工程
通信联系人:周晓光, 男, 教授, 计算机控制、无线通信技术应用
(1. 北京邮电大学自动化学院, 北京 100876;
2. 北京邮电大学计算机学院, 北京 100876) 5
摘要:本文设计了应急物流在运输过程中使用的车载终端,该终端基于 系统,
包括车辆导航、定位、实时位置上报,与指挥中心通信,实时录制视频上传到服务器以及设
置等功能模块,采用了 Java 语言与 MVC 的 Android 应用设计形式,应用了百度地图与北斗
模块实现定位、导航,网络通信采用 Volley 框架,并通过修改源码使其支持文件的上传,10
即时通信方面定制了自己的通信协议,通过重传与标记保证了通信的有效性与实时性。最后
代码的优化设计提高了系统的稳定性,并成功的运用到实际车辆运输途中,提高了物流运输
的效率。
关键词:计算机应用技术;Android;北斗定位;UDP 通信;实时视频
中图分类号:TP399 15
A Design of Vehicle Terminal in Emergency Logistics
ZHAO He
1
, ZHOU Xiaoguang
1
, PI Renjie
2
(1. College of automation, Beijing University of Posts and Telecommunications, Beijing 100876;
2. School of computer, Beijing University of Posts and Telecommunications, Beijing 100876) 20
Abstract: The paper describes A Vehicle Terminal which used to being used in Emergency
Logistics. This system is based on the , including vehicle navigation, location and
real-time location reporting, and command center communicaiton, real-time video recording, and
the setting of the developing of this app use Java language and MVC design mode.
The Baidu Map is applied to navigate. The Chinese GNSS-System is used to get the correct 25
location. In order to upload file, the source code of Volley has been changed, and Volley supports
internet communication. In the aspect of real-time communication, the customized communicaiton
protocol is designed to ensure the high stability and real-time. At last, the optimization design of
code improves the stability of the system, and make application to the actual vehicle transportation
successful, besides, improve the efficiency of logistics transportation. 30
Key words: computer application technology; Android; the Chinese GNSS-System; UDP;
real-time video recording
0 引言
物流运输行业是推动国民经济快速发展必不可少的基础产业,各类物流运输仓储企业虽35
然在长期发展历程中积累了丰富的实践经验,但过去由于各物流运输企业无法对车辆动态信
息进行实时监控,且信息反馈不及时、不精确、不全面等问题导致了运输能力的大量浪费与
运作成本的居高不下。尤其是应急物流,经常会应对紧急状况,不能出现任何差错,面对当
今客户日益增长的服务需求,物流运输企业必须采用新科技手段来改变落后的管理模式,提
高自身的服务质量与服务水平,迎接市场挑战。 40
基于以上事实,实现物流的高度信息化,对车辆全程监控,及时掌握车辆的运行状况,
提高了车辆的行车效率和行车安全显得至关重要,通过车辆监控调度管理系统,加强了对车
辆的管理,既能降低了企业运作成本,也能提高应急物流的效率。当前较多车载定位设备采
用 GPS 的定位方式,GPS 并不是国内自主研究的全球定位系统,这种严重依赖国外导航的
- 2 -
中国科技论文在线
状况,一方面受制于人,另一方面可能威胁到国家和社会的安全,存在极大不确定性[1]。 45
因此,本文拟设计一种采用北斗定位百度地图导航具有通信功能的车载终端,涉及到通
信和地图定位两部分,采用中国自主研发的“北斗”通信定位系统代替了原有的 GPS,利用串
口与北斗进行通信[2],获得北斗定位的结果,通过通信协议上传至服务器。通信采用 UDP
发送自定义协议消息,采用重传与标记保证消息能有效地与服务器通信。服务器可以通过终
端的实时视频功能监控当前车辆状况,视频模块采用封装的 ffmpeg 开源库处理视频,起到50
了有效压缩的作用,一定程度上减少了流量损耗。
1 Android 平台介绍及环境搭建
Android 是一种基于 Linux 的自由及开放源代码的操作系统,主要使用于移动设备,如
智能手机和平板电脑,由 Google 公司和开放手机联盟领导及开发。手机当前能够更新的版
本为 。开发版本为 。Linux 本身就是开源系统,Android 同样开源,对于开发者来说55
可定制性很强,可以通过修改源码改变系统底层功能。Android 最初为手机设计,但从移动
通信发展速度来看,很多移动设备都采用 Android 系统。移动平台系统还有 WinCE,IOS 等,
WinCE 系统应用软件较少,另外 IOS 本身不开源,并且限制较多,因此该车载终端系统采
用 Android 有很大优势。
Android 操作系统结构图如图 1,主要分为以下几部分: 60
1、Android 内核:Android 内核基于 ,内核与其他操作系统类似,主要提供底
层的驱动、内存管理、进程调度等等。Linux 内核主要负责硬件与系统软件的沟通调度。
2、Android 运行文件:该层为 Android 系统核心运行类库,主要提供系统运行所需环境
以及类库,主要由 C 语言编写,各个类库经过优化,使得系统更高效率运行。
3、Android 核心库:主要包括 C/C++编写的类库,为上层的 Java 调用提供底层接口,65
Java 本身效率不高,底层采用 C/C++能提高系统流畅性,并通过应用层框架暴露给开发者调
用。可以细分为:系统 C 库、媒体库、界面管理、LibWebCore、SGL、3D 库、SQLite。
4、Android 应用框架:这部分主要为 Android 系统源码,另外还提供给开发者 API,开
发者可以利用 API 开发自己的应用程序。这样既可以简化程序设计,又可以提高组件的复
用性,符合程序设计原则。 70
5、Android 应用程序:包括系统自带的应用,比如:日历、短信、电话等,还包括开
发者利用 Google 提供的 Api 开发的应用,主要采用 Java 语言,运行在 Android 自己的 Dalvik
或者 ART( 及以上)虚拟机上。
- 3 -
中国科技论文在线
图 1 Android 操作系统架构图 75
The architechture diagram of Android
2 系统架构及功能介绍
开发环境采用 Windows10 操作系统,安装 与 Android sdk23,采用 Android Studio
开发,终端设备为定制的 Android 操作系统,支持串口通信,用于配合北斗定位模块,终端80
系统主要分为:定位与导航功能,即时通信功能,视频实时上传功能及设置。图 2 为终端系
统整体架构,系统采用 MVC 设计模式,下面分别对各功能模块做出详细介绍。
服务器
UDP
视频地图 通讯
定位 导航 搜索 文字 图片 语音
设置
设置各部分通信的地
址、端口及离线地图
图 2 终端功能架构
The functional architecture 85
定位与导航
定位采用安装 sim 卡的北斗通信模块,北斗模块通过北斗天线与卫星通信,获取当前经
纬度及详细地理位置信息,通过串口发送到终端设备,终端可以设置上传给服务器位置信息
的间隔时间,通过实时上报位置,服务器能获悉车辆路径及位置。北斗通信协议是基于串口
的通信协议,通过定制的 android 设备上的串口与北斗天线连接,通过串口输入输出数据,90
用户选择有北斗的通信模式后,会弹出串口设置界面,用户设置波特率、串口后,android
通过 jni 调用封装好的 so 库[3],打开串口实现通信。
导航采用百度地图接口,通过设置起点终点位置,获取具体路线,Android 通过 Canvas
和 Paint 两个类绘制具体路径。图 3 为该模块架构设计。
- 4 -
中国科技论文在线
地图
根据起点终点
导航
输入具体位置
定位
实时定位并位
置上报
北斗
Wifi
3G/4G
95
图 3 定位与导航架构设计
The location and navigation architecture
Service 是 Android 系统中的一种特殊机制,不同于普通的线程与进程,Service 能够在
系统后台保持较高的优先级并且不被杀死。该系统采用 Service 运行于后台用于监听北斗定
位信息,在子线程等待串口消息,通过观察者模式传递地理位置信息并通过 UDP 发送到服100
务器。该部分伪码设计[4]:
Intent intent = new Intent(this, );
startService(intent);
//开启串口 获取输入输出流 子线程处理收发消息 获取地理位置
mSerialPort = new SerialPort(new File(path), baudrate); 105
mSerialPort = ();
mOutputStream = ();
mInputStream = ();
//发送定位事件,通知观察者,上传服务器信息
LocationEvent event = new LocationEvent(location); 110
LocationMessage locMsg = new LocaitonMessage((),());
().sendLocMesasge(locMsg);
//百度地图接口获取路径及导航
BaiduMap map = new BaiduMap();
//设置起点与终点并导航 115
(srcLocation);
(desLocation);
();
即时通信
通信协议 120
考虑到车辆行驶途中 ip 可能发生变化,以及应急物资经过受灾地区信号较差,使用 TCP
通信方式效率并不高,所以采用发送数据包更为自由的 UDP 通信方式,UDP 协议是无连接
的数据传输协议并且无重传机制,会发生丢包、收到重复包、乱序等情况,为解决以上问题,
采用自定义消息协议:
“username”:”jingMM1233”//车牌号 125
"cmd": "info", //消息类型
"req": "XXX", //标记当前消息
"media": "text/plain", //媒体类型
- 5 -
中国科技论文在线
"data": "xxxxx", //内容
"location": { //当前地理位置 130
"lat": ,
"lng":
}
其中 req 为发送消息时间戳+当前发送该消息的次数,用于标记该消息唯一,服务器收
到后会返回相同的 req,则证明该消息正常到达,如果超过 5s 没收到响应,那么会再次重传,135
最多重传 5 次,扔没收到认为消息收发失败,data 中存放发送的内容,每次发送消息都会附
带当前的地理位置信息,用于控制中心标记车辆位置。
另外消息的收发还支持图片和语音,和发送文字消息类似,发送图片和语音需要先把相
关文件发送到文件服务器,获取文件服务器返回的 url 地址,再把 url 地址发送给控制中心,
控制中心通过 url 下载该文件,即可查看图片或者播放语音。 140
收发消息设计
通信部分架构图 4 所示。消息收发都由工具类 SendMessage 控制,采用加锁单例模式设
计,防止多线程初始化多个单例,开启两个 socket,其中 ClientSocket 用于发送 udp 数据包,
ServerSocket 用于接收服务器发送的 udp 数据包[5]。采用 中推出的线程安全 Current
包中的 BlockingQueue 存放消息队列,并使用 ConcurrentHashedMap<Message, Integer>存放145
每条消息发送的次数,每成功一个消息就清除一个元素。Client 监听 BlockingQueue 中的消
息数目,只要有消息就取出通过子线程发送出去,并回调给 UIFragment 是否发送成功。Server
则负责监听另外的 socket 端口,一旦接受到数据包,回调给 UIFragment 消息内容。该过程
UML 时序图如图 5 所示。伪码设计:
//开启客户端 socket 与服务端 socket 150
new ClientScoket().start();
new ServerSocket().start();
(message);
(message);
(); 155
UDP
Socket
图片上传到文件服务
器,再把服务器具体地
址返回给控制中心
发送文字,根据设
定的协议,通过
UDP端口发送出去
语音上传到文件服务
器,再把服务器地址返
回给控制中心
Wifi 3G/4G
图 4 通信模块架构
The communication module architecture
- 6 -
中国科技论文在线
UDP
Socket
图片上传到文件服务
器,再把服务器具体地
址返回给控制中心
发送文字,根据设
定的协议,通过
UDP端口发送出去
语音上传到文件服务
器,再把服务器地址返
回给控制中心
Wifi 3G/4G
图 5 消息收发时序图 160
The message sending and receiving UML sequence diagrams
实时视频上传
该模块主要实现边录制视频边上传至服务器,以达到指挥中心监控行车路况目的,由于
车载终端的特殊需要,需要有三个摄像头录制视频并且能够切换,主要采用更改相机驱动文
件的方式切换摄像头。 165
普通的实时上传采用读取文件流,把文件流直接上传至服务器,服务器解码播放,本文
为提高传输速率,降低传输流量,采用开源视频库 ffmpeg 处理视频流[6]。FFmpeg 是一套可
以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用 LGPL 或
GPL 许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的
音频/视频编解码库 libavcodec,为了保证高可移植性和编解码质量,libavcodec 里很多 code170
都是从头开发的。其中”FF”代表”Fast Forward”,mpeg 为视频编码标准。流程图如图 6 所示。
伪码设计:
//开启摄像头录制视频并交给 FFmpeg 处理,上传流到服务器
camera = ();
recorder = new FFmpegFrameRecorder(ffmpeg_link, imageW, imageH, 1); 175
audioData = (bufferSize);
(audioData);
new UploadThread().start();
实时
视频
首先需要服务器
支持上传,配置
并开启XVS服务
配置好ip地址和端口
后,登陆视频服务
器,点击录制上传
网页可以访问到视频
的路径,控制中心能
监视车辆状态。
Wifi 3G/4G
图 6 视频模块架构 180
The video module architecture
- 7 -
中国科技论文在线
功能设置
设置模块主要包括通信地址、通信端口、视频上传地址及视频上传端口的设置,为保存
用户信息,采用 Android 系统自带的 Preference 存储,Preference 是 Android 五大存储中的一
种,本质也是存在文件中,但是以 xml 的形式存储,便于查找键值,相比于数据库存储更轻185
便,相比直接存文件又便于查找。
设置中还可以设置实时上报位置的间隔时间与距离间隔,根据车辆实际车速,可以调整
时间与距离,缺省设置为 5 秒,距离 50 米,距离优先于时间。即每隔 5 秒后判断是否距离
是否超过 50 米,是则通过 UDP 上传一次经纬度位置信息。伪码设计:
//编写 PreferenceUtils 类用于处理 Preference, 涉及存储和获取用户信息 190
Preference instance = ();
(key, value);
(key);
3 结论 195
本文实现了一种应急物流中经常使用的车载终端,并在定位、通信方面做出优化,提高
了定位的稳定性,充分发挥了北斗定位系统的作用,在偏远地区以及通信基站受损的情况下
也能定位。丰富了通信内容,使用 UDP 提高效率的同时通过消息标记与重传保证了消息的
有效性与稳定性。同时增加了实时视频功能,FFmpeg 库保证了视频的流畅性,降低了流量
损耗提高了传输效率。 200
创新点在于采用北斗定位系统优化传统的 GPS 定位系统,通过扩展串口获取定位信息。
通信方面使用了 UDP 发送自定义协议消息,保证通信系统稳定。采用了 FFmpeg 的实时视
频功能保证了指挥中心能实时监控车况。
[参考文献] (References)
[1] 周兵, 陈向东, 赵齐乐. 北斗系统与 GPS 应用比较分析[J]. 全球定位系统, 2012(4):6-8. 205
[2] Li C. The Chinese GNSS-System development and policy analysis[J]. Space Policy, 2013, 29(1): 9-19.
[3] Steele J, To N. The Android Developer's Cookbook:Building Applications with the Android SDK[M].
Addison-Wesley Professional, 2010.
[4] 金智义, 张戟. 基于 Android 平台的串口通信实现[J]. 电脑知识与技术:学术交流, 2011, 07(5):2983-2985.
[5] 周丽娟. 基于 UDP 协议的 Socket 网络编程[J]. 电脑知识与技术,2008,4(7):1867-1868. 210
[6] 吴晓佳. 基于 Android 智能手机的移动视频监控系统的开发与实现[D]. 东南大学,2015.