在轨任务规划的新型开发方法

2021-09-11 01:38双小川田文波
上海航天 2021年4期
关键词:嵌入式开源动态

关 宁,双小川,彭 娜,胡 浩,田文波

(1.上海航天电子技术研究所,上海 201109;2.上海航天智能计算技术重点实验室,上海 201109)

0 引言

在轨任务规划是未来航天器智能化的发展方向。实现在轨任务规划是一项涉及多个领域知识的复杂软件工程问题,需要将恒星、行星、矮行星、小行星、航天器自身,以及其他天体的星历、航天器姿态和各部分相对位置关系、各种仪器的工作特征和指向、地面目标、地形、地貌及其他辅助信息、各类规划、优化算法集成在统一的软件系统中。从地面上开发同等规模的跨领域信息系统的经验来看,采用先进的开发方法,即使用动态语言集成和使用开源库是实现灵活、多样在轨任务规划的必由之路。

顾名思义,开源库是可以在公开途径获得源代码的软件函数库,一般由开发者社区进行设计、开发和维护,其用户既包括相关领域的研究和开发人员广泛使用的开源应用软件,也包括闭源商用软件。开源库一般由最熟悉该领域的开发人员完成,并通过社区得到大量应用反馈和测试,因此在完成特定领域功能时,成熟的开源库质量往往比同类闭源商用软件高。但使用开源库往往需要具备较强的软件开发能力,同时要有较为完善的运行平台。

在桌面环境下工作的进行任务规划算法设计的开发者,往往首先使用Matlab、Python 这样的动态语言进行流程开发。只要各种运行平台上都提供了核心算法库(中间件),则使用动态语言开发的在轨任务规划算法可以无视底层运行平台的差异,在桌面环境和嵌入式环境中无缝移植。作为星载计算机系统的研制者,首先需要将核心算法库凝练成中间件,提供给算法开发者。

目前,星载计算机的高性能抗辐射处理器性能已经达到了200 MHz 以上,如果使用经过地面筛选的工业级处理器,可以进一步将主频提升到1 GHz。以这样的处理性能,结合较大容量的内存(32 MB及以上)和外存(1 GB 以上),已经可以运行提供POSIX 接口和完整文件系统的大型嵌入式操作系统,许多开源库都可以不经修改或仅修改接口代码就在星载计算机上运行。

本文基于在轨任务规划的开发需求,提出了使用动态语言和大型嵌入式操作系统进行在轨任务规划的开发方法,调研并移植了适用于在轨任务规划的开源库,形成了可复用的中间件,对典型功能进行了测试。

1 自主任务规划的典型应用场景

目前,对任务规划的研究大多以地面离线规划为主。比如针对对地观测卫星,可在地面采用较为复杂的智能算法对多个对地观测目标、多个卫星和地面站资源进行联合调度[1-5];也可针对深空探测任务[6-7],用于在轨服务或拦截的交会对接任务[8],或中继卫星的通信调度[9]。在轨运行的自主任务规划[10]刚刚起步,主要应用于观测目标由本星其他载荷产生或由其他卫星产生的场景[11],或受到外部条件影响对地面规划的任务进行局部修正[12-13]。

从体系化应用看,卫星的自主任务规划是资源管理(Resource Management)的一部分,是一个与数据融合(Data Fusion)对偶的概念。数据融合模型最早由美国Joint Directors of Laboratories(JDL)、Data Fusion Group 在1985 年提出,并经过了几次修正,公开报道的最新一版(2004 年)如图1 所示。

图1 数据融合的JDL 模型(2004 版)[14]Fig.1 JDL model of data fusion(2004 edition)[14]

数据融合模型较好地解决了多种传感器和情报来源如何服务于指挥控制的总目标,但在对传感器的资源管理未能细化。相关从业人员在实践中发现,资源管理与数据融合具有很强的对偶性,其主要功能的对应关系见表1。

表1 数据融合与资源管理的分级与对应关系[14]Tab.1 Hierarchy and correspondence of data fusion and resource management[14]

在卫星领域,由于天地交互带宽窄、延时大,星上处理能力有限,只有较低层级的数据融合任务在星上运行。而资源管理任务对处理能力的需求较低,因此,已经较多地出现在星上,其典型场景举例如下:

1)0 级资源管理。相控阵天线或合成孔径雷达(Synthetic Aperture Radar,SAR)波位角的计算,给定波束指向,需要计算相控阵每个单元的相位延时参数,各个波位叠加实现指定方向的指向。

2)1 级资源管理。给定待成像目标坐标,计算SAR 雷达正侧视的开机、关机时间,或者控制光学载荷转向成像目标。

3)2 级资源管理。在卫星组网应用中,同时控制多个天线维持星间或星地链路。

4)3 级资源管理。基于目标函数和多种约束条件,综合选择和规划多个对地观测任务。

在这些应用场景中,0 级资源管理往往涉及特定载荷的特性,所能用到的开源库主要是基础数学库,一般由特定平台提供,本文暂不涉及,感兴趣的读者可以阅读文献[15]或其他相关著作。1、2、3 级的资源管理涉及的开源库包括航天器的任务规划库,用于地理信息系统的空间数据库,进行地图投影和坐标转换的库,计算点、线、面几何拓扑关系的库,以及优化目标函数的线性规划库。以下内容将对这几类库做出详细介绍。

2 自主任务规划的新型开发模式

传统星上软件以数管软件和姿控软件为代表,两者都需要与星上环境相同的目标机和模拟星上连接关系的地测设备才能开发。而自主任务规划软件涉及更多的算法和业务流程,更适合在有操作系统的高性能星载计算机上运行,对应的开发模式也可以发生变化,这种新型开发模式如图2 所示。

图2 基于动态语言和嵌入式操作系统的新型开发模式Fig.2 New development models based on dynamic languages and embedded operating systems

变化可大致分为3 步:

1)这类需要调用较多算法库的软件可以用如Python 或Matlab 之类的动态语言进行开发,系统设计和开发者可以利用高级语言中丰富的数据结构,调用各种算法库,完成业务逻辑的梳理与初步实现,并搭建与高级语言实现对应的仿真测试系统。软件和测试系统可以运行在PC 机和任意操作系统上,Windows、Linux 均可。

2)开发者可以将高级语言实现转换到C/C++语言实现,或采用嵌入式动态语言(如Lua)进行流程调度和数据管理,并在性能关键的数据处理功能上用C 实现。如果应用需要多线程、文件系统、驱动程序或通信协议栈的支持,应使用Linux 操作系统和POSIX API 进行开发,这时应用仍运行在PC 机上,但已经可以迁移到高性能嵌入式平台上。

3)将用C/C++或嵌入式动态语言实现的应用程序移植到目标机上,如果目标机上的操作系统也提供业务程序用到的算法库,这时只需要解决目标机和PC 机、目标机和其他设备的接口方面的差异,并处理一些只有在目标机上才能发生的异常情况即可。应用程序的实现逻辑已经经过高级语言和嵌入式语言两级实现的梳理,并经过与仿真测试系统的对接,基本不用在目标机上调试业务逻辑。

风云翼辉操作系统(AIC-OS)是由上海航天电子技术研究所基于SylixOS 开发的大型嵌入式实时操作系统(如图3 所示),具有全自主、强实时、高可靠、高性能等特点,主要面向宇航领域的应用需求,重点支持各种高性能星载计算机和信息处理平台。AIC-OS 对于POSIX 操作系统接口的支持非常完善,因此,移植各类开源软件非常方便,可以大幅降低人力成本和开发成本,缩短软件和最终产品的研制周期。

图3 AIC-OS 的主要组成部分Fig.3 Main components of AIC-OS

虽然目前高性能星载计算机的运算能力和存贮资源已经逐渐接近地面计算机系统,但在选择动态语言引擎时我们仍倾向于选择面向嵌入式环境设计的动态语言。目前,从语言特性、资源开销、生态环境等角度看,Lua 仍然是面向嵌入式动态语言引擎的首选,其他选项如Python、JavaScript 或其他小众语言都有或多或少的不足。Lua 由标准C 编写而成,几乎在所有操作系统和平台上都可以编译和运行。Lua 有意避免提供庞大的运行时库,这样应用程序可以用C/C++针对特定场景提供算法支持。完全功能的Lua 引擎编译后只有200 KiB,非常适合在嵌入式环境中使用。

除了人工编码之外,动态语言和C/C++算法库之间的接口代码可以由简化的封装和接口生成程 序(Simplified Wrapper and Interface Generator,SWIG)自动生成。SWIG 可以自动扫描C/C++头文件中结构体、函数、类的声明,并面向动态语言如Python、Lua 等生成接口代码。当需要面向多种语言生成接口代码时,开发者只需要向SWIG 提供一份接口描述文件即可。

综上所述,在支持以在轨任务规划为代表的智能航天器软件时,需要使用更加复杂的基础软件支持算法和业务流程的开发,并且可以支持同一套应用软件在不同开发平台上运行,避免了针对嵌入式平台重新开发应用软件或大规模调整接口。这一开发方式已经在微纳卫星和新型航天企业的实践中得到验证,如Linux 在航天软件中的使用[16],并用于智能算法的开发[17]。

3 适用于自主任务规划的开源库

3.1 任务规划库:CSPICE

NASA SPICE 是美国国家航空航天局(NASA)喷气推进实验室(Jet Propulsion Laboratory,JPL)下属导航与附属信息研究室(Navigation and Ancillary Information Facility,NAIF)提供的程序集[18],主要用于处理NASA 提供的星历文件、各种深空探测器的位置、速度、姿态,以及科学仪器的安装位置等信息,其名称是Spacecraft、Planet、Instrument、Cameramatrix 和Events 的首字母缩写。NASA SPICE面向的是规划深空探测器科学实验任务和载荷数据处理的科学工作者,但其中提供了较为完善的轨道、姿态以及仪器和成像目标相对位置关系的处理功能,也可用于人造地球卫星的任务规划,如图4 所示。SPICE 软件原最早用Fortran 77 写成,后来用f2c 软件转成了C 版本,NASA NAIF 用CSPICE 的名称维护C 版本,并提供Matlab 版本。随着Python 的流行,SPICE 软件也提供Python 绑定Spiceypy。

图4 SPICE 任务规划库的主要功能Fig.4 Main functions of the SPICE task planning library

3.2 空间数据库:Spatialite

空间数据库(Spatial Database)是用于存储、处理和分析几何图形和图形图像的数据库系统。在地面应用中,空间数据库主要用于处理遥感数据和地图数据。在任务规划应用中,运行在星载计算机上的空间数据可以储存目标信息、数字地面模型(Digital Terrain Model,DTM)以及遥感数据[19-20]。

使用空间数据库储存的信息主要是为了后续多次查找和再利用。空间数据库针对二维(x,y)或三维(x,y,z)位置信息提供了R-Tree 索引功能,如图5 所示。对于位置信息,R-Tree 索引将位置信息检索的计算复杂度从O(N)降低到O(logN)。当任务规划应用需要从大量待观测目标或DTM 数据中查找满足一定几何关系的点时,带有R-Tree 索引的空间数据库可以更快地提供备选项。之后可以再使用SPICE 或其他任务规划库计算具体成像时间点。

图5 用于空间信息检索的R-Tree 索引算法[21]Fig.5 R-Tree index algorithm for spatial information retrieval[21]

3.3 地图投影和坐标转换:PROJ

众所周知,地球是一个两极稍扁、赤道略鼓的椭球,大地坐标系(经纬度)依照地球椭球模型定义。而世界各国在进行本国的大地测量时,所使用的椭球模型各不相同,使用错误的椭球模型会造成测量数据和实际位置产生误差。在计算测地线Geodetic问题,即计算地球上两点之间的距离时,也需要考虑用椭球模型和托球面上的距离公式来计算[22]。

目前,公认用于计算地图投影的开源软件是PROJ,该软件早在1983 年就开始开发,使用如图6所示投影,到20 世纪90 年代,第4 版软件PROJ.4 就已经相当成熟,得到了广泛的使用。目前,该软件开始用C++等现代软件开发方法升级,目前的最新版本是7.1.1。因此,如果需要使用成熟版本,或者嵌入式环境的编译器对C++的支持比较差,可以使用纯C 的PROJ.4。反之,如果操作系统和C++语言支持较好,也可以使用最新版本。

图6 UTM(通用墨卡托投影)地图[23]Fig.6 UTM(universal Mercato projection)map[23]

3.4 几何拓扑关系:geos

geos 都是处理几何图形拓扑关系的开源库,实现的是ISO/IEC 13249-3 SQL/MM 中规定的各种几何关系。该标准中定义了几何图形与几何图形的空间操作:

空间操作:相等(ST_Equals)、断开(ST_Disjoint)、接触(ST_Touches)、包含(ST_Within)等。

几何图形:点(ST_Point)、线(ST_Curve)、面(ST_Surfice)和集合类型(ST_GeomCollection)等,如图7 所示。

图7 空间数据中规定的几何图形Fig.7 Geometry specified in spatial data

3.5 线性规划:GLPK

GNU 线性规划库(GNU Linear Programming Kit,GLPK)是一款成熟的开源库,支持线性规划、混合整数规划以及其他相关问题的建模和求解。在求解方法上,GLPK 支持单纯形法(Simplex Method)、内点法(Interior-point Method)和分支定界法(Branch-and-cut Method)。在编程语言上,GLPK 使用C 语言编写,提供了可以嵌入其他程序的编程接口。GLPK 还支持面向规划问题的建模语言MathProg,可以直接以声明的形式描述线性规划问题,在需要改变策略时降低了在轨编程的开销。

4 动态语言和中间件移植

4.1 运行平台简介

本文选取了4 种典型星载计算机或者数据处理器测试开源库的运行,其中,BM3823 和FT6672V都是200 MHz 主频的抗辐射处理器,而P1022 和C6678 都是1 GHz 主频的高性能工业级处理器,具体参数见表2。

表2 移植开源库的平台Tab.2 Platform for porting open source libraries

4.2 移植测试情况

作为一种嵌入式软件,自主任务规划软件一般是独立软件产品,所有代码都属于单个应用程序,因此,本文作者以静态链接库的形式对几种自主任务规划软件中可能用到的开源库进行了编译,并将编译结果(目标文件)打包成静态链接库。AIC-OS对动态链接库的支持也很完善,当有多个应用都需要这些库时,也可以按照动态链接库的形式编译,并由操作系统统一管理。

目 前,AIC-OS 使用基于Eclipse 开发环境,并基于工程文件生成Android 风格的Makefile 完成应用程序编译。而开源库一般使用GNU autotools 进行编译,目前尚不支持AIC-OS。因此本文选用了使用python 脚本生成Makefile 的方案,其主要流程包括:1)基于命令行输入工具链参数设置编译选项;2)调用gcc 生成依赖关系;3)使用Jinja2 模板生成Makefile;4)调 用make 编译库。

完成交叉编译后,将生成目标平台的静态库加入AIC-OS 的APP 工程,编写测试程序对库的功能进行测试。移植和测试结果见表3。

表3 移植和测试结果Tab.3 Results of porting and testing

在表3 中,Sqlite 为微型嵌入式数据库,Spatialite 就是在Sqlite 基础上开发的,Proj 在存储不同坐标系的信息时也使用Sqlite,因此独立计算。

5 结束语

在高性能星载计算机和大型嵌入式操作系统的基础上,先进的在轨任务规划软件已经可以使用动态语言和开源库进行系统设计和迭代实现。这种开发方法是快速实现在轨任务规划和航天器智能化的必由之路。本文调研并移植的任务规划库、空间数据库等中间件,已经可以在星载计算机上运行,可支持后续在轨任务规划系统的设计与实现。希望本文的工作能给从业者带来启发,也欢迎与本文作者洽谈合作。

猜你喜欢
嵌入式开源动态
国内动态
基于IMX6ULL的嵌入式根文件系统构建
国内动态
校园武术“学、练、赛”一体化实践探索
国内动态
动态
五毛钱能买多少头牛
2019(第十四届)开源中国开源世界
2019开源杰出贡献奖
高校图书馆开展嵌入式信息素质教育的思考