mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-22 01:11:42 +00:00
[wpimath] Trajectory: Throw on empty lists of States (#5497)
Fixes #4141.
This commit is contained in:
@@ -30,9 +30,15 @@ public class Trajectory {
|
||||
* Constructs a trajectory from a vector of states.
|
||||
*
|
||||
* @param states A vector of states.
|
||||
* @throws IllegalArgumentException if the vector of states is empty.
|
||||
*/
|
||||
public Trajectory(final List<State> states) {
|
||||
m_states = states;
|
||||
|
||||
if (m_states.isEmpty()) {
|
||||
throw new IllegalArgumentException("Trajectory manually created with no states.");
|
||||
}
|
||||
|
||||
m_totalTimeSeconds = m_states.get(m_states.size() - 1).timeSeconds;
|
||||
}
|
||||
|
||||
@@ -92,8 +98,13 @@ public class Trajectory {
|
||||
*
|
||||
* @param timeSeconds The point in time since the beginning of the trajectory to sample.
|
||||
* @return The state at that point in time.
|
||||
* @throws IllegalStateException if the trajectory has no states.
|
||||
*/
|
||||
public State sample(double timeSeconds) {
|
||||
if (m_states.isEmpty()) {
|
||||
throw new IllegalStateException("Trajectory cannot be sampled if it has no states.");
|
||||
}
|
||||
|
||||
if (timeSeconds <= m_states.get(0).timeSeconds) {
|
||||
return m_states.get(0);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "frc/trajectory/Trajectory.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <stdexcept>
|
||||
|
||||
#include <wpi/MathExtras.h>
|
||||
#include <wpi/json.h>
|
||||
@@ -54,10 +55,20 @@ Trajectory::State Trajectory::State::Interpolate(State endValue,
|
||||
}
|
||||
|
||||
Trajectory::Trajectory(const std::vector<State>& states) : m_states(states) {
|
||||
if (m_states.empty()) {
|
||||
throw std::invalid_argument(
|
||||
"Trajectory manually initialized with no states.");
|
||||
}
|
||||
|
||||
m_totalTime = states.back().t;
|
||||
}
|
||||
|
||||
Trajectory::State Trajectory::Sample(units::second_t t) const {
|
||||
if (m_states.empty()) {
|
||||
throw std::runtime_error(
|
||||
"Trajectory cannot be sampled if it has no states.");
|
||||
}
|
||||
|
||||
if (t <= m_states.front().t) {
|
||||
return m_states.front();
|
||||
}
|
||||
|
||||
@@ -66,6 +66,8 @@ class WPILIB_DLLEXPORT Trajectory {
|
||||
|
||||
/**
|
||||
* Constructs a trajectory from a vector of states.
|
||||
*
|
||||
* @throws std::invalid_argument if the vector of states is empty.
|
||||
*/
|
||||
explicit Trajectory(const std::vector<State>& states);
|
||||
|
||||
@@ -77,6 +79,7 @@ class WPILIB_DLLEXPORT Trajectory {
|
||||
|
||||
/**
|
||||
* Return the states of the trajectory.
|
||||
*
|
||||
* @return The states of the trajectory.
|
||||
*/
|
||||
const std::vector<State>& States() const { return m_states; }
|
||||
@@ -86,6 +89,7 @@ class WPILIB_DLLEXPORT Trajectory {
|
||||
*
|
||||
* @param t The point in time since the beginning of the trajectory to sample.
|
||||
* @return The state at that point in time.
|
||||
* @throws std::runtime_error if the trajectory has no states.
|
||||
*/
|
||||
State Sample(units::second_t t) const;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user