# 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:** 1\
**Showing post:** 9

<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 18, 2024, 11:46am UTC](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795/9 "2024-12-18T11:46:31Z")

</div>

Thanks @Ronis_BR for your SatelliteToolbox.jl, I used it a lot for mission planning

Some wishlist for SatelliteToolbox:

- I wish we have support for converting ECI to RIC frame, all the existing literature uses RIC frame to measure error between GPS position fixes and propagated TLE, as it is easier to interpret than ECEF error
- Typed data input and output so that I can just compare the output of TLE propagation with GPS fixes from our receiver without [messing with Julian days so I can convert ECI to ECEF](https://juliaspace.github.io/SatelliteToolbox.jl/stable/tutorials/iss_observation/) or trying to understand which [100 reference frames](https://juliaspace.github.io/SatelliteToolboxTransformations.jl/stable/man/ecef_eci/) I should use so my TLE works correctly (turns out its PEF)

Ideally it works like this:

```julia
orbp = Propagators.init(Val(:SGP4), iss_tle)
ecis = Propagators.propagate!.(orbp, 0:1:86400)
ecefs = to_ecef(ecis) # It handles all the conversions without me needing to construct the transform matrix 

```

With humans landing on the moon in[hopefully 5 years](https://en.wikipedia.org/wiki/Artemis_III), things will become more interesting. We will have [lunar coordinate system](https://en.wikipedia.org/wiki/Selenographic_coordinate_system), [lunar UTC](https://www.nasa.gov/solar-system/moon/nasa-to-develop-lunar-time-standard-for-exploration-initiatives/), [lunar GPS](https://www.gps.gov/cgsic/meetings/2022/murata.pdf). We also going to try to receive Earth GPS on the Moon and try to navigate with that using [NaviMoon](https://spacepnt.com/navimoon/) receiver

For your realtime Julia, this CppCon talk just dropped yesterday about Clang RealtimeSanitizer and performance constraints for C++:

[![](https://global.discourse-cdn.com/julialang/original/3X/2/a/2a8ff0ec49b6194d6f9930de9926aed2f14276a6.jpeg "LLVM's Realtime Safety Revolution: Tools for Modern Mission Critical Systems - CppCon 2024") ](https://www.youtube.com/watch?v=KvhgNdxX6Uw)

Previous thread on this: [Can we get RealtimeSanitizer in Julia?](https://discourse.julialang.org/t/can-we-get-realtimesanitizer-in-julia/119330)

If we take inspiration from this, and extend AllocCheck.jl to not just detect memory allocation, but also other non-RT functions such as `gc_collect` and taking locks/mutexes, we can go closer to realtime Julia.

The other option that works today, but its very brutal is compiling your code to a shared library using StaticCompiler.jl. You won’t trigger GC if there’s no GC in the first place, same with memory allocation.

I tried to write a GNU Radio block with this and kind of gave up. Its very easy to accidentally depend on `libjulia` and have missing symbols errors during linking. But the worst thing is that StaticCompiler doesn’t currently emit debug symbols. So when you segfault, which is very easy to do because freestanding Julia doesn’t currently have memory safety features unlike Rust, both `gdb` and Valgrind won’t help you find where it is and debug it

---

_[View the full topic](https://discourse.julialang.org/t/julia-and-the-gps-payload-onboard-waratah-seed-1-satellite/123795)._
