29#include <VirtualRobot/MathTools.h>
30#include <VirtualRobot/Robot.h>
31#include <VirtualRobot/math/Helpers.h>
42 const VirtualRobot::RobotNodeSetPtr& rns,
43 const Eigen::VectorXf& currentJointVelocity,
44 float maxPositionAcceleration,
45 float maxOrientationAcceleration,
46 float maxNullspaceAcceleration,
47 const VirtualRobot::RobotNodePtr& tcp,
48 const VirtualRobot::RobotNodePtr& referenceFrame) :
52 maxPositionAcceleration,
53 maxOrientationAcceleration,
54 maxNullspaceAcceleration,
55 tcp ? tcp : rns->getTCP()},
60 _out = Eigen::VectorXf::Zero(rns->getSize());
61 _jnv = Eigen::VectorXf::Zero(rns->getSize());
64 const Eigen::VectorXf&
141 const Eigen::Vector3f& feedForwardVelocityPos,
142 const Eigen::Vector3f& feedForwardVelocityOri)
198 const Eigen::Matrix4f&
204 const Eigen::Vector3f
215 float dist = FLT_MAX;
217 for (
size_t i = 0; i <
waypoints.size(); i++)
221 float d = posErr + oriErr * rad2mmFactor;
241 std::stringstream ss;
266 cfg.maxOrientationAcceleration,
267 cfg.maxNullspaceAcceleration);
272 const Eigen::Ref<const Eigen::VectorXf>& currentJointVelocity)
274#pragma GCC diagnostic push
275#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
277#pragma GCC diagnostic pop
float getPositionError() const
size_t currentWaypointIndex
bool autoClearFeedForward
const Eigen::VectorXf & calculate(float dt)
void setNullSpaceControl(bool enabled)
void swapWaypoints(std::vector< Eigen::Matrix4f > &waypoints)
Eigen::Vector6f cartesianVelocity
void setWaypoints(const std::vector< Eigen::Matrix4f > &waypoints)
bool isLastWaypoint() const
std::vector< Eigen::Matrix4f > waypoints
const Eigen::Matrix4f & getCurrentTarget() const
float thresholdPositionNear
size_t skipToClosestWaypoint(float rad2mmFactor)
void setCurrentJointVelocity(const Eigen::Ref< const Eigen::VectorXf > ¤tJointVelocity)
CartesianWaypointController(const VirtualRobot::RobotNodeSetPtr &rns, const Eigen::VectorXf ¤tJointVelocity, float maxPositionAcceleration, float maxOrientationAcceleration, float maxNullspaceAcceleration, const VirtualRobot::RobotNodePtr &tcp=nullptr, const VirtualRobot::RobotNodePtr &referenceFrame=nullptr)
float thresholdPositionReached
Eigen::Vector6f feedForwardVelocity
void clearFeedForwardVelocity()
CartesianPositionController ctrlCartesianPos2Vel
CartesianVelocityControllerWithRamp ctrlCartesianVelWithRamps
void setTarget(const Eigen::Matrix4f &target)
const Eigen::Vector3f getCurrentTargetPosition() const
bool isCurrentTargetNear() const
float getOrientationError() const
bool isFinalTargetNear() const
bool isCurrentTargetReached() const
float KpJointLimitAvoidance
std::string getStatusText()
void setConfig(const CartesianWaypointControllerConfig &cfg)
void setFeedForwardVelocity(const Eigen::Vector6f &feedForwardVelocity)
bool nullSpaceControlEnabled
float jointLimitAvoidanceScale
void addWaypoint(const Eigen::Matrix4f &waypoint)
bool isFinalTargetReached() const
float thresholdOrientationReached
float thresholdOrientationNear
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Matrix< float, 6, 1 > Vector6f
This file offers overloads of toIce() and fromIce() functions for STL container types.