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.
// 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.
Join a community of over 400 teams!
Join our Discord community or create your first PR in just a few steps.
Discord community
Join our Discord community to post questions, get help, and share resources with over 3,000 like-minded developers.

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