this project uses rye to manage dependencies.
pint is a units library used in this project to allow for easy conversion and to ensure that units are always stated. it's most importantly used in the constant.py and config.py files, which is where you describe physical properties.
a quick summary:
from constants import unit
>>> length = 5 * unit.inch
<Quantity(5, 'inch')>
>>> length.to(unit.cm)
<Quantity(12.7, 'centimeter')>
# these are NOT regular numbers; to get the regular numbers you can use magnitude:
>>> length.to(unit.cm).magnitude
12.7
classes to configure different things, namely the vision subsystem and motors.
the main file. really just imports from robotcontainer.py and creates a TimedCommandRobot object
variables that never change. variables and dataclasses in this file describe real-world things, such as apriltag heights/rotations and motor specifications. uses pint.
the bulk of the robot code. initializes the subsystems.
each of the primary components of the robot.
- constants (full of variables that never change, typically based on real world measurements)
- arm
- drive (mecanum drivetrain)
- vision
- odometry (uses pose estimation alongside vision)