-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Preliminary: generate new planetary datasets #8
base: main
Are you sure you want to change the base?
Conversation
Signed-off-by: Guillaume W. Bres <[email protected]>
the idea is to create new planetary datasets that define ECEFrames with Ellipsoid shapes that are used in GNSS nav. major: I don't understand whether we should create a single planetary constant PCA: one per frame, or it can be grouped for all of them. minor: i'm experiencing issues with the pseudo code you gave in the other PR:
|
Yes, you'll want to have a single PCA with all of your frames defined, that's the simplest. You're right: it shouldn't be What is the error you're getting with the moon frame definitions? It's hosted on the same storage server, it should just work... I hope to work on nyx-space/anise#294 this week which will fix issues where, for whatever reason, the data can't be downloaded and the lock file persists. Is that the problem you're seeing? |
Yes, if ANISE cannot transform any frame to any frame, it is almost pointless attempting any progress on the topic. The reason for this, the way I see it, is we build the Orbit from kepler parameters very precisely, and in specific GNSS frames: this is what GNSS constellations describe. And each constellation has its own reference frame. Eventually, we want to work in a single reference frame, for example ITRF93 and we need to bring everything back to that common frame. |
Although I understand and agree, I don't see what test might be relevant. |
argh sorry, it was once again the "lock file error", and I have a tendency not to read the error message in its entirety
I do : ) |
Yes, that's correct, and that's the whole point. These files should have a fixed unique name so if you already have say the de440s.bsp file in your user's ANISE folder, no need to redownload all ~200 MB of it. Concerning the test, here's what I'm thinking:
I worry that step 4 would fail. In that case, I can think of two options:
Let me know how that goes, there's definitely a solution out there, but this is my first time thinking about this problem outside of the SPICE files. |
Signed-off-by: Guillaume W. Bres <[email protected]>
Signed-off-by: Guillaume W. Bres <[email protected]>
So if I understand correctly, we just need to make sure whether an external solution (ie., no modification of ANISE on your side) can answer the requirement of introducing new frame rotations. Could you spend a couple of minutes helping me getting a version that compiles ?
If I run the current test, it fails to load this new almanac with :
If I try this instead: 82 let mut bytes = Vec::<u8>::new();
83 // load gnss_pck.pca
84 let almanac = Almanac::default();
85 let mut fd = File::open("pck_gnss.pca")
86 .unwrap_or_else(|e| panic!("Failed to read GNSS PCA: does file exist? {}", e));
87 fd.read_to_end(&mut bytes)
88 .unwrap_or_else(|e| panic!("Failed to read GNSS PCA: does file exist? {}", e));
89 let pck = PlanetaryDataSet::from_bytes(bytes);
90 almanac.with_planetary_data(pck); so I can use
|
Yes, that's correct. And it should be possible because ANISE does not ship with any frames. Concerning the integrity error, I forgot that the my_pck.set_crc32(my_pck.crc32()); Concerning the attempt to push a frame into a planetary dataset, could you provide an example of what you're trying to do? I wrote this function quite some time ago, so I forgot a little bit myself. But it seems that if you have a frame, you can use the almanac to find the planetary data, then pass the frame to it using let original_earth_itrf93 = Frame(EARTH, ITRF93); // Won't have any planetary data but that's OK.
let my_planetary_data = almanac.planetary_data.get_by_name("GPS WGS84").unwrap();
let my_custom_shape_for_itrf93 = my_planetary_data.to_frame(original_earth_itrf93).unwrap();
assert_eq!(my_planetary_data.shape, my_custom_shape_for_itrf93.shape.unwrap()); |
Very interesting, I wanted to ask you about what part of your ecosystem might eventually be embedded. Especially since you recently brought up that you guys are discussing using your toolkit for the missions to come (I presume, very complex decision making with lots of consequences). I presumed you used Nyx for mission planning, but embedding it would be yet quite an achievement. FYI, I'm specialized in embedded software, especially embedded linux and FPGA stuff. Of course I build higher level software, but it is rarely the case in profesionnal contexts, and not where the critical stuff happens. I have stopped working on these topic outside work about 10 years ago. I guess the hardware and instrumentation complexity (that I personally find very tiresome) led me to it. I also have never put anything into space (or at least, not that I'm aware of) but i'm aware of the environmental issues. Although, my employer did and has done it in the past, even to this day some colleagues of mine do work on stuff that will eventually be launched into space.
it's located in the planetary/main and associated test bench (WIP). Thank you very much, I will give it a try this weekend |
Signed-off-by: Guillaume W. Bres <[email protected]>
I don't think you understood the problem. The problem is in the definition of the new frame. To push it into the dataset, we need to convert a Frame (what I'm building/defining) into a PlanetaryData (what can be pushed in the table). Simply build the program and run the test: cd planetary
cargo build -r
./target/release/planetary # builds pck_gnss.pca (local file)
cargo test -r # open pck_gnss and try to use new definitions To me, it looks like either |
Signed-off-by: Guillaume W. Bres <[email protected]>
Correct, at the moment, we're only using it on ground software, and there are no plans yet to fly ANISE as-is. However, the design is such that it could fly on embedded Linux, so far from real embedded / RTOS. In my experience, Linux has all of the tools one needs to confidently fly spacecraft, and is much simpler and cheaper to use than other true embedded platforms (even though true embedded platforms are needed for hardware control).
I think I understand, but I also think I didn't explain something: frames are not defined in ANISE. They are all built at runtime provided a given central object and an orientation ID. To fetch the correct shape for a given frame, the Almanac will return it when you call As an example, the IAU_EARTH frame is built without any planetary data (no shape, no gravity parameter). Then, when you call Let me know if that works for you. One limitation I'm thinking of right now, is that ANISE follows the same approach that SPICE uses, and there is only one planetary data per central object. For example, in the NASA provided "tpc" file, the radius axes of the Earth are defined for the Earth itself by its ID of 399. I wonder if that could be a problem for you where you have possibly different models of the shape of the Earth depending on the constellation you're using. |
Xenomai is a real time declination of the linux kernel, personnaly I have never used it. I presume the best scenario is to always have an accelerator (dedicated computer) for critical paths. And the manager is a computer on its own. Side note, last year a colleage of mine pointed out an FPGA architecture that was built to fly in space (the combination of IP cores and Hardware cores), where everything is redundant, to avoid the bit corruption problem. I can try to find a link if there's any point
oh yes, it's very easy to embed rust these days. I recommend using buildroot for that, which is much simpler than yocto. When it comes to performances, it seems yocto always out performs buildroot, they can probably access better toolchains.
I did lots of radio indeed, mostly timing and metrology oriented. It's less frequent these days, I mostly work on video signals, timing, and always linux 🐧 / FPGA 🔌
OK i was not expecting that internal behavior: that's very important. Yet, if I'm following correctly, I updated the code, check it out. Currently it fails saying WGS84 does not exist in the planetary set, so I'm assuming the definition of the LUT is still wrong: cargo build -r # update
./target/release/gnss-planetary # build the custom PCK
cargo test # exploitation attempt
it will be clearer if I run into it
Yet it still kind of puzzles me a little bit. If you take a look at the shape values, they're very close to each other and differ at 10E-5. I have not done the maths or am not advanced enough, but to me it looks like a misinterpretation at this level could be neglected. It might just be as stupid as the GPS constellation was introduced 25 years prior all the others. Reading RTKLib has helped me a lot, I would not have the Ephemeris solver without it (too few documentation, RINEX specs do not explain that either). Possibly very similar to you + SPICE. It would help if I could understand how they approach the initial orbits and if a conversion happens at some point prior internal navigation |
Signed-off-by: Guillaume W. Bres <[email protected]>
Signed-off-by: Guillaume W. Bres <[email protected]>
* add logger * itrf93 rotation attempt, so they're identical on both sides still it fails Signed-off-by: Guillaume W. Bres <[email protected]>
The "problem" also applies to SP3 file parsing, which contain 3D coordinates expressed in high precision reference frames like IGS20 and ITRF20. And I am in the process of upgrading SP3 to Orbit as well. So my current solution is to pretend it is ITRF93, but I'm unsure what is the magniture of the error introduced by that. You said at somepoint that future versions will contain ITRF20 (newest definition). But that is only a partial solution. SP3 files may be expressed in a variaty of reference systems, IGS20 and ITRF20 being only the most common, which we should define rapidly (maybe by this PR/topic). My current best scenario, is that GNSS provides frame definitions that we can easily pull to define Orbits, and Rinex::navigation::ephemeris needs to take advantage of that and use the correct orbit definition, for any SV |
As I understand it, after speaking with Nat Bachman from NAIF, ITRF93 and
ITRF2020 are very very close to either other (a few milliradians
difference). Spacecraft flown out of NASA use the ITRF93 frame.
So let me know what the solutions look like with 93, and if it doesn't work
well, we can develop the code to build the Chebyshev interpolations from
the EOP data.
…On Sun, Sep 1, 2024, 05:33 gwbres ***@***.***> wrote:
The "problem" also applies to SP3 file parsing, which contain 3D
coordinates expressed in high precision reference frames like IGS20 and
ITRF20. And I am in the process of upgrading SP3 to Orbit as well. So my
current solution is to pretend it is ITRF93, but I'm unsure what is the
magniture of the error introduced by that.
You said at somepoint that future versions will contain ITRF20 (newest
definition). But that is only a partial solution. SP3 files may be
expressed in a variaty of reference systems, IGS20 and ITRF20 being only
the most common, which we should define rapidly
—
Reply to this email directly, view it on GitHub
<#8 (comment)>, or
unsubscribe
<https://github.com/notifications/unsubscribe-auth/ABEZV2FYFYRAP7KQ4UUVRTDZUL3PVAVCNFSM6AAAAABM33FWSWVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMRTGI4TSNRSGA>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
OK very good information. So let's say if we can apply a high precision reference frame like ITRF93 from the "same class", the error can be neglected (and it might be valid of the vast majority of applications). But I doubt it is the case when we consider "other classes". IGS and IGb seem to come up quite often, IGS has its own reference frame - for which I have never found the parameters, and I don't even know what IGb is yet |
No description provided.