40 std::vector<bool> limitless;
41 for (
auto ls :
traj->getLimitless())
43 limitless.push_back(ls.enabled);
48 std::numeric_limits<double>::max(),
49 std::numeric_limits<double>::max(),
52 pid->maxIntegral = maxIntegral;
66 const Eigen::VectorXf&
73 size_t dim =
traj->dim();
82 for (
size_t i = 0; i < dim; ++i)
94 for (
size_t i = 0; i < dim; ++i)
100 for (
size_t i = 0; i < dim; ++i)
102 if (
pid->limitless.size() > i &&
pid->limitless.at(i))
112 pid->update(std::abs(deltaT), currentPosition,
positions);
143 if (
traj->size() == 0)
147 auto dim =
traj->dim();
148 Ice::DoubleSeq prevPos =
traj->begin()->getPositions();
149 std::vector<math::LinearizeAngularTrajectory> linTraj;
150 for (
size_t i = 0; i < dim; ++i)
154 auto limitlessStates =
traj->getLimitless();
155 for (
auto& state : *
traj)
157 for (
size_t i = 0; i < dim; ++i)
168 if (limitlessStates.at(i).enabled)
170 state.getData().at(i)->at(0) =
171 linTraj.at(i).update(state.getData().at(i)->at(0));
180 if (
traj->size() == 0)
184 auto dim =
traj->dim();
185 auto limitlessStates =
traj->getLimitless();
187 for (
auto& state : *
traj)
189 for (
size_t i = 0; i < dim; ++i)
191 if (!limitlessStates.at(i).enabled)
195 double pos = state.getPosition(i);
197 (limitlessStates.at(i).limitHi + limitlessStates.at(i).limitLo) * 0.5;
199 state.getData().at(i)->at(0) = newPos;
204 const Eigen::VectorXf&
210 const Eigen::VectorXf&
const Eigen::VectorXf & getPositions() const
TrajectoryController()
Creates a new TrajectoryController and assigns a QWidget to handle.
MultiDimPIDControllerPtr pid
Eigen::VectorXf veloctities
static void UnfoldLimitlessJointPositions(TrajectoryPtr traj)
const TrajectoryPtr & getTraj() const
Eigen::VectorXf currentError
static void FoldLimitlessJointPositions(TrajectoryPtr traj)
const Eigen::VectorXf & getCurrentError() const
Eigen::VectorXf positions
double getCurrentTimestamp() const
const Eigen::VectorXf & update(double deltaT, const Eigen::VectorXf ¤tPosition)
The Trajectory class represents n-dimensional sampled trajectories.
static float angleModX(float value, float center)
static float AngleDelta(float angle1, float angle2)
#define ARMARX_CHECK_EXPRESSION(expression)
This macro evaluates the expression and if it turns out to be false it will throw an ExpressionExcept...
#define ARMARX_CHECK_EQUAL(lhs, rhs)
This macro evaluates whether lhs is equal (==) rhs and if it turns out to be false it will throw an E...
This file offers overloads of toIce() and fromIce() functions for STL container types.
IceInternal::Handle< Trajectory > TrajectoryPtr
MultiDimPIDControllerTemplate<> MultiDimPIDController