# Julia and the GPS payload onboard Waratah Seed-1 satellite

**URL:** <https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795>\
**Category:** Community\
**Created:** [December 13, 2024, 1:00am UTC](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795 "2024-12-13T01:00:46Z")\
**Posts on this page:** 5\
**Page:** 2

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [December 26, 2024, 2:39pm UTC](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795/21 "2024-12-26T14:39:46Z")

</div>

This feature will be very easy to implement! I will do this!

---

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [December 27, 2024, 7:35pm UTC](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795/22 "2024-12-27T19:35:17Z")

</div>

Hi @minetest2048 !

Can you please test the `main` branch of SatelliteToolboxPropagators.jl? Now, you can do this:

```julia-repl
julia> using SatelliteToolboxPropagators

julia> f = create_tle_fetcher(CelestrakTleFetcher)
CelestrakTleFetcher("https://celestrak.org/NORAD/elements/gp.php")

julia> tles = fetch_tles(f; satellite_name = "ISS (ZARYA)")
[ Info: Fetch TLEs from Celestrak using satellite name: "ISS (ZARYA)" ...
1-element Vector{TLE}:
 TLE: ISS (ZARYA) (Epoch = 2024-12-27T11:52:08.200)

julia> iss_tle = tles[1]
TLE:
                      Name : ISS (ZARYA)
          Satellite number : 25544
  International designator : 98067A
        Epoch (Year / Day) : 24 / 362.49453935 (2024-12-27T11:52:08.200)
        Element set number : 999
              Eccentricity : 0.00057970
               Inclination : 51.63830000 deg
                      RAAN : 77.61300000 deg
       Argument of perigee : 11.65550000 deg
              Mean anomaly : 348.45670000 deg
           Mean motion (n) : 15.50310083 revs / day
         Revolution number : 48853
                        B* : 0.00045083 1 / er
                     ṅ / 2 : 0.00025652 rev / day²
                     n̈ / 6 : 0 rev / day³

julia> orbp = Propagators.init(Val(:SGP4), iss_tle)
OrbitPropagatorSgp4{Float64, Float64}:
   Propagator name : SGP4 Orbit Propagator
  Propagator epoch : 2024-12-27T11:52:08.200
  Last propagation : 2024-12-27T11:52:08.200

julia> sv_teme = Propagators.propagate!(orbp, 0, OrbitStateVector)
OrbitStateVector{Float64, Float64}:
  epoch : 2.46067e6 (2024-12-27T11:52:08.200)
      r : [1456.71, 6632.76, 0.0224472] km
      v : [-4.647, 1.0129, 6.01325] km/s

```

The last argument in `Propagators.propagate!` is now a “sink” option and it can be `Tuple` (default) to obtain the old behavior or `OrbitStateVector` to obtain the state vector as you wanted.

I only need to add the documentation and test cases before tagging the new version.

---

<div class="post-metadata">

**Author:** ![minetest2048](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/minetest2048/32/45961_2.png) [@minetest2048](https://discourse.julialang.org/u/minetest2048)\
**Post date:** [December 29, 2024, 10:09am UTC](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795/23 "2024-12-29T10:09:40Z")

</div>

Now with `OrbitStateVector` with epochs, its easy to convert ECI to ECEF without magic numbers

```julia
julia> using SatelliteToolbox

julia> f = create_tle_fetcher(CelestrakTleFetcher)
CelestrakTleFetcher("https://celestrak.org/NORAD/elements/gp.php")

julia> tles = fetch_tles(f; satellite_name = "ISS (ZARYA)")
[ Info: Fetch TLEs from Celestrak using satellite name: "ISS (ZARYA)" ...
1-element Vector{TLE}:
 TLE: ISS (ZARYA) (Epoch = 2024-12-29T04:05:28.309)

julia> iss_tle = tles[1]
TLE:
                      Name : ISS (ZARYA)
          Satellite number : 25544
  International designator : 98067A
        Epoch (Year / Day) : 24 / 364.17046654 (2024-12-29T04:05:28.309)
        Element set number : 999
              Eccentricity : 0.00059130
               Inclination : 51.63830000 deg
                      RAAN : 69.30530000 deg
       Argument of perigee : 18.67410000 deg
              Mean anomaly : 341.44630000 deg
           Mean motion (n) : 15.50400391 revs / day
         Revolution number : 48879
                        B* : 0.00043786 1 / er
                     ṅ / 2 : 0.0002498 rev / day²
                     n̈ / 6 : 0 rev / day³

julia> orbp = Propagators.init(Val(:SGP4), iss_tle)
OrbitPropagatorSgp4{Float64, Float64}:
   Propagator name : SGP4 Orbit Propagator
  Propagator epoch : 2024-12-29T04:05:28.309
  Last propagation : 2024-12-29T04:05:28.309

julia> sv_temes = Propagators.propagate!(orbp, 0:10, OrbitStateVector)
11-element Vector{OrbitStateVector{Float64, Float64}}:
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:28.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:29.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:30.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:31.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:32.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:33.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:34.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:35.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:36.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:37.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:38.309)

julia> sv_eci_to_ecef.(sv_temes, TEME(), PEF(), getfield.(sv_temes,:t))
11-element Vector{OrbitStateVector{Float64, Float64}}:
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:28.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:29.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:30.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:31.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:32.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:33.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:34.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:35.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:36.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:37.309)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46067e6 (2024-12-29T04:05:38.309)

```

---

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [December 29, 2024, 2:35pm UTC](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795/24 "2024-12-29T14:35:44Z")

</div>

Awesome! I will implement one new feature that, if you omit the time in `sv_` functions, it will automatically use the epoch in the state vector.

---

<div class="post-metadata">

**Author:** ![Ronis\_BR](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/ronis_br/32/50999_2.png) [@Ronis\_BR](https://discourse.julialang.org/u/Ronis_BR)\
**Post date:** [January 6, 2025, 5:08pm UTC](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795/25 "2025-01-06T17:08:26Z")

</div>

Hi @minetest2048 !

With the v1.0 of SatelliteToolbox.jl, you can now suppress the time argument:

```julia
julia> using SatelliteToolbox

julia> f = create_tle_fetcher(CelestrakTleFetcher)
CelestrakTleFetcher("https://celestrak.org/NORAD/elements/gp.php")

julia> tles = fetch_tles(f; satellite_name = "ISS (ZARYA)")
[ Info: Fetch TLEs from Celestrak using satellite name: "ISS (ZARYA)" ...
1-element Vector{TLE}:
 TLE: ISS (ZARYA) (Epoch = 2025-01-06T13:47:09.406)

julia> iss_tle = tles[1]
TLE:
                      Name : ISS (ZARYA)
          Satellite number : 25544
  International designator : 98067A
        Epoch (Year / Day) : 25 / 6.57441442 (2025-01-06T13:47:09.406)
        Element set number : 999
              Eccentricity : 0.00063540
               Inclination : 51.63990000 deg
                      RAAN : 27.62390000 deg
       Argument of perigee : 52.73050000 deg
              Mean anomaly : 91.48470000 deg
           Mean motion (n) : 15.50836984 revs / day
         Revolution number : 49009
                        B* : 0.00038488 1 / er
                     ṅ / 2 : 0.00022243 rev / day²
                     n̈ / 6 : 0 rev / day³

julia> orbp = Propagators.init(Val(:SGP4), iss_tle)
OrbitPropagatorSgp4{Float64, Float64}:
   Propagator name : SGP4 Orbit Propagator
  Propagator epoch : 2025-01-06T13:47:09.406
  Last propagation : 2025-01-06T13:47:09.406

julia> sv_temes = Propagators.propagate!(orbp, 0:10, OrbitStateVector)
11-element Vector{OrbitStateVector{Float64, Float64}}:
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:09.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:10.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:11.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:12.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:13.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:14.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:15.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:16.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:17.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:18.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:19.406)

julia> sv_eci_to_ecef.(sv_temes, TEME(), PEF())
11-element Vector{OrbitStateVector{Float64, Float64}}:
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:09.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:10.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:11.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:12.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:13.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:14.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:15.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:16.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:17.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:18.406)
 OrbitStateVector{Float64, Float64}: Epoch = 2.46068e6 (2025-01-06T13:47:19.406)

```

In this case, it will use the epoch of the state vector.

[Previous page](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795.md?page=1)
