STK与matlab交互 Astrogator模块(9)

一、背景介绍

前面八节讨论的轨道机动模型均为脉冲形式,既使卫星的速度在瞬时发生改变,在本节中,将调整卫星的机动方式改为有限推力脉冲机动的方式,即Finite形式的脉冲。为了便于理解,本文中结合STK自带帮助文档的教程,简单介绍一下有限推力模型情况下的机动。

二、案例仿真

场景设计:将一颗低轨卫星向地球静止轨道转移,使用有限推力的方式,为了完成这个目标,你将:(i)定义航天器的初始状态。(ii)建立一个custom component。(iii)建立最优有限推力机动步骤。(iv)对小推力轨道建模。

(1)首先介绍什么是小推力机动。小推力是一个相对的概念,在太空轨道转移中,小推力机动有一个边界:即加速度小于等于10e-3m/s^2。这种机动方式通常在长期轨道任务规模通常长达数月中采用。它们也许不是很快,但是非常有效。许多系统使用这种推进方式通常是电推进的方式。在这个教程里,你将优化这个任务,然后大致的估计会消耗掉多少燃料。

(2)第一步建立一个场景叫做Spiral_to_GEO_Optimal_Finite。建立的分析时间为13 Dec 2018 17:00:00.000 UTCG到15 Dec 2018 17:00:00.000 UTCG。代码如下:

clear;clc
%% 本文将实现兰伯特制导,末位置为对目标绕飞所需要的时间和地点
uiApplication = actxGetRunningServer('STK11.application');
% Get our IAgStkObjectRoot interface
root = uiApplication.Personality2;
checkempty = root.Children.Count;
if checkempty ~= 0
    root.CurrentScenario.Unload
    root.CloseScenario;
end
%% 根据你的需要设定场景的名称
root.NewScenario('Spiral_to_GEO_Optimal_Finite');
StartTime = '15 Dec 2018 17:00:00.000';    % 场景开始时间
StopTime = '17 Dec 2018 17:00:00.000';     % 场景结束时间
root.ExecuteCommand(['SetAnalysisTimePeriod * "',StartTime,'" "',StopTime,'"']);
root.ExecuteCommand(' Animate * Reset');

(3)使用零部件浏览器创建自定义。在着手建造航天器之前,让我们先建造一个可以用于航天器的发动机模型。(3.1)打开Utilities菜单。(3.2)打开Component Browser。(3.3)选择Engine Model directory 。(3.4)选择Constant Acceleration and lsp model。(3.5)点击Duplicate按钮,重新命名为 MyEngine,点击ok按钮。(3.6)双击打开MyEngine。(3.7)设定加速度为9.8cm/s^2(3.8)设置比冲为3000s。

%% 利用Component Browser生成发动机模型
root.ExecuteCommand(['ComponentBrowser */ Duplicate "Engine Models" "Constant Acceleration and Isp" MyEngine']);
bb=root.ExecuteCommand(['ComponentBrowser_RM */ GetValue "Engine Models" MyEngine']);
root.ExecuteCommand(['ComponentBrowser */ SetValue "Engine Models" MyEngine Acceleration 9.8 cm*sec^-2' ]);
root.ExecuteCommand(['ComponentBrowser */ SetValue "Engine Models" MyEngine Isp 3000 s' ]);

** 在这里解释一下比冲的定义,为单位推进剂的量产生的冲量。如果用重量描述推进剂的量,比冲拥有时间量纲,国际单位为s;如果用质量描述推进剂的量,比冲以速度量纲表现,国际单位为米每秒。由于比冲也可以用单位时间内消耗单位推进剂所产生的推力,故又称比冲为比推力。质量描述I_{sp}=\frac{dI}{dm},重量描述为I_{sp}=\frac{F}{g_{0}\dot{m}},其中F:发动机推力,\dot{m}:推进剂质量流速,{\frac{F}{\dot{m}}}是比冲又被称为“比推力”的原因。

(4)建立一个卫星,其轨道六根数由下列代码给出。

Sat_name='Finite_Maneuver';
satellite= root.CurrentScenario.Children.New('eSatellite', Sat_name);
satellite.SetPropagatorType('ePropagatorAstrogator'); 
satellite.Propagator
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList Initial_State Maneuver Propagate']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.CoordinateType Modified Keplerian']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Epoch ',StartTime,' UTCG']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.ElementType "Kozai-Izsak Mean"']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.sma 7000 km ']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.ecc 0']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.inc 28.5 deg']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.w 0 deg']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.TA 140 deg']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Initial_State.InitialState.Keplerian.RAAN 0 deg'])

(5)定义机动模块。将推力类型转变成Finite,推力预报器设置为Earth Point Mass,设置推进类型Attitude Control to Thrust Vector,设置高度更新为Update during burn

root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.MnvrType Finite']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.Propagator "Earth Point Mass"']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.AttitudeControl Thrust Vector']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.AttitudeUpdate Update during burn']);

定义机动模块的轴为机动星的ICRF系,使用球形选项定义。方位角为42度,高程角为27度

root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.ThrustAxes "Satellite/Finite_Maneuver ICR.Axes"']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.Spherical.Azimuth 42 deg']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.Spherical.Elevation 27 deg']);

定义发动机,将发动机选择之前定义的MyEngine。将整个推力过程设置的时间设置为18小时。

root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.EngineModel MyEngine'])
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Maneuver.FiniteMnvr.StoppingConditions.Duration.TripValue 18 hr'])

(6)传播器的值设置为1天,运行得到结果

oot.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver SetValue MainSequence.SegmentList.Propagate.StoppingConditions.Duration.TripValue 1 day']);
root.ExecuteCommand(['Astrogator */Satellite/Finite_Maneuver RunMCS']);

三、结果

  • 13
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值