Yet Another Mechanism System

Welcome to your team’s new mechanism system

Get started in 30 minutes

Less guesswork, no complexity—just your first successful mechanism, fast.

Setting up your first mechanism should be easy and painless and thats exactly what YAMS aims to provide.

YAMS provides an effortless programming experience by neatly dividing the process into distinct steps: SmartMotorController Configuration, SmartMotorController creation, Mechanism configuration, and Mechanism creation. This structured approach simplifies the integration of mechanisms like Arms, Elevators, Turrets, and more, allowing developers to effortlessly manage and control them using commands from Mechanism classes. Built exclusively for WPILib command-based programming, YAMS also offers sophisticated features such as advanced telemetry and live tuning, ensuring a streamlined and efficient development process for all supported mechanisms.

Get started API reference

ArmSubsystem.java
// Create your motor controller config
SmartMotorControllerConfig motorConfig = new SmartMotorControllerConfig(this)
      .withClosedLoopController(4, 0, 0, DegreesPerSecond.of(180), DegreesPerSecondPerSecond.of(90))
      .withSoftLimit(Degrees.of(-30), Degrees.of(100))
      .withGearing(new MechanismGearing(GearBox.fromReductionStages(3, 4)))
      .withIdleMode(MotorMode.BRAKE)
      .withTelemetry("ArmMotor", TelemetryVerbosity.HIGH)
      .withStatorCurrentLimit(Amps.of(40))
      .withMotorInverted(false)
      .withClosedLoopRampRate(Seconds.of(0.25))
      .withOpenLoopRampRate(Seconds.of(0.25))
      .withFeedforward(new ArmFeedforward(0, 0, 0, 0))
      .withControlMode(ControlMode.CLOSED_LOOP);

// Create your motor
TalonFXS                   armMotor    = new TalonFXS(1);
SmartMotorController       motor       = new TalonFXSWrapper(armMotor, DCMotor.getNEO(1), motorConfig);

// Create your mechanism config
ArmConfig                  config    = new ArmConfig(motor)
      .withLength(Meters.of(0.135))
      .withHardLimit(Degrees.of(-100), Degrees.of(200))
      .withTelemetry("ArmExample", TelemetryVerbosity.HIGH)
      .withMass(Pounds.of(1))
      .withStartingPosition(Degrees.of(0))
      .withHorizontalZero(Degrees.of(0));

// Create the Arm!
Arm                        arm = new Arm(config);

Learn more about Yet Another Mechanism System

Read guides, watch tutorials, and learn more about working with the developer platform and integrating it with your own stack.

Guides Documentation

Join a community of over 400 teams!

Join our Discord community or create your first PR in just a few steps.

Cover

Discord community

Join our Discord community to post questions, get help, and share resources with over 3,000 like-minded developers.

Cover

GitHub

Our product is 100% open source and built by developers just like you. Head to our GitHub repository to learn how to submit your first PR.

Last updated