WorkingGroup icon indicating copy to clipboard operation
WorkingGroup copied to clipboard

CCSDS protocols overview

Open elpiel opened this issue 5 years ago • 17 comments

We are in need of a mentor!

CCSDS protocols overview

@MagixInTheAir expressed a desire to gather information about Consultative Committee for Space Data Systems (CCSDS) protocols as an overview for newcomers and a reference.

TBD:

  1. Where should we post this information (markdown in github, a blog like medium, ....)?
  2. .... ?

There is more TBD and comments are very welcome!

elpiel avatar Jan 03 '20 13:01 elpiel

A Wiki could be interesting to regroup all the info. Further work will be to establish the Rust state-of-the-art for the CCSDS protocols, and maybe create a small team to build the missing essential crates

pwnorbitals avatar Jan 03 '20 13:01 pwnorbitals

A wiki is a good format for us to share data, technical specs and the likes I agree with @MagixInTheAir and offering myself to help.

xadaemon avatar Jan 03 '20 15:01 xadaemon

I'm currently working on a Rust implementation of the CFDP protocol. However, I was planning on it being proprietary (open to opinions on this). I'm a fan of open source and have some ideas on what could be best accomplished in that realm in regards to Rust and aerospace.

Initially, I think a great open-source contribution would be the development and stabilization of crates that replicate the behavior of commonly used crates and data structures, but removing any dynamic memory allocation (generally prohibited for any real-time system). An example of this would be the "arrayvec" crate which provides stack-only implementations of Vector and String collections.

tyler124 avatar Jan 03 '20 21:01 tyler124

I have a crate for the ccsds primary header (which could use some work to be honest...). The primary header is simple, but there is some discussion about how to write such crates that would be helpful: I agree with writing crates that do not have memory allocation, but perhaps even more contraints should be applied to crates intemded for aerospace applications.

nsmryan avatar Jan 03 '20 23:01 nsmryan

I believe those crates are bound to be compiled for embedded targets, therefore constraints like no_std are probably needed

pwnorbitals avatar Jan 03 '20 23:01 pwnorbitals

I'm somewhat ignorant on the subject, but isn't no_std only really necessary when writing kernel, firmware, or bootloader code? I'd like to see data on it, but I assume that even most CubeSats are at least running an operating system.

tyler124 avatar Jan 04 '20 00:01 tyler124

Embedded real time operating systems usually don't provide the full functionality that a "regular" OS provide (dynamic linking, file system support, ...), and I think it's safe to say that aerospace crates are going to be compiled alongside those RTOSes (RTOSes and the application code are often compiled once, together. RTOS with dynamic executable loading are far from the norm in critical systems, afaik).

pwnorbitals avatar Jan 04 '20 00:01 pwnorbitals

@tyler124 Do you have good knowledge of the CCSDS standards and protocols ? Would you mind meeting on Discord to talk about this in a bit more detail ? I'd like to complete the Wiki

pwnorbitals avatar Jan 08 '20 09:01 pwnorbitals

@MagixInTheAir From what I know, CCSDS standards are quite extensive. I'm only really familiar with the ones that I use at work which include CFDP (file transfer protocol for space) and the internal message bus used by NASA cFS. I'd be down to chat on Discord sometime, I'll try to be online most of the day tomorrow (Friday).

tyler124 avatar Jan 09 '20 21:01 tyler124

@tyler124 do you have any updates on CFDP? I know that Libre Space Foundation is currently working on micropython implementation. I would love to get in touch with you and talk about the protocol in general (maybe your goals/ideas as well)

elpiel avatar Apr 27 '21 14:04 elpiel

I did quite a bit of research into file transfer protocols for spacecraft last year. To summarize, I think you really only need something like CFDP for deep space systems. For anything in LEO, you'd be better off with FTP. It's a far more robust protocol and should be natively included in most kernels. Regarding Rust for aerospace, I'd focus on a "MVP" that people actually want to use for cubesats in LEO before worrying about deep space. Maybe have a branch of NASA's cFS that slowly starts to get ported to Rust, but still remains a fully functional C/Rust mixture? I think this follows how a lot of big tech companies have been integrating Rust into major products.

Definitely down to talk! Though focusing on interviewing right now so my open source contributions are going to be limited for a while haha.

tyler124 avatar Apr 28 '21 04:04 tyler124

dropping this here in case its helpful. it seems like a mostly-complete parser for the Space Packet Protocol. could probably be turned into its own crate https://github.com/kubos/kubos/blob/master/libs/comms-service/src/spacepacket.rs

MoralCode avatar Aug 06 '21 17:08 MoralCode

Update: i made a crate for it and am now trying to debug it https://github.com/KubOS-Preservation-Group/ccsds-spacepacket

MoralCode avatar Aug 20 '21 22:08 MoralCode

Update: i made a crate for it and am now trying to debug it https://github.com/KubOS-Preservation-Group/ccsds-spacepacket

Thank you for sharing that @MoralCode! I will look around if anyone is interested to get into space protocols and contribute to he crate!

elpiel avatar Aug 21 '21 07:08 elpiel

Hello,

I recently released our own CCSDS and ECSS packet protocol implementation crate: https://github.com/us-irs/spacepackets-rs

The feature set is still quite basic but I already used the ECSS PUS Telemetry and Telecommand Implementation to send a ping telecommand to a demo application and send back ping telemetry. It fully supports no_std environments and also is compatible with serde.

This crate will also be the foundation of a larger crate collection targeted towards building satellite or remote systems software in general, but that was not published yet.

I might also consider adding a Rust implementation of the CCSDS File Delivery Protocol (CFDP) packet stack in the future because all of the future missions at our institute have a file system in some shape or form.

robamu avatar Sep 09 '22 16:09 robamu

@robamu This is a great effort, thanks for sharing it! I'm very excited that some common protocols are finally being developed in the Rust ecosystem.

I would love to discuss if we have common ground to base future collaboration and the projects you're currently developing in the university.

PS: Feel invited to pop inside the AeroRust community Discord.

elpiel avatar Sep 09 '22 17:09 elpiel

I recently released our own CCSDS and ECSS packet protocol implementation crate: https://github.com/us-irs/spacepackets-rs

you should consider getting this listed on https://areweinspaceyet.org/ and/or tagging it with the new aerospace tags on crates.io! Love to see more crates for this being created!

MoralCode avatar Sep 12 '22 15:09 MoralCode