4#include <SimoxUtility/math/convert/mat4f_to_quat.h>
5#include <VirtualRobot/IK/DifferentialIK.h>
6#include <VirtualRobot/IK/JacobiProvider.h>
7#include <VirtualRobot/MathTools.h>
8#include <VirtualRobot/Nodes/RobotNode.h>
9#include <VirtualRobot/Robot.h>
10#include <VirtualRobot/RobotNodeSet.h>
25 const VirtualRobot::RobotNodeSetPtr& rtRns)
31 rtTCP = rtRns->getTCP();
33 ik.reset(
new VirtualRobot::DifferentialIK(
34 rtRns, rtRns->getRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped));
82 c.desiredPose.block<3, 3>(0, 0) * rtStatus.
currentPose.block<3, 3>(0, 0).transpose();
93 else if ((
c.desiredPose.block<3, 1>(0, 3) - rtStatus.
currentPose.block<3, 1>(0, 3)).norm() >
94 c.safeDistanceMMToGoal or
97 VirtualRobot::MathTools::deg2rad(
c.safeRotAngleDegreeToGoal))
111 auto nDoF =
static_cast<Eigen::Index
>(rtStatus.
nDoF);
115 ik->getJacobianMatrix(
rtTCP, VirtualRobot::IKSolver::CartesianSelection::All);
116 rtStatus.
jacobi.block(0, 0, 3, nDoF) =
117 0.001 * rtStatus.
jacobi.block(0, 0, 3, nDoF);
122 ik->computePseudoInverseJacobianMatrix(rtStatus.
jacobi.transpose(), rtStatus.
lambda);
141 rtStatus.
currentPose.block<3, 3>(0, 0).transpose();
158 c.kpNullspaceTorque.cwiseProduct(
c.desiredNullspaceJointAngles.value() - rtStatus.
jointPosition) -
void initialize(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodeSetPtr &rtRns)
VirtualRobot::RobotNodePtr rtTCP
common::ft::FTSensor ftsensor
void preactivateInit(const VirtualRobot::RobotNodeSetPtr &rns)
common::control_law::arondto::TaskspaceImpedanceControllerConfig Config
void run(Config &c, TSCtrlRtStatus &robotStatus)
VirtualRobot::RobotNodePtr tcp
#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...
#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...
#define ARMARX_INFO
The normal logging level.
This file is part of ArmarX.
Eigen::VectorXf jointVelocity
Eigen::VectorXf jointPosition
Eigen::AngleAxisf oriDiffAngleAxis
Eigen::Vector6f currentTwist
Eigen::MatrixXf jtpinv
pseudo inverse of the jacobi transpose [6, nDoF], for torque control
Eigen::MatrixXf I
for computing nullspace projection
Eigen::Matrix4f currentPose
Eigen::MatrixXf jacobi
others jacobi matrix [6, nDoF]
Eigen::Vector6f poseErrorImp
Eigen::Matrix3f poseDiffMatImp
intermediate results
Eigen::Matrix4f desiredPose
Eigen::VectorXf qvelFiltered
for velocity control
Eigen::VectorXf desiredJointTorque
targets
Eigen::VectorXf nullspaceTorque
float lambda
damping term for pseudo inverse of jacobian
Eigen::Vector6f forceImpedance
task space variables (command in operation space)
Eigen::Matrix4f desiredPoseUnsafe