软件定义卫星公共服务平台的设计与实现
2018-06-29任勃1张明昆1刘建平1吴涛1胡科飞1西安卫星测控中心宇航动力学国家重点实验室
+ 任勃1,张明昆1,刘建平1,2,吴涛1,胡科飞1 (1. 西安卫星测控中心) (2. 宇航动力学国家重点实验室)
随着智能终端的大规模普及,计算和存储服务从客户端转向云端,计算机软件正在以数字比特的形式改写现实世界中的方方面面,软件定义蓬勃发展[1]。2017年9月,中国科学院软件研究所联合国内三十余家单位发起成立软件定义卫星技术联盟,提出了以天基超算平台和星载操作环境为核心的软件卫星开放式系统[2-3]。联盟计划搭建以天智系列卫星为基础的平台化软件解决方案,设立航天应用软件商店,形成软件定义卫星开放生态,称之为“Sputnix”。
建立航天应用商店时,不同的应用软件需要和卫星进行不同的信息交互,涉及到各种星载硬件和链路协议,一定程度上造成了卫星服务和软件接口的重复开发,数据交互比较复杂,对星上链路和软件安全造成威胁[4]。在星载操作环境中部署一个强大的公用平台可以为星上航天应用软件提供完善丰富的系统配置和基础服务支持,符合释放平台能力和生产力的技术趋势[5]。公共平台使卫星应用软件开发者可以专注于软件功能和用户体验,而与卫星硬件传感器产生的在轨数据的交互全部由公用平台来完成。洪锡军等提出的软件通用运行平台主要关注应用软件的可移植性[6],廖明宏等提出的小卫星软件公用平台侧重于基于功能的程序语言类库的建设[7],本文针对软件定义卫星提出在系统上建立一个公共软件服务平台,包括硬件计算设施、系统软件仓库、计算作业算法库、信息交互接口四大模块。硬件计算设施由天基超算平台、磁盘阵列数据存储器等组成,卫星硬件传感器与公共软件平台的接口暂不考虑;系统软件仓库主要为星上软件提供各类基础性软件包安装源,类似于Ubuntu系统软件更新中心;计算作业算法库为应用软件提供多样化、具有一定普适性的在轨计算算法;交互接口则负责所有应用软件与软件定义卫星系统的信息交换。模块化的设计符合软件定义卫星的重组、重配和重构理念,同时也提升了整个系统的安全性。
1 公共服务平台整体架构
1.1 公共服务平台结构设计
公共软件服务平台外部主要与卫星的各个硬件传感器、航天软件商店应用软件相联系。平台的目标是使星载操作环境与航天应用软件适当解耦,做到“紧贴和、弱隔离”。“紧贴和”的前提是提供应用软件依赖软件包的最大支持集合,以及完整、丰富、安全的系统配置,使星载操作环境能够满足个性化应用软件对系统环境的要求;在系统环境未能满足应用软件需求时,可从系统软件仓库下载安装可选软件包,或搜索卫星作业算法库中的算法列表进行调用和引用,并通过接口和数据控制使应用软件与星载操作环境相对分离,实现“弱隔离”,避免应用软件对卫星核心系统运行产生干扰。公共服务平台架构如图1所示。
所有星载应用软件的运行均基于星载公共软件服务平台,新增上注的卫星应用软件通过向公共平台注册后再进入发布运行阶段。应用程序管理,卫星数据调度,系统状态记录,卫星配置管理等卫星在轨公共业务由公共软件服务平台的信息交互接口模块统一处理,公共平台按照一定的规则和时间间隔向全系统广播系统状态和配置信息。公共服务平台上的应用软件作为一个独立的Linux系统后台进程运行,公共平台负责所有应用软件传输数据的分发调度。
1.2 公共服务平台在轨计算作业算法库
公共软件服务平台的四大组成模块中,系统软件仓库主要解决应用软件依赖的下载与部署,对各种Linux系统引用软件包进行版本控制,建立系统软件安全规范。计算作业算法库的主要目标是存储各类常用并具有一定系统普适性和标准接口的算法,结合天基超算平台的算力支持,为应用软件提供一个基础业务环境,使应用软件开发者不再需要关注卫星硬件传感器数据的产生和输出,同时辅助实现卫星功能拓展。卫星在轨运行期间,需要计算轨道、姿态、能源等基本要素,这些内容属于传统意义上卫星的基础计算作业。同时,基于强大的天基超算平台,卫星还可以进行多样化的复杂运算和智能推理,称之为智能计算作业。智能计算作业基于蒙特卡洛模拟方法、无监督学习等数据处理和机器学习算法,其应用领域包括基于深度学习的对地观测图片在轨识别、太空VR/AR应用效果渲染等。
在基础作业算法库部署精密定轨工具。精密定轨是保证卫星正常在轨运行的基本条件,一个完整的定轨流程包括GNSS(Global Navigation Satellite System,全球导航卫星系统)定位数据接收、数据解包与坐标转换、迭代计算定轨三个步骤。相应的,基础作业算法库提供位置数据解包、坐标转换、定轨算法引用列表等基础服务包,为卫星在轨长期管理提供基本信息,也可以供地球参数解算等基础科学研究类型的航天应用软件调用。
图1 公共软件服务平台框架
在智能作业算法库中部署C++库Tensor RT。Tensor RT是英伟达(NVIDIA)公司发布的高性能深度学习推理引擎[8],在对地观测图像处理、空间操作、航天器碰撞预警等领域具有广泛的应用前景。航天应用软件首先利用天基超算平台中的GPU对海量数据进行神经网络模型训练,经过网络前向和后向传播,生成模型文件;再调用推理引擎使用训练好的模型对新数据进行预测,并进行前向传播。当星上航天应用软件使用基于Caあe(伯克利大学人工智能研究团队提出的一种深度学习框架)和TensorFlow(谷歌公司推出的机器学习框架)等深度学习框架时,推理引擎能够直接加载开发人员在地面训练好的模型文件,并根据天基超算平台GPU阵列的参数对模型进行优化,遥控上注改进的模型文件就可以持续发挥Tensor RT的巨大潜力。
公共平台的作业算法库中的算法模块提供动态链接库可以供应用软件直接引用,也提供标准的应用程序接口,具体以算法函数的封装演进版本等级而定。针对没有动态链接库的情况,初步设计了如图2的接口,其中算法实例是指一次算法服务的实例化,服务单元负责算法服务实例的创建、配置和删除,代理服务器负责创建请求、从通信服务中接收数据单元等,底层采用TCP/IP协议连接。作业算法库的引入使航天领域各类算法能够在轨验证、比较和标定,同时极大的拓展了卫星系统的功能,实现软件定义卫星智能化、需求动态重构的目标。
2 公共服务平台接口设计
2.1 基于共享内存的高速率数据传输处理
卫星硬件传感器产生的高码率数据(大于1Mbps)通过公共软件平台发送给应用软件,如果接收同一类工程数据的应用软件都对数据进行缓存,或存入存储器再读出,则会极大的占用系统硬件资源,数据时延也会对实时类应用产生很大负面影响[9]。因此本文设计“数据类型相同,缓冲内存共享”的数据交互方式,使公共平台和应用软件的数据交互在共享内存中完成。共享内存区是最快的Linux进程间通信形式,一旦这样的内存映射到共享它的进程的地址空间,这些进程间的数据传递不再涉及到Linux内核。共享内存允许两个或多个进程共享一个给定的存储区域,数据不需要在多个进程之间进行复制。考虑部分应用软件对高码率数据传输的需求,在星载操作环境下设计公共平台与应用软件共享内存的数据交互方式。
图2 作业算法库与应用软件接口
在搭建数据交互流程时,采用模块化的设计方式,将涉及共享内存的操作封装为一个MemoryHighWay类,该类实例化后以命名和空间大小为标记开辟共享内存,定义一个环形数据缓冲区并将缓冲区写入共享内存进行维护。每个需要高速数据传输服务的应用软件调用MemoryHighWay类,在该应用软件与数据缓冲区之间形成管道,多个应用软件以缓冲区为中心形成多个管道,MemoryHighWay类可以对管道上的数据进行操作,在必要情况下可以对数据帧的时序进行检查。在操作管道数据时,启用多线程,利用线程互斥保护数据安全,在每次操作流程中加入计数信号对数据进行同步,示意图如图3。在星载操作环境下,应用软件的交互对象既可以是其他一个或多个应用软件,也可以是公共软件服务平台。
测试环境采用中标麒麟国产化Linux操作系统,使用C++语言和Qt平台开发高码率数据发生器软件,以及两个基于共享内存方案的应用软件接收处理数据。经过地面测试,在4M带宽下传输1.13Mbps的数据时,应用软件收到的数据没有逆序;软件能够正确处理数据丢失等异常情况;在数据发生器进行主备机切换时,测试软件能够正确完成新数据帧序列的重新捕获接收。
2.2 基于消息中间件的信息交互机制
公共平台和应用软件之间的信息交互主要有应用软件管理、卫星数据调度,系统状态记录,卫星配置管理等信息交换业务。为了便于卫星内部统一信息交换格式,解决系统表示层的互操作问题,参考测控数据表示[10],定义一种称为SDF(Satellite Data Format,卫星数据格式)的协议作为统一的数据交换格式,各类数据按照约定的编码表由信源新宿、数据类型等封装成SDF数据包,假设卫星硬件传感器产生的数据在到达公共平台时已经转换为SDF格式。SDF格式可以与标准XML文件格式相互转换,适应主流应用软件配置文件格式的传输。
图3 共享内存方式数据交互
采用消息中间件完成公共平台和应用软件之间的信息交互,C++消息服务(C++ Messaging Service,CMS)定义了消息中间件的接口规范,可以提供与各厂商无关的消息访问与收发服务。公共平台与应用软件通过CMS接口实现数据交互,包括文本信息、可序列化对象信息、键值对属性集合、字节流和原始值流信息等均可以在虚拟信道中传输。在应用软件与公共平台之间数据传输速率较低的情况下,该方式可以代替共享内存实现数据交互。基于CMS规范的消息中间件,屏蔽了底层操作系统、通信协议和数据格式的差异,使公共平台与应用软件在数据层面解耦,同时实现了公共平台的管理功能和仓储功能。两者之间的交互内容主要包含以下几个方面:
(1)应用软件向公共平台发送注册信息,建立信息管道;
(2)公共平台向所有应用软件发送心跳信号;
(3)公共平台向应用软件发送启动和关闭信号;
(4)应用软件按照SDF中数据类型和应用软件标识向公共平台发送数据请求;
(5)公共平台按照数据请求列表向应用软件发送数据;
(6)应用软件向公共平台发送停发数据申请;
(7)应用软件关闭前向发送公共平台发送下线信号;
(8)公共平台向所有应用软件发送公共配置更新。
其中第(5)项是指,发送速率大于1Mbps时使用2.1节的共享内存方式,低于1Mbps时使用消息中间件管道。
单个航天应用软件在运行过程中与公共平台的数据交互如图4,假设同时运行多个应用软件,在普通硬件水平的计算机环境下,使用ActiveMQ在中标麒麟Linux操作系统上对设计的交互机制进行了测试。由飞行圈次序号、信息类别码、数据类型、信息源(应用软件进程号)、注册和反注册标识、数据索取条件、注册信息哈希码等七项组成信息交互基类,基于C++的Boost库的序列化模块实现信息交互中基类的序列化和反序列化。该基类可以在应用软件向公共平台注册、应用软件向公共平台发送数据申请两种情况下通用,区别仅在于注册时信息交互类中的数据类型为注册类型,数据申请时数据类型为应用软件业务数据类型。每个交互信息的哈希码作为唯一键值索引动态存储在公共平台注册列表和数据列表中,单个应用软件第一次注册时加入注册列表,第一次反注册时从注册列表中删除;某个应用软件第一次申请某一种数据类型时加入数据列表,所有应用软件最后一次撤销该数据类型时从数据列表中删除。从测试情况来看,在通常的卫星下行遥测数据传输速率下,数据的注册和申请没有丢失现象,数据的申请和索取没有延迟,并且能够实时接收到,数据解包正常,ActiveMQ服务运行稳定,对硬件资源的消耗占用不明显。
图4 航天商店应用软件数据交换流程
3 结束语
针对软件定义卫星开放系统建设中航天应用软件商店发展思路和面临的具体问题,设计了一种软件定义卫星公共服务平台,设置卫星作业算法库实现应用软件引用和卫星功能扩展,提出了应用软件和公共平台的数据交互方法和信息交互机制,中标麒麟Linux系统环境下的仿真数据测试表明本文的设计符合高速率数据的传输,实现了应用软件和公共平台之间规范的信息交换。有效屏蔽了软件定义卫星硬件层面的交互,使软硬件解耦。下一步将在地面使用TensorFlow建立神经网络深度学习模型,重点研究在编队卫星伴飞、空间操作任务中,通过图像处理识别卫星物理边缘、相对距离和速度,调用智能作业算法库Tensor RT进行航天器碰撞预警分析,使软件定义卫星公共服务平台在天智系列卫星中得到在轨测试和应用。
[1]叶毓睿,雷迎春,李炫辉,等. 软件定义存储:原理、实践与生态[M]. 北京:机械工业出版社,2016:1-3.YE Y R,LEI Y C,LI X H,et al. Software defined storage:principle, practice and ecosystem[M]. Beijing:China Machine Press,,2016:1-3(in Chinese).
[2]软件定义卫星项目组. 软件定义卫星-商业航天发展的助推器[J].卫星与网络,2017,9:36-38.
[3]赵军锁,吴凤鸽,刘光明. 软件定义卫星技术发展与展望[J]. 卫星与网络,2017,12:23-29.
[4]王丽冲,姚秀娟,闫毅. 一种基于OpenFlow的软件定义卫星网络架构设计方案[J]. 电子设计工程,2016,24(17):85-89.WANG L C,YAO X J,YAN,Y. A SDSN architecture design based on OpenFlow[J]. Electronic Design Engineering,2016,24(17):85-89.
[5]颜凯,张军. 软件定义服务架构研究[J]. 信息技术与标准化,2016,8:28-32.
YAN K,ZHANG J. Research of the framework of software defined service[J]. Information Technology & Standardization,2016,8:28-32.
[6]廖明宏,吴翔虎,程光明. 小卫星软件公用平台设计[J]. 计算机工程与设计,2001,22(6):28-33.LIAO M H,WU X H,CHENG G M. Common software platform design for small satellite[J]. Computer Engineering and Design,2001,22(6):28-33.
[7]洪锡军,张激. 嵌入式应用软件通用运行平台研究[J]. 计算机工程,2004,30(24):67-69.HONG X J,ZHANG J. Research on common running platform for embedded applications[J]. Computer Engineering,2004,30(24): 67-69.
[8]SHASHANK PRASANNA, PRETHVI KASHINKUNTI,FAUSTO MILLETARI. Tensor RT 3: faster tensor flow inference and volta support[EB/OL].NVIDIA DEVELOPER: NVIDIA Developer Blog,2017(2017-12-04)[2018-02-27]. https://devblogs.nvidia.com/tensorrt-3-faster-tensorflow-inference/.
[9]威廉姆斯著,周全,梁娟娟,宋真真,许敏等译,C++并发编程实战[M]. 北京:人民邮电出版社,2015:3-4.Anthony Williams. C++ Concurrency In Action[M]. Manning Publications,2012:4-5.
[10]李英女,郑国雄. 测控数据的软件定义方法[J]. 飞行器测控学报,2001,20(2):72-76.