TLE Estimation for an Upcoming Rocket Launch
- Date: 2020-11-15
- Author: Mark Jessop firstname.lastname@example.org
Scenario: RocketLab are launching 30 small-sats into space in a few days. We know that one of them is going to be transmitting on the amateur radio bands, but we haven't been able to obtain a pre-launch TLE yet. We want to get setup to use strf to listen for beacon signals (see my guide here), but we need to know when to expect the satellites. We have some basic orbital information from a press release, so how can we use this to estimate a TLE for prediction purposes?
Note: I am approaching this from the point-of-view of someone who really don't know much about orbital mechanics. I'm relying heavily on the experience of others, and the content below is my attempt at documenting the process taken.
Thanks to Cees Bassa for the amazing software as always...
- A functioning Sattools instance. Get sattools from here: https://github.com/cbassa/sattools#installation and note the fairly lengthy installation steps.
The commands below assume you are in your sattools dir. You will also need to add details of your location into the
Note: If you've previously been using
strf, then you might have some environment variables (e.g.
$ST_DATADIR) set to point to your strf directory. You will need to re-point these to the
sattools directory, else many of the utilities will segfault.
Worked Example: RocketLab Return-to-Sender Launch (Originally 2020-10-16)
Basic launch stats from press kit ( https://www.rocketlabusa.com/assets/Uploads/Return-to-Sender-Press-Kit-RL-Final2.pdf )
- Launch Time: 2020-11-16T01:44:00Z
- Target Inclination: 97.3
- Target Orbit: 500x500km
Generating and checking an estimated TLE
We will use the
faketle tool to generate a TLE based on the above details.
faketle requires the following information:
-q Perigee altitude (km) -Q Apogee altitude (km) -I Orbital inclination (deg) -n RA of the ascending node (deg) -w Argument of perigee (deg) -m Mean anomaly (deg) -t Epoch (YYYY-mm-ddThh:mm:ss) -i Satellite number -d Time offset from epoch (s)
Scott Tilley's 'Basic Orbital Dynamics' guide has a good overview of the different elements.
Some of the above we can get directly from the above information:
- Perigee / Apogee Altitudes: 500km, however we will set perigee to 499km, and apogee to 501km to avoid a resultant eccentricity of 0, which some satellite prediction software may have issues with.
- Orbital Inclination: 97.3 degrees.
- Epoch: We'll start with the launch time of 2020-11-16T01:44:00Z
- Satellite Number: We'll just with 99999 for now.
Others we need to make some guesses about:
- Argument of Perigee: The default value is 0, which is OK for orbits with low eccentricity.
- Right-Angle of the Ascending Node (RAAN): The default value is 0. We're going to start with this and adjust it by trial-and-error.
- Mean Anomaly: The default value is 0. We're going to start with this too, and adjust too.
We're also going to make use of the time-offset from epoch value to approximate the impact of the accelleration during launch. Cees has found that setting this to 5 minutes (300 seconds) works well.
Generate an initial TLE based on the above data:
$ ./faketle -q 499 -Q 501 -I 97.3 -t 2020-11-16T01:44:00 -n 0 -m 0 -d 300 > fake.txt
We now need to load this up in another tool,
satorbit, which will give us a map of the world showing the position of the sat at a given time. Open another terminal and run:
$ ./satorbit -c fake.txt -q -t 2020-11-16T01:44:00 -L 178 -B -39
Note that we've provided satorbit with the TLE file we just generated, a time (the launch time), and a view latitude (-L) and longitude (-B). We've also told it to plot known launch sites (-q).
We can see the sat on the lower right of the image. Use the
, keys to step back/forward in time in one minute steps. You can get a listing of what commands can be used in in this mode by pressing
h and looking in the terminal you loaded satorbit in.
Note that whenever you step in time like this, satorbit will reload the TLE file. We're going to make use of this. Advance so the time reads 2020-11-16T01:49:00.
Now we have our next aim: We need to adjust the RAAN and Mean Anomaly parameters such that the sat is directly over the launch site (in this case, on the Mahia Peninsula of New Zealand) at 2020-11-16T01:49:00 (5 minutes after the epoch).
Without getting too deep into orbital mechanics (not that I understand it that well anyway), adjusting RAAN will have the effect of moving the track around the earth in longitude, and Mean Anomaly will adjust where the sat is on that track at any particular time.
For example, lets increase RAAN by 90 degrees:
$ ./faketle -q 499 -Q 501 -I 97.3 -t 2020-11-16T01:44:00 -n 90 -m 0 -d 300 >fake.txt
Tweak the time back and forth by one step with the
, keys, and we have this:
We can see the track now passes near our launch site, but the sat is somewhere on the other side of the Earth. Let's adjust the Mean Anomaly by 180 degrees:
$ ./faketle -q 499 -Q 501 -I 97.3 -t 2020-11-16T01:44:00 -n 90 -m 180 -d 300 >fake.txt
Closer! Now we need to keep adjusting these values until we end up with the sat over the right location. It helps to zoom in by holding the cursor over the target location and using the
After some trial and error I ended up with:
$ ./faketle -q 499 -Q 501 -I 97.3 -t 2020-11-16T01:44:00 -n 87 -m 218.5 -d 300 >fake.txt
Good Enough! The resultant TLE is:
1 99999U 20321.07569444 .00000000 00000-0 50000-4 0 04 2 99999 97.3000 87.0000 0001454 0.0000 218.5000 15.21937999 06
We can now make use of the
pass tool within sattools to perform some predictions for an observation location.
$ ./pass -c fake.txt -s 8650 -t 2020-11-16T01:44:00 -l 10h -A 1 -a Observer: Mark Jessop (8650) [-34.7207, +138.6928, 80m] Elements: fake.txt UT Date/Time: 2020-11-16T01:44:00 for 10 h 99999 | 2020-11-16T03:19:45 55/ 1 | 03:24:18 111/14 | 03:28:54 167/ 1 | 99999 | 2020-11-16T04:52:30 350/ 1 | 04:57:44 277/30 | 05:03:05 204/ 1 |
-cchooses the TLE file to load. In this case we're using fake.tle, which contains our one generated TLE.
-schooses the site number to predict for. These are defined in sites.txt - go add your own!
-tprovided the start time for the predictions, in this case I'm using the launch time.
-ltells pass to predict for up to 10 hours past the start time.
-Asets the minimum elevation. I've set it to 1 degree.
-agive us all passes, not just those that will be visible, as we're looking for radio signals here.
The results are provided as:
99999- Satellite ID
2020-11-16T03:19:45- Rise time (YYYY-MM-DDTHH:MM:SS)
55/ 1- Rise Azimuth and Elevation (Az/ El)
03:24:18- Time of closest approach
111/14- Azimuth/Elevation of closest approach.
03:28:54- Set time.
167/ 1- Azimuth/Elevation of set.
But wait... the launch has been delayed!
Oh no! We went through all this hard work and now RocketLab have bumped the launch a few days to the right. Now what?
Well, handily there's a utility designed just for this eventuality:
$ ./launchtle -c fake.txt -i 99999 -t 2020-11-16T01:44:00 -T 2020-11-19T01:44:00 -I 99998 1 99998U 14900A 20324.07569444 .00000000 00000-0 50000-4 0 00 2 99998 97.3000 89.9569 0001454 0.0000 218.5000 15.21937999 06
The arguments used are:
-c- File containing the source TLE.
-i- Satellite number to use
-t- Original aunch time (Remember, we set this to 2020-11-16T01:44:00 above.
-T- New launch time - 2020-11-19T01:44:00
-I- Satellite ID to use for the newly generated TLE.
We can save this to a file (add
> fake2.txt to the end of the command), and plot this in satorbit to check it's in the right place at the right time:
$ ./satorbit -c fake2.txt -q -t 2020-11-19T01:49:00 -L 178 -B -3
(Remember we expect the sat to be over the launch site at epoch + 5 minutes)