Go to the documentation of this file.
24 #include <VirtualRobot/IK/DifferentialIK.h>
25 #include <VirtualRobot/Robot.h>
32 #include <armarx/control/common/control_law/aron/SafetyTaskspaceImpedanceControllerConfig.aron.generated.h>
35 #include <armarx/control/common/ft/aron/FTConfig.aron.generated.h>
37 #include <simox/control/environment/CollisionRobot.h>
38 #include <simox/control/geodesics/metric/inertia.h>
39 #include <simox/control/impl/simox/robot/Robot.h>
40 #include <simox/control/robot/NodeInterface.h>
48 using InertiaPtr = std::shared_ptr<simox::control::geodesics::metric::Inertia>;
50 std::shared_ptr<std::vector<simox::control::environment::DistanceResult>>;
51 using SimoxRobotPtr = std::shared_ptr<simox::control::simox::robot::Robot>;
52 using FTConfig = common::ft::arondto::FTConfig;
53 using Config = common::control_law::arondto::SafetyTaskspaceImpedanceControllerConfig;
55 common::control_law::arondto::SafetyTaskspaceImpedanceControllerConfigDict;
120 const simox::control::robot::NodeInterface*
node;
204 const Eigen::Vector3f&
point,
326 std::atomic_bool enablePreactivateInit{
false};
330 VirtualRobot::DifferentialIKPtr ik;
332 const float lambda = 2.0f;
334 simox::control::robot::NodeSetInterface* simoxNodeSet;
338 void calculateSelfCollisionTorque(
341 std::shared_ptr<std::vector<::simox::control::environment::DistanceResult>>
343 std::shared_ptr<std::vector<int>> pointsOnArm,
344 int pointsOnArmIndex,
345 std::vector<std::string> selfCollisionNodes);
346 void calculateJointLimitTorque(
Config&
c, RtStatus& rtStatus);
349 void calculateSelfCollisionNullspace(
Config&
c, RtStatus& rtStatus);
350 void calculateJointLimitNullspace(
Config&
c, RtStatus& rtStatus);
353 Eigen::Vector4f calculateTransitionWeights(
float z1,
float z2);
357 VirtualRobot::RobotNodePtr
tcp;
362 void initialize(
const VirtualRobot::RobotNodeSetPtr& rns,
363 const VirtualRobot::RobotNodeSetPtr& rtRns,
371 std::shared_ptr<std::vector<int>>& pointsOnArm,
372 int pointsOnArmIndex,
374 std::vector<std::string>& selfCollisionNodes);
std::string nodeName
the distances and projected jacobians from the generateSelfCollisionTorque() method are needed for th...
std::shared_ptr< simox::control::geodesics::metric::Inertia > InertiaPtr
void setDistValues(std::string nodeName, std::string otherName, float minDistance)
double jointLimitNullspaceTime
double collisionPairTime
time status
std::vector< selfCollisionData > selfCollDataVec
selfCollisionData(int size)
Eigen::VectorXf normalizedJacT
Eigen::VectorXf jointLimitTorqueFiltered
Eigen::Vector3f dirErrorImp
Eigen::VectorXf jointLimitJointTorque
Eigen::VectorXf impedanceJointTorque
intermediate torque results
Eigen::Vector3f direction
void preactivateInit(const VirtualRobot::RobotNodeSetPtr &rns, Config &c, RtStatus &rtStatus)
Eigen::MatrixXf inertiaInverse
Eigen::Vector6f forceImpedance
task space variables
common::control_law::arondto::SafetyTaskspaceImpedanceControllerConfigDict ConfigDict
Eigen::VectorXf nullspaceTorque
Eigen::Vector6f kdForceImpedance
float torsoJointValuef
other actuated joint debug info
Eigen::VectorXd setActuatedJointValues
Eigen::Vector6f currentTwist
float projectedImpedanceForce
Eigen::Matrix3f poseDiffMatImp
intermediate impedance results
void run(Config &c, RtStatus &robotStatus, DistanceResultsPtr &collisionPairs, std::shared_ptr< std::vector< int >> &pointsOnArm, int pointsOnArmIndex, InertiaPtr &inertiaInstance, std::vector< std::string > &selfCollisionNodes)
------------------------------— main rt-loop ---------------------------------------—
Eigen::MatrixXf tempNullSpaceMatrix
const simox::control::robot::NodeInterface * node
self-collision avoidance intermediate results
Eigen::MatrixXf jointLimNullSpace
double selfCollNullspaceTime
Eigen::VectorXf qpos
current status
float projTotalForceImpedance
Eigen::Vector6f projForceImpedance
Eigen::VectorXd getActuatedJointValues
std::vector< jointRangeBufferZoneData > jointLimitData
Eigen::MatrixXf jointLimNullSpaceFiltered
float k1
self-collision avoidance null space intermediate results
double jointLimitTorqueTime
internal status of the controller, containing intermediate variables, mutable targets
void setCalcValues(const Eigen::MatrixXf &jacobian, float repulsiveForce, float localStiffness, const Eigen::VectorXf &projectedJacT, float distanceVelocity, const Eigen::Vector3f &direction, const Eigen::Vector3f &point, float damping, float projectedMass, float desiredNSColl)
double collisionTorqueTime
std::vector< selfCollisionData > evalData
jointRangeBufferZoneData()
Eigen::VectorXf desiredJointTorques
targets
Eigen::VectorXf projSelfCollJointTorque
common::control_law::arondto::SafetyTaskspaceImpedanceControllerConfig Config
Eigen::VectorXf kdImpedanceTorque
Eigen::Vector4f jointLimitNullSpaceWeightsHigh
Eigen::Matrix4f currentPose
VirtualRobot::RobotNodePtr rtTCP
This file is part of ArmarX.
Eigen::Vector6f currentForceTorque
force torque
common::ft::arondto::FTConfig FTConfig
std::shared_ptr< std::vector< simox::control::environment::DistanceResult > > DistanceResultsPtr
std::shared_ptr< simox::control::simox::robot::Robot > SimoxRobotPtr
simox::control::environment::DistanceResult activeDistPair
simox::control::Pose localTransformation
Eigen::MatrixXf selfCollNullSpaceFiltered
Eigen::Vector4f selfCollisionNullSpaceWeights
self-collision avoidance initialization parameters
MatrixXX< 3, 3, float > Matrix3f
Eigen::VectorXf projImpedanceJointTorque
intermediate projected torques via null space matrices
MatrixXX< 4, 4, float > Matrix4f
Eigen::VectorXf qvelFiltered
Eigen::VectorXf jointDampingTorque
joint limit avoidance initialization parameters
VirtualRobot::RobotNodePtr tcp
void initialize(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodeSetPtr &rtRns, SimoxRobotPtr &simoxControlRobot)
float totalForceImpedance
Eigen::VectorXf projJointLimJointTorque
Eigen::Vector6f poseErrorImp
float qposZ1Low
null space parameters
Eigen::MatrixXf jacobi
others
int collisionPairsNum
collision pair info
float jointVel
joint limit avoidance intermediate results
Eigen::VectorXf selfCollisionTorqueFiltered
Eigen::VectorXf selfCollisionJointTorque
Eigen::VectorXf projectedJacT
Eigen::Vector4f jointLimitNullSpaceWeightsLow
float localStiffnessJointLim
std::string jointName
for each joint, that has a limit, based on the config parameters: jointRangeBufferZone jointRangeBuff...
Eigen::MatrixXf selfCollNullSpace
intermediate null space matrices (self-collision and joint limit avoidance)
common::ft::FTSensor ftsensor
Eigen::Matrix4f desiredPose