FalconLibrary¶
Overview¶
Falcon Library is the backend library that is used on all FRC Team 5190 robots. This library was written in the Kotlin JVM Language. Some features of this library include:
- Wrapped WPILib Commands and Subsystems with Kotlin Coroutines asynchronous optimzation.
- High level mathematics for path generation, tracking, custom typesafe
units of measure, etc.
- Two-dimensional parametric and functional splines.
- Arc length of parametric quintic hermite splines evaluated using recursive arc subdivision (from Team 254).
- Trajectory generation that respects constraints (i.e. centripetal acceleration, motor voltage).
- Custom trajectory followers
- Ramsete
- Adaptive Pure Pursuit
- Feedforward
- Typesafe units of measure
- Quick and easy conversions between all length, velocity, acceleration, electrical units.
- Support for Talon SRX native unit length and rotation models.
- AHRS sensor wrapper for Pigeon IMU and NavX.
- Tank Drive Subsystem abstraction with built-in odometry and command to follow trajectories.
- Talon SRX wrapper that utilizes Kotlin properties to set configurations.
- Custom robot base with fully implemented state machine and coroutine support.
- Other WPILib wrappers for NetworkTables, etc.
Java Interoperability¶
FalconLibrary is written in Kotlin, a new programming language based on the Java Virtual Machine. Kotlin code is fully interoperable with Java code. One caviat: static functions and members will be split into their own class. For instance, to construct a Java Length, one would do:
var x = LengthKt.getFeet(10);
Contributing¶
This library is open source and we would love to have you contribute
code to this repository. Please make sure that before submitting a pull
request, your code is formatted according to ktlint (already in the
project). The Gradle build will fail if all code is not formatted
correctly.
To format code automatically, run ./gradlew spotlessApply. Please
build the project locally using ./gradlew build to make sure
everything works before submitting a pull request.
When adding new features, it is encouraged that these features be game-agnostic. This library is intended to be used for robots that play any game. Also make sure to include unit-tests for any new features.