Skip to content

An embedded robotics project using C# and the Nvidia Xavier NX.

License

Notifications You must be signed in to change notification settings

kelceydamage/AV00

Repository files navigation

AV00

An embedded robotics project using C# and the Nvidia Xavier NX.

Relies on AV00-Transport for inter-service communication.

Current Design Overview

Untitled drawing (1)

Issues

  • It is too easy to configure the wrong engine on the wrong channel and have bad things happen. I need to find a way to make this more robust. Example: I had the motors swapped and the wrong motor was using the wrong software constraints (Move used Turn softCaps and nearly blew the power source).

Version 1 Outstanding Goals

TODO - High Level

TODO - Embedded Software (Services)

  • Update the DeviceRegistry to be useful.
  • Add the MotorController/DriveService to the ServiceRegistry
  • Create a telemetry service for the robot.
  • Add an ultrasonic sensor to the robot.
  • Create a basic feedback loop the stops the motors near an obstacle.
  • Add a gyro sensor to the robot.
  • Create a basic feedback loop that keeps the robot driving straight.
  • Implement a strategy for handling blocking, non-blocking, and override motor operations. Motor Command Execution Flow (3)

TODO - Shared Libraries

AV00 Shared

  • Debating moving all the hardware drivers into a separate repo as they might benefit other programers.

TODO - Interservice Communication (Transport Layer)

AV00 Transport

  • Create a transport layer to allow services to communicate with each other.

TODO - Desktop Software (Event Viewer / Control)

AV00 Control Application Repo

  • Halted for now due to this issue xamarin/Xamarin.Forms#10818

  • Implement backing DB for storing event stream and powering UI.

  • Display current events as they happen.

  • Allow filtering of events.

  • Remote input/override client.

TODO - Infra (Code Management)

  • Setup a CI/CD pipeline.
  • Dockerize the application to run in NV containers.

TODO - Hardware (Physical Robot)

  • Add an ultrasonic sensor to the robot.
  • Add a gyro sensor to the robot.
  • Run some updated battery driven tests.

TODO - Other

  • Update documentation.
  • Update design docs.
  • Update spec sheets.

Nice To Haves

  • Make the MotorController public functions async to allow non-blocking timed operations.
  • M3/4 mounts inside the chassis.
  • Remote input/override service.
  • Create a basic console status screen while running program from terminal.

Notes

  • Digital Port: IO expansion board offers 28 groups (D0-D27) of digital ports that are led out via Raspberry Pi ports GPIO0~GPIO27 (BCM codes)
  • Requires libgpiod-dev (Could not get to work on JP4)
  • sudo apt install -y libgpiod-dev
  • gpiochip1 [tegra-gpio-aon] (40 lines)
  • Gpiod uses line numbers to access gpio. The line numbers can be found with gpioinfo and cross referenced with the nvidia pinmux spreadsheet.
  • The pinmux spreadsheet can be found here: https://developer.nvidia.com/jetson-nano-pinmux-datasheet
  • Notes for personal use, these are free GPIO pins.
    • gpiochip1 127 -- BCM 17 -- J41 Pin 11
    • gpiochip1 112 -- BCM 18 -- J41 Pin 12
  • PWM2 on MD10A is driver motor, PWM1 is turning motor
  • XavierNX built-in PWMs are not strong enough to hold a signal for motors even with external motor power supply. Would always drop below 2v.
  • Requires PCA9685 or STM32 equivalent to drive motors.

References