Search Blogs AGI.com Blogs

Calling All Jedis!!

By: Stephanie Eftimiades
This weekend a group of amateur astronomers identified a potentially aggressive move by the Empire. While stargazing early Sunday morning atop Haleakala, T.S. Kelso, of Maui, Hawaii exclaimed, "That's no moon!" when the ominous sphere came into focus. Data from around the world came rushing into the ComSpOC headquarters in Exton, PA, and fears were confirmed: Within the week, should the Death Star maintain its current course, it will arrive at a position just inside the Geostationary belt. Yoda led a contingency of the Jedi Council to meet with AGI's top engineers to discuss these findings. AGI's team simulated the gravitational perturbations on the active satellite catalog to demonstrate these catastrophic effects. Calculating the Death Star entering orbit at an altitude of about 32,000 km and having a mass equal to that of about 1/10 our own moon or 7.3477x1021 kg with the GM value we used of 4.9028 x 1011 m3/s2, reasonable given the 160 km diameter and the unknown density of quadanium steel. While it’s obvious Vader’s Storm Troopers pose little threat, not being able to hit the broad side of a barn, the mere presence of the Death Star is another story. We’re not even talking about tractor beams or lasers canons, but just the enormous mass of a moon-sized object coming close to the 1,000+ active satellites orbiting Earth would throw our satellites into unusable orbits or destroying them as they crash into the surface from the gravitational force alone. We are looking for the finest Jedis to join the Rebel Alliance and reinstate peace and justice in the Galaxy. Especially since we have yet to see how the force awakens! A full report of AGI's assesment can be found below, and this interactive STK scenario can be downloaded here. Users should login with their SDF account, or "Anonymous" with no password required.

Keep an eye on sky and...  May the 4th be with you!

Official STK Report to the Jedi Council

Scenario details:
  1. We used STK Astrogator to model the approach trajectories and orbit insertion burn of a vehicle entering earth orbit
  2. We used the component browser to create a custom “central body” (something with a gravitational field) and applied the SPICE trajectory generated with Astrogator and a mass value and diameter of our choosing (this is how asteroid missions are often modeled in STK Astrogator)
  3. We then used the component browser again to modify our standard high-precision orbit propagator to include the 3rd-body effects of our new “Death Star” central body
  4. The rest was fairly straightforward automation sequence. We looped through every active satellite in the public catalog and:
    1. propagated each ephemeris using the SGP4 propagator
    2. Using the STK Object model we extracted the position and velocity information of each vehicle at our initial state
    3. Applied those conditions to a new object using STK Astrogator
    4. Propagated with the custom propagator (that included the Death Star Gravity model)
    5. The ephemeris of the propagated satellite was saved and added to a Multi-Track Object (MTO) which is the only “purely visual” object in STK so we could display the 1000+ trajectories in a highly-efficient manner.
  5. Once we ran through this for all the satellites, we applied a 3D model we downloaded and cut a video.
AGI's Kevin Ten Eyck developed the following MATLAB script to automate the STK Engine to generate the simulation. It requires that “Death Star” central body to already be defined and attaches to an open scenario. The ssc numbers are read from a .mat file tic uiapp = actxGetRunningServer('STK10.application'); root = uiapp.Personality2; root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec'); scen = root.CurrentScenario; scenPath = root.ExecuteCommand('GetDirectory / Scenario').Item(0); load Active; mto = scen.Children.New('eMTO','AllSatellites'); mto.vo.GlobalTrackOptions.LinesVisible = false; mto.Graphics.GlobalTrackOptions.TracksVisible = 0; root.BeginUpdate; validSat = 1; for i=1:length(Active) strTLE = Active{i,1}; satellite = root.CurrentScenario.Children.New('eSatellite', <'tle' strTLE>); satellite.SetPropagatorType('ePropagatorSGP4'); propagator = satellite.Propagator; propagator.UseScenarioAnalysisTime; propagator.CommonTasks.AddSegsFromOnlineSource(strTLE); propagator.AutoUpdateEnabled = true; try propagator.Propagate; satPosDP = satellite.DataProviders.Item('Cartesian Position').Group.Item('ICRF').ExecSingle(propagator.StartTime); satx = cell2mat(satPosDP.DataSets.GetDataSetByName('x').GetValues); saty = cell2mat(satPosDP.DataSets.GetDataSetByName('y').GetValues); satz = cell2mat(satPosDP.DataSets.GetDataSetByName('z').GetValues); satVelDP = satellite.DataProviders.Item('Cartesian Velocity').Group.Item('ICRF').ExecSingle(propagator.StartTime); satvx = cell2mat(satVelDP.DataSets.GetDataSetByName('x').GetValues); satvy = cell2mat(satVelDP.DataSets.GetDataSetByName('y').GetValues); satvz = cell2mat(satVelDP.DataSets.GetDataSetByName('z').GetValues); % Create Astrogator satellite sat = scen.Children.New('eSatellite', <'astro' strTLE>); sat.SetPropagatorType('ePropagatorAstrogator'); driver = sat.Propagator; driver.Options.DrawTrajectoryIn3D = 0; driver.MainSequence.RemoveAll(); initState = driver.MainSequence.Insert('eVASegmentTypeInitialState', 'Init State', '-'); initState = driver.MainSequence.Item(0); initState.SetElementType('eVAElementTypeCartesian'); initState.InitialState.Epoch = propagator.StartTime; kep = initState.InitialState.Element; kep.X = satx; kep.Y = saty; kep.Z = satz; kep.Vx = satvx; kep.Vy = satvy; kep.Vz = satvz; propagate = driver.MainSequence.Insert('eVASegmentTypePropagate', 'Propagate', '-'); propagate.PropagatorName = 'Death Star'; propagate.Properties.Color = 65280;  % Green duration = propagate.StoppingConditions.Item('Duration'); duration.Properties.Trip = 259200;  %3 day deathStarAlt = propagate.StoppingConditions.Add('Altitude'); deathStarAlt.Name = 'Death Star Alt'; deathStarAlt.Properties.CentralBodyName = 'DeathStar'; deathStarAlt.Properties.Trip = 0; earthAlt = propagate.StoppingConditions.Add('Altitude'); earthAlt.Name = 'Earth Alt'; earthAlt.Properties.CentralBodyName = 'Earth'; earthAlt.Properties.Trip = 0; driver.RunMCS; sat.Propagator.ClearDWCGraphics; satellite.Unload; satelliteFilePath = ; sat.ExportTools.GetEphemerisStkExportTool.Export(satelliteFilePath); track = mto.Tracks.Add(validSat); track.Points.LoadPoints(satelliteFilePath); track.Interpolate = true; trackGraphics = mto.Graphics.Tracks.Item(validSat-1); trackGraphics.FadeTimes.UsePostFade = true; trackGraphics.FadeTimes.PostFadeTime = 0; if strcmp(Active{i,2},'LEO') trackGraphics.Color = 65535; %Yellow elseif strcmp(Active{i,2},'MEO') trackGraphics.Color = 33023; %Orange elseif strcmp(Active{i,2},'HEO') trackGraphics.Color = 16776960; %Blue elseif strcmp(Active{i,2},'GEO') trackGraphics.Color = 65280; %Green end sat.Unload; validSat = validSat + 1; catch if scen.Children.Contains('eSatellite', <'tle' strTLE>) satellite.Unload; end if scen.Children.Contains('eSatellite', <'astro' strTLE>) sat.Unload; end clear satellite sat end end root.EndUpdate; toc
Posted: 5/4/2015 12:56:07 PM


Tags