diff --git a/source/RobotAPI/libraries/core/TrajectoryController.cpp b/source/RobotAPI/libraries/core/TrajectoryController.cpp index ef74dd1fc47b1f67dbc44bb97f87f5dc5346a39c..5328d534a2b6ce76915a343e2cdad3014a4ee1b4 100644 --- a/source/RobotAPI/libraries/core/TrajectoryController.cpp +++ b/source/RobotAPI/libraries/core/TrajectoryController.cpp @@ -48,6 +48,7 @@ namespace armarx //} positions.resize(traj->dim(), 1); veloctities.resize(traj->dim(), 1); + currentError.resize(traj->dim(), 1); } const Eigen::VectorXf& TrajectoryController::update(double deltaT, const Eigen::VectorXf& currentPosition) @@ -82,7 +83,18 @@ namespace armarx veloctities(i) = 0; } } - currentError = positions - currentPosition; + for (size_t i = 0; i < dim; ++i) + { + if (pid->limitless.size() > i && pid->limitless.at(i)) + { + currentError(i) = math::MathUtils::AngleDelta(currentPosition(i), positions(i)); + } + else + { + currentError(i) = positions(i) - currentPosition(i); + } + + } pid->update(std::abs(deltaT), currentPosition, positions); veloctities += pid->getControlValue();