This is 604's modified version of JacisNonsense's Pathfinder. The major modifications are
- PID followers continue calculating after the robot reaches the end
- The tank modifier retimes trajectories so that velocity limits are respected
The original README is below:.
Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.
Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.
An example profile is given below, with the waypoints:
- X = -4, Y = -1, Angle = -45 degrees
- X = -2, Y = -2, Angle = 0
- X = 0, Y = 0, Angle = 0
The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.
Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.
Add the following lines to your build.gradle if you're using GradleRIO (2018.01.11 or higher):
dependencies {
compile pathfinder()
}
model {
frcUserProgram(NativeExecutableSpec) {
lib library: "pathfinder"
}
}
If you're not using GradleRIO, do the following:
If you're not using GradleRIO, you must download this manually and copy into ~/wpilib/user/java/lib
: http://dev.imjac.in/maven/jaci/pathfinder/Pathfinder-Java/1.8/Pathfinder-Java-1.8.jar
You also have to download this, extract it, and place libpathfinder.so
into ~/wpilib/user/java/lib
: http://dev.imjac.in/maven/jaci/pathfinder/Pathfinder-JNI/1.8/Pathfinder-JNI-1.8-athena.zip
Download this and put libpathfinder.a
in ~/wpilib/user/cpp/lib
: http://dev.imjac.in/maven/jaci/pathfinder/Pathfinder-Core/1.8/Pathfinder-Core-1.8-athena.zip
Download this and extract all of its contents to ~/wpilib/user/cpp/include
: http://dev.imjac.in/maven/jaci/pathfinder/Pathfinder-Core/1.8/Pathfinder-Core-1.8-headers.zip
If you want to use Pathfinder on your system, you will have to build the library for your platform. You can do this with the following:
./gradlew build
The native libraries will be located under ./Pathfinder-Core/build/libs/pathfinder/
(shared and static libs, platform=any64) and ./Pathfinder-Java/build/libs/pathfinderjava/shared/any64
. If you're using native shared (or java), you must put these somewhere on your system load path (e.g. Mac/Linux = /usr/local
, Windows = Somwhere on PATH)
To see the usage for each language variation of the API, see the README in their folder.
Language | Folder |
---|---|
C | Pathfinder-Core |
Java | Pathfinder-Java |
LabVIEW | Pathfinder-LabVIEW |
The RobotPy project has created python bindings around the Pathfinder libraries, and can be found at https://github.com/robotpy/robotpy-pathfinder
The releases on Maven (mentioned above) are built for the NI RoboRIO (v16/7 2018 image). If you go to the github releases, you can download the 1.5 version for Windows/Linux/Mac releases.
If you want to know more about how Pathfinder works, I highly suggest watching the seminar on Motion Profiling by FRC Team 254, which inspired and provided a lot of guidance for this project. Both use the same generation procedure, with some logistical differences.