Skip to content

Embedded communicationsTumbleweed Mars

Recovering rover data across satellite contacts

Built a C++ prototype on Linux to control rover-to-orbiter transfers within supplied contact windows and keep unconfirmed data for the next contact.

Source code is private.

Result

Recovered test transfers after lost acknowledgements and missed contacts, without duplicate stored records.

The challenge

A rover has limited time to send data to a passing orbiter. A contact can end before a transfer finishes, and a missing acknowledgement leaves the sender unsure whether the receiver stored the data. The software needs to retain those records and retry within the next contact's time and byte limits.

My contribution

  • Implemented a C++ state machine that follows a supplied contact plan, manages a bounded queue and counts accepted sends, including retries, against each contact's byte budget.
  • Separated local send acceptance from receiver confirmation, keeping unconfirmed records available for a later contact.
  • Built a separate Python test receiver that checks record identity and integrity, stores data before acknowledging it and recognises retries without storing duplicates.
  • Added restart recovery from retained input files and tested lost replies, missed contacts, invalid acknowledgements and conflicting record contents across separate Linux processes.

Results and validation

In the recovery demonstration, the receiver deliberately skipped its first acknowledgement. The sender retried during the next contact, and the receiver stored all 40 synthetic records once. Every received byte matched the original data. Separate scenarios verified recovery after process restarts and missed contact windows.

Technical details

Host-based verification uses synthetic data, UDP loopback and a separate Python receiver. The transport interface is replaceable. Contact windows and transfer budgets are test inputs. Radio hardware, flight protocols and integration with the team's scheduler remain outside this prototype.

C++ · Linux · State machines · Transfer control · Python · Fault injection