Julia and the GPS payload onboard Waratah Seed-1 satellite

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 or trying to understand which 100 reference frames I should use so my TLE works correctly (turns out its PEF)

Ideally it works like this:

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, things will become more interesting. We will have lunar coordinate system, lunar UTC, lunar GPS. We also going to try to receive Earth GPS on the Moon and try to navigate with that using NaviMoon receiver

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

Previous thread on this: Can we get RealtimeSanitizer in Julia?

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

2 Likes