Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 13 Next »

📝 1. Overview

Initially, the focus is on basic functionality: sending drone state data to the ground station at regular intervals and establishing two-way communication between TM and the ground station (Mission Planner).

🎯 2. Goals

Achieve transmission of GLOBAL_POSITION_INT & ATTITUDE MAVLink messages from the drone to the ground control station (Mission Planner) via RFD 900 radio.

🛠️ 3. Class Definitions

📡 GroundStationComms

Owner: Hunter Adams

Description

Handles communication between the ground station and drone using RFD 900 or equivalent modules, utilizing circular buffers for MAVLink message management.

Properties

  • DMAReceiveBuffer: CircularBuffer - Stores incoming data.

  • lowPriorityTransmitBuffer: CircularBuffer - For low-priority data dispatch.

  • highPriorityTransmitBuffer: CircularBuffer - For high-priority routine data dispatch.

Methods

  • sendToGroundStation(CircularBuffer &transmissionBuffer): Sends data to the ground station.

  • receiveFromGroundStationISR(): ISR for incoming data, discards if DMAReceiveBuffer is full.

Additional Notes

Flexible design compatible with various communication protocols and setups.

⏲️ TimerInterrupt

Owner: Rahul Ramkumar

Description

Facilitates STD32 timer interrupts for periodic callbacks, essential for consistent data dispatch to the ground station.

Method Signature

void registerTimerInterrupt(int timeIntervalMs, void (*function)())

Parameters

  • timeIntervalMs: The timer interval in milliseconds.

  • function: The callback function.

Implementation Details

Example of function execution; real application requires STM32 timer setup.

🔄 MavlinkTranslator

Owner: Yarema Dzulynsky

Description

Translates MAVLink messages between byte streams and the drone/ground station.

Methods

  • bytesToMavlinkMsg(CircularBuffer &rxFromGroundByteQueue): Decodes incoming bytes to MAVLink messages.

    • rxFromGroundByteQueue: Buffer for incoming ground station bytes.

  • addMavlinkMsgToByteQueue(mavlink_message_t &msg, CircularBuffer &txToGroundByteQueue): Encodes MAVLink messages for transmission.

    • msg: The MAVLink message.

    • txToGroundByteQueue: Buffer for outgoing bytes to the ground station.

Additional Notes

Crucial for continuous and intermittent data handling via encoding and decoding.

🔗 CircularBuffer

Owner: Rahul Ramkumar

Description

Manages byte streams as MAVLink messages within TM components, using a circular queue for effective data buffering.

Properties

  • MAVLinkByte: unsigned char - Data type for queue storage, subject to change based on MAVLink byte requirements.

Methods

  • remainingMemory(): Indicates available queue bytes.

    • Returns: int - Available memory.

  • dequeue(): Retrieves the next byte from the queue.

    • Returns: MAVLinkByte - The dequeued byte.

  • enqueue(MAVLinkByte byte): Adds a byte to the queue.

    • Parameters:

      • byte: MAVLinkByte - Byte to add.

Additional Notes

A fundamental class for data integrity and memory efficiency in processing or waiting for transmission.

🚀 Main Class Definition: System Initialization and Task Management

Owner:

Instances

  • GroundStationComms GSC: Oversees ground station comms.

  • MavlinkTranslator MT: MAVLink message and byte stream translator.

  • TimerInterrupt TI: Timer-based task manager.

🌐 Function: init

Description

Sets up timer interrupts and FreeRTOS tasks for MAVLink communication and translation.

Components

  • Timer Interrupts: Configured for 500ms and 1000ms operation intervals.

  • FreeRTOS Tasks:

    • translateToMavlinkThread: Processes GSC.DMAReceiveBuffer bytes into MAVLink messages.

    • mavlinkToBytesThread: Loads MAVLink bytes into GSC.lowPriorityTransmitBuffer.

  • Scheduler: Engages the FreeRTOS scheduler for task oversight.

🔄 Tasks and ISRs

  • translateToMavlinkThread & mavlinkToBytesThread: Converts between MAVLink messages and byte streams for drone-ground station communication.

  • TimerISR500ms & TimerISR1000ms: Ensures regular data dispatch from both GSC.lowPriorityTransmitBuffer and GSC.highPriorityTransmitBuffer.

⚙️ 5. Integration Points

Details subsystem interactions within the project and with external entities, focusing on integration mechanisms and their objectives.

PREVIOUS:

TM Will:

  1. Drone to Ground Station Communication via RFD 900 Radio

    1. RX

      1. Receive raw MAVLink bytes from the ground station.

    2. TX

      1. Transmit raw MAVLink bytes from the ground station.

  2. Encode & Decode Raw MAVLink Data

    1. Encode

      1. Into Mavlink bytes to send to Mission Planner transmitted via RFD 900

    2. Decode

      1. Decode raw Mavlink bytes received from Mission Planner, received via RFD 900.

  3. Ingest Drone State Data (Lat, Lng, Velocity, Pitch, etc) via C++ references

    1. Should these references be passed at TM instantiation?

    2. Is there a finite list of drone state data TM will be ingesting?

    3. Sample rate?

  4. TM will communicate with other managers via [UNDEFINED COMMUNICATION MEDIUM]: Maybe for TM, this should go in M3?

    1. ROS LCM?

    2. Byte Streams?

    3. MQTT Style?

  5. TM will have an input/output testing strategy

    1. ?

  • No labels