SkillAgentSearch skills...

Rscp

Rover Satellite Communications Protocol is a protocol for communicating with a rover over a serial connection. This project is designed for Anatolian Rover Challenge (ARC)

Install / Use

/learn @anatolianroverchallenge/Rscp
About this skill

Quality Score

0/100

Category

Design

Supported Platforms

Universal

README

Rover Satellite Communications Protocol

Rover Satellite Communications Protocol is a protocol for communicating with a rover over a serial connection. This project is designed for Anatolian Rover Challenge (ARC).

<h2>If you are a competitor in <strong>ARC'25</strong>, please watch this repository to get notified about the updates.</h2>

Also check out Discussions for updates and questions.

Issue Tracking

Please use the GitHub issue tracker to report issues or request features. https://github.com/anatolianroverchallenge/rscp/releases

Releases

The latest release can be found on the GitHub releases page. If you cannot see any releases, hold tight! We are working hard.

Table of Contents

Details

RSCP now uses Google Protocol Buffers for serialization and deserialization of messages. This means you don't have to manually serialize/deserialize RSCP messages.

You can use the provided .proto files under proto directory to generate the necessary classes for your language. Refer to the official documentation for more information. You can use the official protoc compiler to generate the necessary classes for your language, or you can use the pre-generated classes provided in this repository, which can be found in the releases. Always use the latest release for the most up-to-date classes.

The releases will have c.zip cpp.zip rscp_protobuf.zip nanopb.zip index.html files which contain the necessary classes for the respective languages, generated using the .proto files in the proto directory using the protoc compiler.

| Language | File | Description | | ------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------- | | C | c.zip | C source files | | C++ | cpp.zip | C++ source files | | rscp_protobuf | rscp_protobuf.zip | Python source files (pip3 install <url> to install) | | nanopb | nanopb.zip | C source and header files for nanopb library | | docs | index.html | Documentation for the protocol |

You may use rscp_protobuf.zip under the releases to install the python package using pip3 install https://github.com/anatolianroverchallenge/rscp/releases/latest/download/rscp_protobuf.zip

The nanopb library is used to generate the C/C++ source and header files that can be used in embedded systems. Refer to the official documentation and nanopb examples for more information.

You may find the latest Protobuf documentation of the protocol here

Frame Format

To communicate with the RSCP module, all you need to do is:

  • Create a rscp.ResponseEnvelope object
  • Fill out the appropriate fields
  • Serialize the object using the SerializeToString method
  • Encode it with cobs encoding. For python you can use the cobs package.
  • Send the encoded message to the rover over serial

To receive an instruction from the RSCP module, you need to:

  • Receive the message from the serial port and accumulate it over a buffer
  • If 0x00 is received, decode the message using cobs decoding
  • Parse the message using the rscp.RequestEnvelope object
  • Use request.WhichOneof('request') to determine the type of the message
  • Use the appropriate method to handle the data

Communication Sequence

RSCP client module will be sending host messages to the rovers in rscp.RequestEnvelope format. The rovers will be sending responses to the host in rscp.ResponseEnvelope format.

Stage 1 Antenna Installation

| Message Type | Direction       | Description                               | light | | -------------------------- | ---------------- | --------------------------------------------------- | --------------- | | SetStage(1)               | HM -> CM         | --                                       | :heart: | | SetStage(1)               | CM -> Rover | Rover sets the stage to 1                 | :heart:         | | Acknowledge               | Rover -> CM | Rover acknowledges the stage setting     | :heart:         | | Acknowledge               | CM -> HM         | --                                       | :heart:         | | ArmDisarm(arm=True)       | HM -> CM         | --                                       | :heart:         | | ArmDisarm(arm=True)       | CM -> Rover | Rover arms itself                         | :green_heart:   | | Acknowledge               | Rover -> CM | Rover acknowledges the arming request     | :green_heart:   | | Acknowledge               | CM -> HM         | --                                       | :green_heart:   | | SearchArea(lat1,lon1,rad1) | HM -> CM | --                                       | :green_heart: | | SearchArea(lat1,lon1,rad1) | CM -> Rover | Rover starts receives area coordinates | :green_heart:   | | Acknowledge               | Rover -> CM | Rover acknowledges and starts navigation and search | :yellow_heart: | | Acknowledge | CM -> HM | --                                       | :yellow_heart: | | no message sent | -- | finished navigating and searching | :yellow_heart: | | no message sent | --               | install antenna | :yellow_heart: | | GPSCoordinate(lat2,lon2) | Rover -> CM | Rover sends coordinates of the peak | :yellow_heart: | | GPSCoordinate(lat2,lon2) | CM -> HM | -- | :yellow_heart: | | TaskCompleted             | Rover -> CM | rover reports navigation finished         | :green_heart: | | TaskCompleted | CM -> HM         | -- | :green_heart: |

Stage 2 Icy Crater

| Message Type             | Direction       | Description                               | light | | -------------------------- | ---------------- | --------------------------------------------------- | --------------- | | SetStage(2) | HM -> CM         | --                                       | :green_heart: | | SetStage(2) | CM -> Rover | Rover sets the stage to 2 | :green_heart: | | Acknowledge               | Rover -> CM | Rover acknowledges the stage setting     | :green_heart: | | Acknowledge               | CM -> HM         | --                                       | :green_heart: | | SearchArea(lat3,lon3,rad3) | HM -> CM | --                                       | :green_heart: | | SearchArea(lat3,lon3,rad3) | CM -> Rover | Rover starts receives area coordinates | :green_heart:   | | Acknowledge               | Rover -> CM | Rover acknowledges and starts navigation and search | :yellow_heart: | | Acknowledge | CM -> HM | --                                       | :yellow_heart: | | no message sent | -- | finished navigating and searching | :yellow_heart: | | GPSCoordinate(lat4,lon4) | Rover -> CM | Rover sends coordinates of the coldest surface | :y

View on GitHub
GitHub Stars23
CategoryDesign
Updated11d ago
Forks1

Languages

Python

Security Score

90/100

Audited on Mar 29, 2026

No findings