3#include <SimoxUtility/math/convert/mat4f_to_quat.h>
4#include <VirtualRobot/IK/DifferentialIK.h>
5#include <VirtualRobot/IK/IKSolver.h>
6#include <VirtualRobot/MathTools.h>
7#include <VirtualRobot/Nodes/RobotNode.h>
8#include <VirtualRobot/Robot.h>
9#include <VirtualRobot/RobotNodeSet.h>
20 const VirtualRobot::RobotNodeSetPtr& rtRns,
21 const std::vector<size_t>& torqueControlledIndex,
22 const std::vector<size_t>& velocityControlledIndex)
34 rtTCP = rtRns->getTCP();
36 ik.reset(
new VirtualRobot::DifferentialIK(
37 rtRns, rtRns->getRobot()->getRootNode(), VirtualRobot::JacobiProvider::eSVDDamped));
108 auto nDoF =
static_cast<Eigen::Index
>(rtStatus.
nDoF);
112 ik->getJacobianMatrix(
rtTCP, VirtualRobot::IKSolver::CartesianSelection::All);
113 rtStatus.
jacobi.block(0, 0, 3, nDoF) =
114 0.001 * rtStatus.
jacobi.block(0, 0, 3, nDoF);
118 rtStatus.
jpinv = ik->computePseudoInverseJacobianMatrix(rtStatus.
jacobi, rtStatus.
lambda);
132 for (
size_t i = 0; i < 6; i++)
147 c.kdCartesianVel.head<3>().cwiseProduct(rtStatus.
currentTwist.head<3>());
153 c.kdCartesianVel.tail<3>().cwiseProduct(rtStatus.
currentTwist.tail<3>());
VirtualRobot::RobotNodePtr rtTCP
common::ft::FTSensor ftsensor
std::vector< size_t > jointIDTorqueMode
void preactivateInit(const VirtualRobot::RobotNodeSetPtr &rns)
std::vector< size_t > jointIDVelocityMode
void initialize(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodeSetPtr &rtRns, const std::vector< size_t > &torqueControlledIndex, const std::vector< size_t > &velocityControlledIndex)
void run(Config &c, TSCtrlRtStatus &robotStatus)
arondto::ZeroTorqueOrVelocityControllerConfig Config
you can set the following values from outside of the rt controller via Ice interfaces
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...
This file is part of ArmarX.
Eigen::VectorXf jointVelocity
Eigen::VectorXf jointPosition
Eigen::VectorXf desiredJointVelocity
Eigen::Vector6f cartesianVelTarget
for impedance control
Eigen::Vector6f currentTwist
Eigen::MatrixXf jpinv
pseudo inverse of the jacobi [nDoF, 6], for vel control
Eigen::MatrixXf jacobi
others jacobi matrix [6, nDoF]
Eigen::VectorXf qvelFiltered
for velocity control
Eigen::VectorXf desiredJointTorque
targets
float lambda
damping term for pseudo inverse of jacobian
Eigen::Vector6f currentForceTorque
force torque