Skip to content

handong1979/orbitdynamics

Repository files navigation

orbitdynamics

a C++ program for orbit dynamics, include compments:

orbit propagator

formation

maneuver

etc

  • RKF78 propagator
  • gravity field file supported
  • DE405/DE421 for planet's ephemeris
  • MSISE-00 atmosphere model
  • virtual base class and easy to extend
  • use armadillo library as vector and matrix operation
  • use hdf5 data file

C++轨道动力学计算程序 卫星、航天器轨道动力学的精密计算,包括主要特征包括:

  • RKF78高精度积分器

  • 支持地球引力场系数文件

  • DE405/DE421行星历表

  • MSISE-00大气模型

  • 采用合适的C++面向对象结构,方面扩展

  • 使用armadillo进行矢量、矩阵运算

  • 可保持HDF5数据文件

    轨道动力学计算中,需要涉及惯性坐标系、地固坐标系、轨道坐标系等左边转换功能,其中较为复杂的地固系与惯性系的转换需要计算岁差、章动、极移以及在计算中使用UTC、原子时、动力学时等多种时间系统。为此,轨道动力学计算需要建立在天文参数计算、坐标转换、时间系统等基础功能之上,从基础进行独立开发的难度较大。

    为了精确计算轨道动力学,需要考虑地球非球形引力、日月引力、大气阻力、光压等多种摄动,其中需要地球引力场模型、日月星历模型、地球大气模型等多种模型,用于摄动力模型计算。

Example: // a satellite

CSatellite sat;

// orbit epoch and elements

CDateTime epoch(2006,5,1,0,0,0);

Kepler ZY_Orbit(7157, 0.001, 98.5*RAD, 60*RAD, 90*RAD,	 60*RAD);

// set satellite's param

sat.Mass0 = 1000;  // use default value

sat.Cr = 1.0;

sat.LightPressArea = 20.0;

sat.Cd = 2.2;

sat.AirDragArea = 20.0;

// initialize CSatellite

sat.Initialize(epoch,ZY_Orbit);

// set force model

sat.SetForce(21,ODP_EARTH_ZONAL|ODP_EARTH_TESSERAL|ODP_AIR_DRAG|ODP_SOLAR_CENT|ODP_SOLAR_PRESSURE|ODP_LUNAR_CENT|ODP_POSTNEWTON);

// propagate the orbit and print position and velocity

double t;

for(t=0; t<86400; t+=60)
{
	cout << t << TAB << sat.Pos().t() << TAB << sat.Vel().t() << endl;
	
	sat.Propagate(60,60);
	
}