Francesco Mazzeo
Francesco Mazzeo

Reputation: 61

How to create an orbit of a satellite and animate it with SGP4 model?

I'm a beginner of Cesium and Javascript code. I need to create the orbit of a satellite (ESEO) around the globe. The satellite have to move according to SGP4 model. How can I create it in Cesium sandcastle? I'm in trouble because I'm not finding any tutorials or examples online that explain how to do it. Right now I have only positioned the ground station where I want on the globe.

var viewer = new Cesium.Viewer ('cesiumContainer', {
    scene3DOnly: false,
    selectionIndication: false,
    baseLayerPicker: true
                                });

Cesium.Ion.defaultAccessToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJqdGkiOiI4ODY0ZjkwMy03YmZlLTRlNGEtYmNhOS0xMDBlZGVmNDRkZGMiLCJpZCI6OTE4MSwic2NvcGVzIjpbImFzciIsImdjIl0sImlhdCI6MTU1MzYxMjM5Mn0.aYYX1f1MQfg9zLFu0vnP3A56Neo4Y_N3G2O5tuTS0XM';

// Enable lighting based on sun/moon positions
viewer.scene.globe.enableLighting = true;

//Stazione di terra
var entity = viewer.entities.add({
  position: Cesium.Cartesian3.fromDegrees(12.04, 44.23),
  ellipse : {
    semiMinorAxis : 150000.0,
    semiMajorAxis : 150000.0,
    material : Cesium.Color.YELLOW.withAlpha(0.5)
  }
});
var ellipse = entity.ellipse;
ellipse.material = new Cesium.GridMaterialProperty({
  color : Cesium.Color.YELLOW,
  cellAlpha : 0.2,
  lineCount : new Cesium.Cartesian2(8, 8),
  lineThickness : new Cesium.Cartesian2(2.0, 2.0)
});


var GroundStation = viewer.entities.add({
    name : 'Ground Station',
    position : Cesium.Cartesian3.fromDegrees(12.07, 44.23),
    point : {
        pixelSize : 5,
        color : Cesium.Color.RED,
        outlineColor : Cesium.Color.WHITE,
        outlineWidth : 2
    },
    label : {
        text : 'Ground Station',
        font : '14pt monospace',
        style: Cesium.LabelStyle.FILL_AND_OUTLINE,
        outlineWidth : 2,
        verticalOrigin : Cesium.VerticalOrigin.BOTTOM,
        pixelOffset : new Cesium.Cartesian2(0, -9)
    }
});

Upvotes: 4

Views: 3658

Answers (2)

hmcmurray
hmcmurray

Reputation: 81

You can look at this project for a demonstration of some of the items listed in aaastro's answer.

jspredict

You can also checkout this great paper and supporting source for further explanations on TLE, SGP4, Cesium.

Spacemission

Visualization of Orbital Debris with Cesium and Satellite-js

Upvotes: 3

aaastro
aaastro

Reputation: 171

When people draw orbits in Cesium, they usually use polylines instead of the ellipse entity that you use.

Link to polyline/polyline collection: https://cesiumjs.org/Cesium/Build/Documentation/Polyline.html

Now with regards to SGP4, this propagator takes in a NORAD two-line element. So if you have your orbital parameters you can create your own TLE. This should be pretty easy to do in an external python program and writing it to a JSON file which can be read into javascript and then passed to the propagator. For more info about TLEs, wikipedia has a good description of how it is formatted.

TLE info: https://en.wikipedia.org/wiki/Two-line_element_set

For the actual SGP4 implementation, there is a Satellite.js package whose github is linked below. They are able to properly implement a propagator that takes in NORAD TLE's and spits out trajectory information.

Satellite.js github: https://github.com/shashwatak/satellite-js

I am pretty sure you have to convert the TLE into different parameters you pass into the satellite-js module which propagates it.

When you are doing this, I highly recommend creating a worker thread for the code to execute because of the heavy overhead. You do not want to have all your mathematical heavylifting being done along with the graphical rendering of Cesium.

Another note of importance: You absolutely should not need to use SGP4 if you can avoid it. You should create your own propagator that fits the needs of your project. Orbit determination can be tricky but is much better practice than using a propagator meant for NORAD satellite tracking.

Upvotes: 3

Related Questions