26#include <VirtualRobot/MathTools.h>
27#include <VirtualRobot/Nodes/RobotNode.h>
28#include <VirtualRobot/Robot.h>
29#include <VirtualRobot/RobotNodeSet.h>
30#include <VirtualRobot/math/Helpers.h>
39 const VirtualRobot::RobotNodePtr& tcp,
41 const Eigen::Matrix4f& target) :
50 const VirtualRobot::RobotNodePtr& tcp,
52 const std::vector<Eigen::Matrix4f>&
waypoints) :
61 const VirtualRobot::RobotNodePtr& tcp,
70 this->waypoints.push_back(pose->toEigen());
113 Eigen::VectorXf
cv =
posController.calculate(target, VirtualRobot::IKSolver::All);
131 this->waypoints.clear();
134 this->waypoints.push_back(pose->toEigen());
161 const Eigen::Vector3f& feedForwardVelocityOri)
227 const Eigen::Matrix4f&
233 const Eigen::Vector3f
242 float dist = FLT_MAX;
244 for (
size_t i = 0; i <
waypoints.size(); i++)
248 float d = posErr + oriErr * rad2mmFactor;
268 std::stringstream ss;
278 const VirtualRobot::RobotNodeSetPtr& rns,
279 const Eigen::Matrix4f& target,
285 cartesianVelocityController.reset(
292 float eps = args.
eps;
294 std::vector<float> initialJointAngles = rns->getJointValues();
296 for (
int i = 0; i < args.
loops; i++)
299 Eigen::VectorXf nullspaceVel =
300 cartesianVelocityController
301 ->calculateJointLimitAvoidance();
302 float nullspaceLen = nullspaceVel.norm();
303 if (nullspaceLen > stepLength)
305 nullspaceVel = nullspaceVel / nullspaceLen * stepLength;
307 Eigen::VectorXf jointVelocities = cartesianVelocityController->calculate(
311 float len = jointVelocities.norm();
312 if (len > stepLength)
314 jointVelocities = jointVelocities / len * stepLength;
317 for (
size_t n = 0; n < rns->getSize(); n++)
319 rns->getNode(n)->setJointValue(rns->getNode(n)->getJointValue() +
330 if (errorOriAfter < errorOriInitial + 1.f / 180 *
M_PI &&
331 errorPosAfter < errorPosInitial + 1.f)
337 rns->setJointValues(initialJointAngles);
float getPositionError(const Eigen::Matrix4f &targetPose) const
Eigen::VectorXf calculate(const Eigen::Matrix4f &targetPose, VirtualRobot::IKSolver::CartesianSelection mode) const
float getOrientationError(const Eigen::Matrix4f &targetPose) const
float getPositionError() const
size_t currentWaypointIndex
bool autoClearFeedForward
void setNullSpaceControl(bool enabled)
CartesianPositionController posController
void readConfig(const CartesianPositionControllerConfigBase &config)
bool isLastWaypoint() const
static bool OptimizeNullspace(const VirtualRobot::RobotNodePtr &tcp, const VirtualRobot::RobotNodeSetPtr &rns, const Eigen::Matrix4f &target, const NullspaceOptimizationArgs &args=NullspaceOptimizationArgs())
OptimizeNullspace.
std::vector< Eigen::Matrix4f > waypoints
const Eigen::Matrix4f & getCurrentTarget() const
VelocityControllerHelperPtr velocityControllerHelper
float thresholdPositionNear
size_t skipToClosestWaypoint(float rad2mmFactor)
float thresholdPositionReached
void immediateHardStop(bool clearTargets=true)
Eigen::Vector6f feedForwardVelocity
void clearFeedForwardVelocity()
void setTarget(const Eigen::Matrix4f &target)
const Eigen::Vector3f getCurrentTargetPosition() const
bool isCurrentTargetNear() const
float getOrientationError() const
PositionControllerHelper(const VirtualRobot::RobotNodePtr &tcp, const VelocityControllerHelperPtr &velocityControllerHelper, const Eigen::Matrix4f &target)
bool isFinalTargetNear() const
bool isCurrentTargetReached() const
void setNewWaypoints(const std::vector< Eigen::Matrix4f > &waypoints)
std::string getStatusText()
void setFeedForwardVelocity(const Eigen::Vector6f &feedForwardVelocity)
void addWaypoint(const Eigen::Matrix4f &waypoint)
bool isFinalTargetReached() const
float thresholdOrientationReached
float thresholdOrientationNear
Matrix< float, 6, 1 > Vector6f
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< VelocityControllerHelper > VelocityControllerHelperPtr
std::shared_ptr< CartesianVelocityController > CartesianVelocityControllerPtr
IceInternal::Handle< Pose > PosePtr
VirtualRobot::IKSolver::CartesianSelection cartesianSelection
VirtualRobot::JacobiProvider::InverseJacobiMethod invJacMethod