.. _program_listing_file_include_ruckig_brake.hpp: Program Listing for File brake.hpp ================================== |exhale_lsh| :ref:`Return to documentation for file ` (``include/ruckig/brake.hpp``) .. |exhale_lsh| unicode:: U+021B0 .. UPWARDS ARROW WITH TIP LEFTWARDS .. code-block:: cpp #pragma once #include #include #include #include namespace ruckig { class BrakeProfile { static constexpr double eps {2.2e-14}; void acceleration_brake(double v0, double a0, double vMax, double vMin, double aMax, double aMin, double jMax); void velocity_brake(double v0, double a0, double vMax, double vMin, double aMax, double aMin, double jMax); public: double duration {0.0}; std::array t, j, a, v, p; void get_position_brake_trajectory(double v0, double a0, double vMax, double vMin, double aMax, double aMin, double jMax); void get_second_order_position_brake_trajectory(double v0, double vMax, double vMin, double aMax, double aMin); void get_velocity_brake_trajectory(double a0, double aMax, double aMin, double jMax); void get_second_order_velocity_brake_trajectory(); void finalize(double& ps, double& vs, double& as) { if (t[0] <= 0.0 && t[1] <= 0.0) { duration = 0.0; return; } duration = t[0]; p[0] = ps; v[0] = vs; a[0] = as; std::tie(ps, vs, as) = integrate(t[0], ps, vs, as, j[0]); if (t[1] > 0.0) { duration += t[1]; p[1] = ps; v[1] = vs; a[1] = as; std::tie(ps, vs, as) = integrate(t[1], ps, vs, as, j[1]); } } void finalize_second_order(double& ps, double& vs, double& as) { if (t[0] <= 0.0) { duration = 0.0; return; } duration = t[0]; p[0] = ps; v[0] = vs; std::tie(ps, vs, as) = integrate(t[0], ps, vs, a[0], 0.0); } }; } // namespace ruckig