#pragma once #include #include #include #include "planner/joint_space_planner/include/joint_space_planner.h" #include #include #include namespace cmvr { // 适配器:ConstAccel class ConstAccelTraj : public ITrajectory { public: explicit ConstAccelTraj(std::shared_ptr p); toppra::Bound timeInterval() const override; Eigen::VectorXd q(double t) const override; Eigen::VectorXd qd(double t) const override; Eigen::VectorXd qdd(double t) const override; private: std::shared_ptr impl_; }; // 适配器:Spline class SplineTraj : public ITrajectory { public: SplineTraj(const std::shared_ptr &path, const toppra::Vector &grid, const toppra::Vector &vsq); toppra::Bound timeInterval() const override; Eigen::VectorXd q(double t) const override; Eigen::VectorXd qd(double t) const override; Eigen::VectorXd qdd(double t) const override; private: toppra::parametrizer::Spline impl_; }; // 具体规划器:一次/三次/五次可切换;ConstAccel 校验失败自动回退 Spline class ToppraBSpline : public JointSpacePlanner { public: explicit ToppraBSpline(PathType type = PathType::Quintic); // 主入口:尽量保证返回轨迹(失败回退到 Spline) bool plan(const std::vector &start_joints, const std::vector &goal_joints, TrajPtr &traj_out) override; std::vector sampleTrajectory(const TrajPtr& traj, double dt) override; bool writeTrajectoryCsv(const std::string& filename,const std::vector& samples) override; private: // 几何路径构造 static std::shared_ptr buildLinear(const Eigen::VectorXd &q0, const Eigen::VectorXd &q1); static std::shared_ptr buildCubicHermiteRest(const Eigen::VectorXd &q0, const Eigen::VectorXd &q1); static std::shared_ptr buildQuinticRestToRest(const Eigen::VectorXd &q0, const Eigen::VectorXd &q1); static std::shared_ptr buildPath(const Eigen::VectorXd &q0, const Eigen::VectorXd &q1, PathType t); static void sanitizeVsq(toppra::Vector &vsq); bool ensureLimitsSized(std::size_t DoF); }; } // namespace cmvr