system: [SYSTEM]

user: 3. 灵巧卫星成像仿真技术 3.1. 卫星对象的创建 卫星创建的基础是其轨道动力学模型的建立，之后通过设置卫星的姿态，便可以实现卫星机动观测过程的仿真。 3.1.1. 轨道动力学模型 创建卫星对象的重点在于对IAgSatellite等接口的灵活应用。轨道动力学模型是卫星对象的关键，最常用的轨道预报模型是二体模型TwoBody和高精度轨道预报模型HPOP。二体模型需要设置的基本参数有轨道的预报模型、开始时刻、结束时刻、输出步长、轨道历元、坐标类型、坐标系、经典轨道根数等。表1对这些主要参数的设置进行了整理。 当对轨道预报模型要求较高时，就需要使用高精度轨道预报模型HPOP。对于高精度模型而言，除了上述二体模型的参数设置外，还需要对摄动力等其他影响进行考虑。目前主要考虑的摄动力有中心天体引力、大气阻力、太阳光压、第三体引力等。这些摄动力参数的设置与二体模型中参数的设置类似。根据上述梳理的信息，结合任务需求合理设置上述参数，就可以成功创建观测任务所需的轨道动力学模型。 3.1.2. 卫星姿态设置 将卫星与相机对象建立完成后，观测与成像仿真的核心步骤就是控制卫星的姿态机动，进而仿真出卫星机动观测地面成像的过程。由于卫星机动观测目标的过程是一个非常复杂的机动过程，所以在成像时会经过多次机动控制，那么就需要设置多个姿态机动片段参数。对于这一复杂的过程，目前STK并没有提供多个姿态数据控制的接口，为此，本文采取的是发送STK的Connect命令来实现的。通过调整命令参数，就可以实现对姿态控制片段的添加、删除和修改。其主要的命令格式如下： AttitudeSegment {Add|Delete|Modify} {SegmentType} 3.2. 相机对象的创建 相机是星载设备，所以相机必须是在建立好卫星对象之后才能创建的。与卫星对象的参数一样，相机的视场角大小、在地面的成像状态等参数同样是观测任务的核心参数，直接影响着观测仿真的结果。相机对象的建立主要使用的接口是IAgSensor。下面以任务中使用的矩形镜头为例，对相机的镜头类型、镜头水平方向视场角、镜头垂直方向视场角、相机光束颜色和地面成像状态等一些参数的设置进行了梳理说明，如表2所示。 3.3. 观测目标的创建 观测目标即卫星观测成像的目标区域。根据常见观测目标的特点，可以将其分为三类：点目标、条带目标、区域目标。只有在场景准确创建出三类观测目标，才能进一步进行卫星姿态规划，完成卫星的观测成像仿真。这三类目标在仿真场景中的建立各有不同，下文将进行逐一介绍。 3.3.1. 点目标 点目标是指宽度为相机幅宽、长度约等于幅宽的目标区域。点目标的创建，主要利用STK中的 Table 1 The parameters of the satellite two-body mode 参数名称 使用的函数或属性 预报模型 IAgSatellite.SetAttitudeType 开始时刻 IAgVePropagatorTwoBody.StartTime 结束时刻 IAgVePropagatorTwoBody.StopTime 输入步长 IAgVePropagatorTwoBody.Step 轨道历元 IAgOrbitStateClassical.Epoch 坐标类型 IAgOrbitState.ConvertTo 坐标系 AgECoordinateSystem 经典轨道根数 AssignClassical 位置与速度 AssignCartesian 表1. 卫星二体轨道模型的参数设置 Table 2 The parameters of the camera model settin 参数名称 使用的函数或属性 镜头类型 IAgSensor.SetPatternType(AgESnPatternPatternType) 水平方向视场角 IAgSnRectangularPattern.HorizontalHalfAngle 垂直方向视场角 IAgSnRectangularPattern.VerticalHalfAngle 相机光束颜色 IAgSensor.Graphics.Color 填充成像区域 IAgSensor.Graphics.FillVisible 持续填充 IAgSnProjection.FillPersistence 三维场景填充 IAgSensor.VO.FillVisible 三维场景透明度 IAgSensor. VO.FillTranslucency 表2. 相机模型的参数设置 IAgTarget接口，通过该接口的Position属性，可以设置点目标的经纬度。利用Graphics属性可以对点目标的颜色、线条等二维场景中的参数进行设置。此外，还有VO、UseTerrain等属性可用来设置点目标的三维特性等参数。最常用的两种点目标输入方式，一种是直接输入点目标的名称、经度和纬度，利用上述属性编写函数AddPointTarget (string name， double latitude， double longitude)，即可实现点目标的的添加；另一种是在二维图中用鼠标点击来确定点目标，这种方法对于用户非常方便，此种方式通过委托IAgUiAx2DCntrlEvents_MouseDownEventHandler (object sender， IAgUiAx2DCntrlEvents_MouseDownEvent e)实现对鼠标单击的响应，然后再传递鼠标捕捉到的经纬度信息到函数AddPointTarget (string name， double latitude， double longitude)即可。 3.3.2. 条带目标 条带目标是指宽度为相机幅宽、长度明显大于相机幅宽的目标区域。它的创建可以通过IAgLineTarget接口来实现，利用IAgLineTarget接口的方法Add、Remove等可以实现条带上点的添加和移除。结合该接口的方法，编写函数AddLineTargetPoint (double latitude， double longitude)，通过传入经度纬度参数即可实现条带点的添加。也可以通过Connect命令“SetLine*/LineTarget/LineTargetLatLon” + LineTargetPoints来实现对一系列条带点的添加，LineTargetPoints表示一系列经纬度数据点的集合。与点目标类似，一方面，条带目标可以通过直接输入一系列条带上点的经纬度参数来进行创建，另一方面，也可以利用委托来实现二维场景对鼠标点击的响应，将鼠标捕捉的经纬度信息添加到条带序列当中，实现条带的创建。此外，针对大量数据或用户已有边界条带目标的处理，用户可以直接将区域目标的边界数据按照经度、纬度的格式写在txt文本中，然后将文件数据直接导入到场景中，从而创建条带目标，这样就极大地提高了创建条带目标的效率。 3.3.3. 区域目标 区域目标是指宽度长度均大于相机幅宽的目标区域，其创建主要依赖于IAgAreaTarget接口。该接口有AreaType、AreaTypeData、Graphics等属性，通过这些属性可以对区域的类型、区域数据、区域图形的颜色线条等进行设置。例如可以将区域类型设为边界点刻画型AreaType = AgEAreaType.ePattern，利用AreaTypeData的方法Add可以实现区域点的添加。不过，对于边界点很多的情况，用这种算法创建区域效率很低，可以将所有的边界数据存在一个数组中，然后利用CommonTasks属性的方法SetAreaTypePattern将整个数组一次性加载到场景中，即可实现区域的快速创建，从而大大提高区域目标的创建效率。与点目标、条带目标一样，对于区域目标数据的输入可以设计直接输入、鼠标点击和导入文件三种方式。 除了普遍区域的刻画外，利用STKX还可以仿真出一些特殊的地理信息，比如中国国内的省界、森林、湖泊等信息。利用命令格式GIS Import {ObjectType} [ ]与STK进行通信，可以加载.shp格式的地理信息，实现这种功能。