16 #include <Tasks/QPTasks.h>
77 void refVel(
const Eigen::VectorXd & vel);
82 const Eigen::VectorXd &
refVel()
const;
130 void damping(
const Eigen::VectorXd & damping);
150 void setGains(
const Eigen::VectorXd & stiffness,
const Eigen::VectorXd & damping);
192 const std::map<std::string, std::vector<std::array<int, 2>>> & activeDofs = {},
193 bool checkJoints =
true);
208 const std::vector<std::string> & activeJointsName,
209 const std::map<std::string, std::vector<std::array<int, 2>>> & activeDofs = {})
override;
225 const std::map<std::string, std::vector<std::array<int, 2>>> & unactiveDofs = {},
226 bool checkJoints =
true);
241 const std::vector<std::string> & unactiveJointsName,
242 const std::map<std::string, std::vector<std::array<int, 2>>> & unactiveDofs = {})
override;
248 Eigen::VectorXd
eval()
const override;
250 Eigen::VectorXd
speed()
const override;
265 template<
Backend backend,
typename ErrorT,
typename... Args>
268 assert(backend == backend_);
269 errorT = mc_rtc::make_void_ptr<ErrorT>(std::forward<Args>(args)...);
270 if constexpr(backend == Backend::Tasks)
272 trajectoryT_ = mc_rtc::make_void_ptr<tasks::qp::TrajectoryTask>(
273 robots.mbs(), rIndex,
static_cast<ErrorT *
>(errorT.get()), stiffness_(0), damping_(0), weight_);
274 auto & trajectory = *
static_cast<tasks::qp::TrajectoryTask *
>(trajectoryT_.get());
275 stiffness_ = trajectory.stiffness();
276 damping_ = trajectory.damping();
277 if(refVel_.size() != trajectory.refVel().size()) { refVel_ = trajectory.refVel(); }
278 if(refAccel_.size() != trajectory.refAccel().size()) { refAccel_ = trajectory.refAccel(); }
280 else if constexpr(backend == Backend::TVM)
282 auto error =
static_cast<ErrorT *
>(errorT.get());
283 trajectoryT_ = mc_rtc::make_void_ptr<details::TVMTrajectoryTaskGenericPtr>(
284 std::make_shared<details::TVMTrajectoryTaskGeneric>());
286 int size =
error->size();
287 stiffness_ = Eigen::VectorXd::Constant(size, 1, stiffness_(0));
288 damping_ = Eigen::VectorXd::Constant(size, 1, damping_(0));
289 if constexpr(details::has_refVel_v<ErrorT>) { refVel_ =
error->refVel(); }
290 if constexpr(details::has_refAccel_v<ErrorT>) { refAccel_ =
error->refAccel(); }
312 bool inSolver_ =
false;
#define MC_TASKS_DLLAPI
Definition: api.h:50
void error_and_throw(Args &&... args)
Definition: logging.h:47
void error(Args &&... args)
Definition: logging.h:63
std::unique_ptr< void, void(*)(void *)> void_ptr
Definition: void_ptr.h:14
std::shared_ptr< TVMTrajectoryTaskGeneric > TVMTrajectoryTaskGenericPtr
Definition: TVMTrajectoryTaskGeneric.h:54
Definition: StabilizerStandingState.h:12
Definition: RobotFrame.h:22
Simplify access to values hold within a JSON file.
Definition: Configuration.h:166
Logs controller data to disk.
Definition: Logger.h:30
Definition: StateBuilder.h:28
Definition: QPSolver.h:86
Backend
Definition: QPSolver.h:91
Generic wrapper for a trajectory dynamic over an error function.
Definition: TrajectoryTaskGeneric.h:27
unsigned int rIndex
Definition: TrajectoryTaskGeneric.h:304
void selectActiveJoints(mc_solver::QPSolver &solver, const std::vector< std::string > &activeJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &activeDofs={}) override
Create an active joints selector.
double damping() const
Get the current task damping.
void damping(double damping)
Set the task damping, leaving its stiffness unchanged.
Eigen::VectorXd dimWeight() const override
Get the current task's dim weight vector.
void load(mc_solver::QPSolver &solver, const mc_rtc::Configuration &config) override
Load parameters from a Configuration object.
void addToSolver(mc_solver::QPSolver &solver) override
Add the task to a solver.
const Eigen::VectorXd & dimDamping() const
Get the current task dimensional damping.
void addToLogger(mc_rtc::Logger &logger) override
void dimWeight(const Eigen::VectorXd &dimW) override
Set the task's dimension weight vector.
void resetJointsSelector(mc_solver::QPSolver &solver) override
Reset active joints selection.
double stiffness() const
Get the current task stiffness.
Eigen::VectorXd refAccel_
Definition: TrajectoryTaskGeneric.h:311
void selectActiveJoints(const std::vector< std::string > &activeJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &activeDofs={}, bool checkJoints=true)
Create an active joints selector.
const Eigen::VectorXd & refAccel() const
Get the trajectory reference acceleration.
void reset() override
Reset task target velocity and acceleration to zero.
Eigen::VectorXd damping_
Definition: TrajectoryTaskGeneric.h:326
Eigen::VectorXd speed() const override
Returns the task velocity.
void finalize(Args &&... args)
Definition: TrajectoryTaskGeneric.h:266
void refAccel(const Eigen::VectorXd &accel)
Set the trajectory reference acceleration.
void stiffness(const Eigen::VectorXd &stiffness)
Set dimensional stiffness.
void addToGUI(mc_rtc::gui::StateBuilder &) override
void refVel(const Eigen::VectorXd &vel)
Set the trajectory reference velocity.
void weight(double w)
Set the task weight.
Eigen::VectorXd eval() const override
Returns the task error.
void update(mc_solver::QPSolver &) override
Update the task.
double weight() const
Returns the task weight.
const Eigen::VectorXd & refVel() const
Get the trajectory reference velocity.
const mc_rbdyn::Robots & robots
Definition: TrajectoryTaskGeneric.h:303
void selectUnactiveJoints(mc_solver::QPSolver &solver, const std::vector< std::string > &unactiveJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &unactiveDofs={}) override
Create an unactive joints selector.
TrajectoryTaskGeneric(const mc_rbdyn::RobotFrame &frame, double stiffness, double weight)
Constructor (auto damping)
void stiffness(double stiffness)
Set the task stiffness/damping.
void damping(const Eigen::VectorXd &damping)
Set dimensional damping.
const Eigen::VectorXd & dimStiffness() const
Get the current task dimensional stiffness.
virtual void resetJointsSelector()
TrajectoryTaskGeneric(const mc_rbdyn::Robots &robots, unsigned int robotIndex, double stiffness, double weight)
Constructor (auto damping)
std::function< bool(const mc_tasks::MetaTask &task, std::string &)> buildCompletionCriteria(double dt, const mc_rtc::Configuration &config) const override
void setGains(double stiffness, double damping)
Set both stiffness and damping.
virtual ~TrajectoryTaskGeneric()=default
void selectUnactiveJoints(const std::vector< std::string > &unactiveJointsName, const std::map< std::string, std::vector< std::array< int, 2 >>> &unactiveDofs={}, bool checkJoints=true)
Create an unactive joints selector.
Eigen::VectorXd refVel_
Definition: TrajectoryTaskGeneric.h:310
const Eigen::VectorXd & normalAcc() const
Eigen::VectorXd stiffness_
Definition: TrajectoryTaskGeneric.h:325
double weight_
Definition: TrajectoryTaskGeneric.h:327
void setGains(const Eigen::VectorXd &stiffness, const Eigen::VectorXd &damping)
Set dimensional stiffness and damping.