> For the complete documentation index, see [llms.txt](https://docs.seattlesolvers.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.seattlesolvers.com/changelog.md).

# Changelog

This is the Changelog for SolversLib versions for 0.3.1 and higher. It includes the changes made from the previous iteration, and important notes for it as well. You can change SolversLib documentation versions by using the selector in the top left corner.

## [0.3.6](/readme.md)

#### PedroPathing:

* Added support for Pedro Pathing 3.0.0 and higher
* Changed `FollowPathCommand` to only take a `Path`
* Changed `FollowPathCommand`'s `maxPower` and `setGlobalMaxPower()` to limit the path speed through Foresight's `maxPathSpeed`&#x20;
* Changed `FollowPathCommand` to temporarily override `follower.holdEnd` for its path, and to hold or stop the robot if it is interrupted
* Changed `HoldPointCommand` to call `follower.hold(Pose)`
* Changed `TurnCommand` and `TurnToCommand` to turn by holding the current position with the new heading (Pedro Pathing 3 has no turn methods) and finish once the heading is within a tolerance (0.01 rad by default)
* Updated the `PedroCommandSample` examples (`Constants`, `PedroAutoSample`, `PedroCommands`, `PedroTeleOpSample`) for Pedro Pathing 3

`core` and `photon` have been updated to 0.3.6 to standardize the versions, but there have been no changes to it

## [0.3.5](https://docs.seattlesolvers.com/0.3.5)

#### Core:

* Added `preRun()` method to `CommandOpMode`, which runs once after "Play" is pressed and before the main `run()` loop starts
  * `preRun()` is not called if the OpMode is stopped during the init phase
* Bug fixed `CascadeController` velocity measurement to use the change in measured position instead of the change in error
* Bug fixed `CascadeController` outputting `NaN` on the first control loop cycle
* Bug fixed `CascadeController`'s primary controller not receiving the position setpoint
* Added `reset()` override to `CascadeController` that also resets its primary and secondary controllers
* Added `getMeasuredVel()` method to `CascadeController`

#### General:

* Changed the FTC SDK dependencies of all modules (`core`, `pedroPathing`, and `photon`) to `compileOnly`, so SolversLib no longer pins an SDK version and works with newer FTC SDK versions
* Split the license into [FIRST-LICENSE](https://github.com/FTC-23511/SolversLib/blob/master/FIRST-LICENSE) and [23511-LICENSE](https://github.com/FTC-23511/SolversLib/blob/master/23511-LICENSE)

## [0.3.4](https://docs.seattlesolvers.com/0.3.4)

#### Core:

* Fixed bug with `RunMode` in `MotorEx` using distance instead of position
* Added `ServoExGroup`
* Added optional `GamepadEx` Slew Rate Limiters (mostly for swerve, but can be used for mecanum chassis as well)
* Added optional `P2PController` Slew Rate Limiters (for swerve)
* Added `mirror()` method to `Pose2d` for alliance swapping
* Updated swerve kinematics with maxSpeed
* Refactored `Timing` class
  * `Stopwatch`
  * `Timer`
  * `Rate` (Refresh Rate Timer)
* Added `rawPower` tracking and access in hardware classes
* Bug fixed `MotorEx` 's PositionControl using `encoder.getPosition()` instead of `encoder.getDistance()`
* Added `LambdaCommand`
* Added `SubsystemBase` `isAvailable()` method
* Added CommandScheduler `getScheduledCommands()` method
* Added `Commands` utility class for pre-defined actions (not to be confused with the Command interface)
* Added `CallbackCommand`
* Bug fixed deadline `end()` command in `ParallelDeadlineGroup`

#### PedroPathing:

* Fixed maxPower not saving for multiple paths

#### Photon (NEW):

* Added stable PhotonCore for FTC

## [0.3.3](https://docs.seattlesolvers.com/0.3.3)

#### Core:

* Rewrote Hardware classes:
  * Deprecated [`ServoEx` interface](/features/hardware/motors-1.md#servoex-interface-and-simpleservo-class) and [`SimpleServo` class](/features/hardware/motors-1.md#servoex-interface-and-simpleservo-class)
    * The new [`ServoEx` class](/features/hardware/servos.md#servoex) serves as a replacement to both of the classes above.
  * Added [`CRServoEx`](/features/hardware/servos.md#crservoex-and-absoluteanalogencoder) and [`AnalogAbsoluteEncoder`](/features/hardware/servos.md#crservoex-and-absoluteanalogencoder) (4th wire support on Servos)
  * Added optional power caching to `Ex` classes like `MotorEx`, `ServoEx`, and `CRServoEx`, etc.
  * Added a Color Sensor class for the [`REV Color Sensor V3`](/features/hardware/sensors.md#sensors)
  * Modified [`SensorDistance`](https://github.com/FTC-23511/SolversLib/blob/master/core/src/main/java/com/seattlesolvers/solverslib/hardware/SensorDistance.java) & [`SensorDistanceEx`](https://github.com/FTC-23511/SolversLib/blob/master/core/src/main/java/com/seattlesolvers/solverslib/hardware/SensorDistanceEx.java) to handle custom minimum and maximum distance threshold values
* Beta Swerve support:
  * Added [`Point-to-Point`](/pathing/point-to-point.md) control
  * Rewrote Swerve kinematics and updated `ChassisSpeeds`
  * Created [`SolversLib Visualizer`](https://visualizer.seattlesolvers.com/) (forked from Pedro Pathing Visualizer)
* Implemented abstract [`Controller`](/features/controllers.md#using-the-controller-class) class and added [`SquIDF`](/features/controllers/squidf.md) controller
* Added native [`RetryCommand`](/command-base/command-system/convenience-commands.md#retrycommand) from Marrow

#### PedroPathing:

* Added two new Pedro Commands: [`TurnToCommand`](/pedro-pathing/pedro-commands/hold-point-command-2.md) and [`TurnCommand`](/pedro-pathing/pedro-commands/hold-point-command-1.md)
* Added support for Pedro Pathing versions 2.0.0 and higher

## [0.3.2](https://docs.seattlesolvers.com/0.3.2)

#### Core:

* Added beta SquID support and early Swerve Kinematics
* Fixed `CommandScheduler`'s `cancelAll()` from throwing an error
* Added additional constructors to [`RepeatCommand`](/command-base/command-system/convenience-commands.md#repeatcommand)
* Rewrote SolversHardware wrappers into hardware

#### PedroPathing:

* Added new Pedro Command: [`HoldPointCommand`](/pedro-pathing/pedro-commands/hold-point-command.md)
* Added support for Pedro Pathing 1.0.9

## [0.3.1](https://docs.seattlesolvers.com/0.3.1)

#### Core:

* Add SolversHardware caching wrappers
* Fixed known FTCLib bugs/issues:
  * [Double ending issue in ParallelRaceGroup](https://github.com/FTCLib/FTCLib/pull/261)
  * [SequentialCommandGroup is incompatible with other command groups](https://github.com/FTCLib/FTCLib/issues/253)
  * [ConcurrentModificationException in cancelAll()](https://github.com/FTCLib/FTCLib/pull/260)
  * [IllegalAccessError when trying to build clean dev branch on Windows](https://github.com/FTCLib/FTCLib/issues/255)
  * [Missing Aliases for PS4 and PS5 buttons](https://github.com/FTCLib/FTCLib/issues/250)

#### Pedro Pathing:

* Added new Pedro Command: [`FollowPathCommand`](/pedro-pathing/pedro-commands/followpathcommand.md)
* Added support for Pedro Pathing 1.0.8


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.seattlesolvers.com/changelog.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
