Aikido
ParabolicSmoother.hpp
Go to the documentation of this file.
1 #ifndef AIKIDO_PLANNER_PARABOLIC_PARABOLICSMOOTHER_HPP_
2 #define AIKIDO_PLANNER_PARABOLIC_PARABOLICSMOOTHER_HPP_
3 
4 #include <Eigen/Dense>
5 
9 
10 namespace aikido {
11 namespace planner {
12 namespace parabolic {
13 
14 constexpr double DEFAULT_TIMELIMT = 3.0;
15 constexpr double DEFAULT_BLEND_RADIUS = 0.5;
16 constexpr int DEFAULT_BLEND_ITERATIONS = 4;
17 constexpr double DEFAULT_CHECK_RESOLUTION = 1e-4;
18 constexpr double DEFAULT_TOLERANCE = 1e-3;
19 
47 std::unique_ptr<trajectory::Spline> doShortcut(
48  const trajectory::Spline& _inputTrajectory,
49  aikido::constraint::TestablePtr _feasibilityCheck,
50  const Eigen::VectorXd& _maxVelocity,
51  const Eigen::VectorXd& _maxAcceleration,
52  aikido::common::RNG& _rng,
53  double _timelimit = DEFAULT_TIMELIMT,
54  double _checkResolution = DEFAULT_CHECK_RESOLUTION,
55  double _tolerance = DEFAULT_TOLERANCE);
56 
88 std::unique_ptr<trajectory::Spline> doBlend(
89  const trajectory::Spline& _inputTrajectory,
90  aikido::constraint::TestablePtr _feasibilityCheck,
91  const Eigen::VectorXd& _maxVelocity,
92  const Eigen::VectorXd& _maxAcceleration,
93  double _blendRadius = DEFAULT_BLEND_RADIUS,
94  int _blendIterations = DEFAULT_BLEND_ITERATIONS,
95  double _checkResolution = DEFAULT_CHECK_RESOLUTION,
96  double _tolerance = DEFAULT_TOLERANCE);
97 
121 std::unique_ptr<trajectory::Spline> doShortcutAndBlend(
122  const trajectory::Spline& _inputTrajectory,
123  aikido::constraint::TestablePtr _feasibilityCheck,
124  const Eigen::VectorXd& _maxVelocity,
125  const Eigen::VectorXd& _maxAcceleration,
126  aikido::common::RNG& _rng,
127  double _timelimit = DEFAULT_TIMELIMT,
128  double _blendRadius = DEFAULT_BLEND_RADIUS,
129  int _blendIterations = DEFAULT_BLEND_ITERATIONS,
130  double _checkResolution = DEFAULT_CHECK_RESOLUTION,
131  double _tolerance = DEFAULT_TOLERANCE);
132 
135 {
136 public:
155  const Eigen::VectorXd& _velocityLimits,
156  const Eigen::VectorXd& _accelerationLimits,
157  bool _enableShortcut = true,
158  bool _enableBlend = true,
159  double _shortcutTimelimit = DEFAULT_TIMELIMT,
160  double _blendRadius = DEFAULT_BLEND_RADIUS,
161  int _blendIterations = DEFAULT_BLEND_ITERATIONS,
162  double _feasibilityCheckResolution = DEFAULT_CHECK_RESOLUTION,
163  double _feasibilityApproxTolerance = DEFAULT_TOLERANCE);
164 
170  std::unique_ptr<aikido::trajectory::Spline> postprocess(
171  const aikido::trajectory::Interpolated& _inputTraj,
172  const aikido::common::RNG& _rng,
173  const aikido::constraint::TestablePtr& _collisionTestable) override;
174 
180  std::unique_ptr<aikido::trajectory::Spline> postprocess(
181  const aikido::trajectory::Spline& _inputTraj,
182  const aikido::common::RNG& _rng,
183  const aikido::constraint::TestablePtr& _collisionTestable) override;
184 
185 private:
188  std::unique_ptr<aikido::trajectory::Spline> handleShortcutOrBlend(
189  const aikido::trajectory::Spline& _inputTraj,
190  const aikido::common::RNG& _rng,
191  const aikido::constraint::TestablePtr& _collisionTestable);
192 
195 
198 
200  const Eigen::VectorXd mVelocityLimits;
201 
203  const Eigen::VectorXd mAccelerationLimits;
204 
207 
210 
213 
215  double mBlendRadius;
216 
219 };
220 
221 } // namespace parabolic
222 } // namespace planner
223 } // namespace aikido
224 
225 #endif // ifndef AIKIDO_PLANNER_PARABOLIC_PARABOLICSMOOTHER_HPP_
TrajectoryPostProcessor.hpp
aikido::planner::parabolic::doShortcut
std::unique_ptr< trajectory::Spline > doShortcut(const trajectory::Spline &_inputTrajectory, aikido::constraint::TestablePtr _feasibilityCheck, const Eigen::VectorXd &_maxVelocity, const Eigen::VectorXd &_maxAcceleration, aikido::common::RNG &_rng, double _timelimit=DEFAULT_TIMELIMT, double _checkResolution=DEFAULT_CHECK_RESOLUTION, double _tolerance=DEFAULT_TOLERANCE)
Shortcut waypoints in a trajectory using parabolic splines.
aikido::planner::parabolic::ParabolicSmoother::mShortcutTimelimit
double mShortcutTimelimit
Set to the value of _shortcutTimelimit.
Definition: ParabolicSmoother.hpp:212
aikido::planner::parabolic::DEFAULT_BLEND_ITERATIONS
constexpr int DEFAULT_BLEND_ITERATIONS
Definition: ParabolicSmoother.hpp:16
aikido::planner::parabolic::ParabolicSmoother::mEnableShortcut
bool mEnableShortcut
Set to the value of _enableShortcut.
Definition: ParabolicSmoother.hpp:206
aikido::planner::parabolic::ParabolicSmoother::mFeasibilityCheckResolution
double mFeasibilityCheckResolution
Set to the value of _feasibilityCheckResolution.
Definition: ParabolicSmoother.hpp:194
aikido::planner::parabolic::ParabolicSmoother::mEnableBlend
bool mEnableBlend
Set to the value of _enableBlend.
Definition: ParabolicSmoother.hpp:209
aikido
Format of serialized trajectory in YAML.
Definition: algorithm.hpp:4
aikido::planner::parabolic::ParabolicSmoother::mBlendRadius
double mBlendRadius
Set to the value of _blendRadius.
Definition: ParabolicSmoother.hpp:215
aikido::planner::parabolic::ParabolicSmoother
Class for performing parabolic smoothing on trajectories.
Definition: ParabolicSmoother.hpp:134
aikido::planner::parabolic::doShortcutAndBlend
std::unique_ptr< trajectory::Spline > doShortcutAndBlend(const trajectory::Spline &_inputTrajectory, aikido::constraint::TestablePtr _feasibilityCheck, const Eigen::VectorXd &_maxVelocity, const Eigen::VectorXd &_maxAcceleration, aikido::common::RNG &_rng, double _timelimit=DEFAULT_TIMELIMT, double _blendRadius=DEFAULT_BLEND_RADIUS, int _blendIterations=DEFAULT_BLEND_ITERATIONS, double _checkResolution=DEFAULT_CHECK_RESOLUTION, double _tolerance=DEFAULT_TOLERANCE)
Shortcut and blends waypoints in a trajectory using parabolic splines.
Spline.hpp
aikido::planner::parabolic::DEFAULT_TOLERANCE
constexpr double DEFAULT_TOLERANCE
Definition: ParabolicSmoother.hpp:18
Interpolated.hpp
aikido::planner::parabolic::ParabolicSmoother::mBlendIterations
int mBlendIterations
Set to the value of _blendIterations.
Definition: ParabolicSmoother.hpp:218
aikido::common::RNG
Implementation of the C++11 "random engine" concept that uses virtual function calls to erase the typ...
Definition: RNG.hpp:24
aikido::planner::parabolic::ParabolicSmoother::mVelocityLimits
const Eigen::VectorXd mVelocityLimits
Set to the value of _velocityLimits.
Definition: ParabolicSmoother.hpp:200
aikido::planner::parabolic::ParabolicSmoother::postprocess
std::unique_ptr< aikido::trajectory::Spline > postprocess(const aikido::trajectory::Interpolated &_inputTraj, const aikido::common::RNG &_rng, const aikido::constraint::TestablePtr &_collisionTestable) override
Performs parabolic smoothing on an input trajectory.
aikido::planner::parabolic::DEFAULT_TIMELIMT
constexpr double DEFAULT_TIMELIMT
Definition: ParabolicSmoother.hpp:14
aikido::planner::parabolic::ParabolicSmoother::ParabolicSmoother
ParabolicSmoother(const Eigen::VectorXd &_velocityLimits, const Eigen::VectorXd &_accelerationLimits, bool _enableShortcut=true, bool _enableBlend=true, double _shortcutTimelimit=DEFAULT_TIMELIMT, double _blendRadius=DEFAULT_BLEND_RADIUS, int _blendIterations=DEFAULT_BLEND_ITERATIONS, double _feasibilityCheckResolution=DEFAULT_CHECK_RESOLUTION, double _feasibilityApproxTolerance=DEFAULT_TOLERANCE)
aikido::planner::parabolic::ParabolicSmoother::mAccelerationLimits
const Eigen::VectorXd mAccelerationLimits
Set to the value of _accelerationLimits.
Definition: ParabolicSmoother.hpp:203
aikido::planner::TrajectoryPostProcessor
Definition: TrajectoryPostProcessor.hpp:12
aikido::planner::parabolic::ParabolicSmoother::mFeasibilityApproxTolerance
double mFeasibilityApproxTolerance
Set to the value of _feasibilityApproxTolerance.
Definition: ParabolicSmoother.hpp:197
aikido::planner::parabolic::DEFAULT_BLEND_RADIUS
constexpr double DEFAULT_BLEND_RADIUS
Definition: ParabolicSmoother.hpp:15
aikido::constraint::TestablePtr
std::shared_ptr< Testable > TestablePtr
Definition: Testable.hpp:13
aikido::planner::parabolic::doBlend
std::unique_ptr< trajectory::Spline > doBlend(const trajectory::Spline &_inputTrajectory, aikido::constraint::TestablePtr _feasibilityCheck, const Eigen::VectorXd &_maxVelocity, const Eigen::VectorXd &_maxAcceleration, double _blendRadius=DEFAULT_BLEND_RADIUS, int _blendIterations=DEFAULT_BLEND_ITERATIONS, double _checkResolution=DEFAULT_CHECK_RESOLUTION, double _tolerance=DEFAULT_TOLERANCE)
Blend around waypoints in a trajectory using parabolic splines.
aikido::trajectory::Interpolated
Trajectory that uses an Interpolator to interpolate between waypoints.
Definition: Interpolated.hpp:14
aikido::planner::parabolic::DEFAULT_CHECK_RESOLUTION
constexpr double DEFAULT_CHECK_RESOLUTION
Definition: ParabolicSmoother.hpp:17
aikido::planner::parabolic::ParabolicSmoother::handleShortcutOrBlend
std::unique_ptr< aikido::trajectory::Spline > handleShortcutOrBlend(const aikido::trajectory::Spline &_inputTraj, const aikido::common::RNG &_rng, const aikido::constraint::TestablePtr &_collisionTestable)
Common logic to do shortcutting and/or blending on the input trajectory as dictated by mEnableShortcu...
aikido::trajectory::Spline
Polynomial spline trajectory defined in a StateSpace.
Definition: Spline.hpp:25