McGill Robotics Rover Documentation

website·Indexed 30 days ago

https://mcgill-robotics.github.io/rover-documentation

Technical documentation for the McGill Robotics Rover, covering electrical systems, hardware specifications, and harnessing guides. Includes details on the UART board, Buck Converter Version 2, PanTilt board, RO2026_RPI5_PD_PSU_Board, and Arm Box PCB V2, as well as telemetry architecture, wiring standards, and Git repository workflows for the electrical team.

Tokens
15.1K
Snippets
39
Records
115
Agent score
75%

What's inside McGill Robotics Rover

  1. Overview of McGill Rover software and hardware architecture

    The McGill Rover is a multi-functional robotic platform for planetary exploration.

    Software Architecture: The team primarily uses ROS (Robot Operating System) to manage software components and modular functionality.

    Hardware Systems:

    • Drive: Engineered for rugged terrains.
    • Manipulator Arm: Used for precise object handling.
    • Communications: Handles remote control of the drive and arm, and data transmission via GPS and cameras.
    • Power System: Manages power efficiency for mission performance.
  2. RO2026_RPI5_PD_PSU_Board Hardware Architecture

    The RO2026_RPI5_PD_PSU_Board is designed to provide power to a Raspberry Pi 5. The board consists of five main functional sections:

    1. Input Connector: Accepts either 5V or 24V from the Arm Box Panel.
    2. Buck Converter: Converts 24V input to 5.1V at 6A (based on TI WeBench design).
    3. LDO: Provides a 3.3V rail.
    4. PD Toggle: A mechanism to switch between USB-PD mode and Non-PD mode (allowing the board to function as a simple 24V to 5.1V buck converter).
    5. USB-PD Section: Includes a USB-C output connector and a TCPP02-M18 chip for USB-C source protection.
  3. Telemetry Architecture for Rover 2025 Powerboard

    The 2025 Rover Powerboard uses a Teensy 4.0 microcontroller to handle telemetry. It monitors voltage and current for peripherals (arm, antenna, etc.) and tracks the status of headlights and the kill switch. The Teensy also allows software-based toggling of the headlights and secondary kill switch via firmware. Hardware interfacing details are located in the MCU+Controls.SchDoc schematic.
  4. Debug buck converter voltage sag on RO2026_RPI5_PD_PSU_Board

    To diagnose voltage sag in the buck converter circuit, perform the following tests:

    1. SPICE Simulation: Simulate the buck converter circuit to determine if the issue is a fundamental design flaw.
    2. Voltage Probing: Measure voltage at the following points both with and without load to isolate the source of the sag:
      • Buck input
      • Buck output
      • Across the inductor
      • Analysis: Sag at the load node suggests wiring/trace issues; sag at the converter output suggests a converter issue.
    3. Linearity Plot: Plot the sag to check for resistive paths.
    4. Power Source: Test with a real battery to ensure 'cleaner' power.
    5. Schematic Audit: Thoroughly compare the physical board against the Altium schematic.
  5. Implement the Rover Wire ID naming convention

    Every wire in the rover must have a unique ID that encodes its type, system, route, and destination. The ID is permanent once assigned; if a wire is re-routed, update the register description rather than the ID.

    Format: [NUM]-[TYPE]-[SYS]-[FROM]-[TO]-[CONN]

    Segment Definitions:

    • NUM: 3-digit wire number (101-999), grouped by system.
    • TYPE: P for Power (voltage supply) or D for Data (signals like CAN, USB, Ethernet, UART, PWM).
    • SYS: 3-letter system code (e.g., DRV, COM).
    • FROM: 3-5 letter abbreviated source device (silkscreen preferred).
    • TO: 3-5 letter abbreviated destination device.
    • CONN: Silkscreen connector label on the destination device.

    Special Rules:

    • Bundled Cables: If a cable contains both power and data (e.g., servo cables), label it as P and note the signal type in the register.
    • Cross-system Wires: Use the source system code (e.g., a power wire from PWB to a drive splitter is P-PWR, not P-DRV).
    • Connector Names: Remove spaces from silkscreen names (e.g., 'CAN J27' becomes CAN).
    Example: 201-P-DRV-PWB-SPL-RKL
    (Power wire #201, Drive system, from Power Board to Splitter, plugging into RKL connector)
  6. Set up an existing STM32 CMake project in VSCode

    To configure an existing STM32 CMake project in Visual Studio Code, follow these steps:

    1. Install the STM32 VS Code Extension Pack from the VS Code Marketplace.
    2. Open the STM32Cube panel in the sidebar and select Set Up STM32Cube projects.
    3. In the device field, enter the specific STM32 MCU model you are using, then save and close.
    4. Allow the CubeIDE extension to download necessary packages and configure CMake. If the CMake configuration fails to run after downloads, restart VSCode.
    5. Verify that the CMakeLists.txt file is correctly configured with all required source files to ensure successful compilation.
    6. Use the Build button in the bottom status bar to compile the code; results are displayed in the output panel.
  7. Control the Pantilt board via USB COM port

    The Pantilt board is controlled by sending comma-separated float values representing angle deltas (clockwise or counter-clockwise) followed by a newline. The UART board identifies these lines by a leading 'p' character. The board also returns these values to allow software tracking of the current angle.

    Format: p{pan_angle_float},{tilt_angle_float}\n

  8. Integrate TinyUSB with STM32CubeIDE (Version < 2.0.0)

    For older versions of STM32CubeIDE, use the following manual integration process:

    1. Hardware Setup: In the .ioc file, enable USB under the Connectivity section and enable the corresponding interrupt in the NVIC.
    2. Library Setup: Add TinyUSB via git submodule and checkout a specific release tag.
    3. IDE Configuration:
      • Refresh the project and add the TinyUSB directory as a source folder.
      • Edit the source filters to exclude non-STM32 microcontrollers within the portable folder.
      • Add the necessary TinyUSB folders to the project include paths.
    4. Implementation:
      • Create tusb_config.h and usb_descriptors.c.
      • Define the target MCU in tusb_config.h (e.g., OPT_MCU_STM32G4).
      • Include tusb.h and the basic device setup in main.c.
      • Add the TinyUSB interrupt handler to the USB interrupt in the NVIC handler file.
    git submodule add https://github.com/hathach/tinyusb
    git fetch --tags
    git checkout <tag>