Go to the documentation of this file.
24 #include <VirtualRobot/VirtualRobot.h>
28 #include <armarx/control/common/control_law/aron/CollisionAvoidanceConfig.aron.generated.h>
31 #include <armarx/control/common/ft/aron/FTConfig.aron.generated.h>
33 #include <simox/control/environment/DistanceResult.h>
34 #include <simox/control/robot/RobotInterface.h>
55 using SCRobot = ::simox::control::robot::RobotInterface;
59 using FTConfig = common::ft::arondto::FTConfig;
60 using Config = common::control_law::arondto::CollisionAvoidanceConfig;
77 Eigen::Vector3f
direction = Eigen::Vector3f::Zero();
78 Eigen::Vector3f
point1 = Eigen::Vector3f::Zero();
79 Eigen::Vector3f
point2 = Eigen::Vector3f::Zero();
226 const unsigned int nDoF,
227 const unsigned int maxCollisionPairs,
228 VirtualRobot::RobotNodeSetPtr& rns);
232 void initJointLimtDataVec(
const Config&
c,
233 const unsigned int nDoF,
234 VirtualRobot::RobotNodeSetPtr& rns);
242 RtStatusForSafetyStrategy& robotStatus,
246 const Eigen::VectorXf& qpos,
247 const Eigen::VectorXf& qvelFiltered,
253 return nodeSet->getSize();
256 inline const simox::control::robot::NodeSetInterface&
263 const simox::control::robot::NodeSetInterface* nodeSet;
264 const Eigen::MatrixXf I;
267 void calculateSelfCollisionTorque(
const Config&
c,
268 RtStatusForSafetyStrategy& rtStatus,
271 const Eigen::VectorXf& qvelFiltered)
const;
273 void calculateJointLimitTorque(
const Config&
c,
274 RtStatusForSafetyStrategy& rtStatus,
275 const Eigen::VectorXf& qpos,
276 const Eigen::VectorXf& qvelFiltered)
const;
279 void calculateSelfCollisionNullspace(
const Config&
c, RtStatusForSafetyStrategy& rtStatus)
const;
280 void calculateJointLimitNullspace(
const Config&
c,
281 RtStatusForSafetyStrategy& rtStatus,
282 const Eigen::VectorXf& qpos)
const;
std::vector< JointRangeBufferZoneData > jointLimitData
joint limit avoidance initialization parameters
Eigen::MatrixXd inertia
others
std::size_t numNodes() const
unsigned int collisionPairsNum
collision pair info
std::unordered_map< unsigned int, const simox::control::robot::NodeInterface * > CollisionRobotIndices
std::string jointName
for each joint, that has a limit, based on the config parameters: jointRangeBufferZone jointRangeBuff...
Eigen::MatrixXf tempNullSpaceMatrix
float projectedImpedanceForce
const simox::control::robot::NodeSetInterface & getNodeSet() const
Eigen::VectorXf jointLimitJointTorque
std::vector< DistanceResult > DistanceResults
MatrixXX< 4, 4, float > Matrix4f
Eigen::VectorXf projImpedanceJointTorque
intermediate projected torques via null space matrices
common::ft::arondto::FTConfig FTConfig
void validateConfigData(const arondto::CollisionAvoidanceConfig &cfg)
Eigen::Vector3f dirErrorImp
Eigen::VectorXf projectedJacT
Eigen::VectorXf desiredJointTorques
targets
Eigen::VectorXf projJointLimJointTorque
Eigen::VectorXf normalizedJacT
Eigen::VectorXf selfCollisionJointTorque
float qposZ1Low
null space parameters
Eigen::MatrixXf selfCollNullSpace
intermediate null space matrices (self-collision and joint limit avoidance)
Eigen::Vector3f direction
Eigen::VectorXf projSelfCollJointTorque
void run(const Config &c, RtStatusForSafetyStrategy &robotStatus, const DistanceResults &collisionPairs, const CollisionRobotIndices &collisionRobotIndices, DynamicsModel &dynamicsModel, const Eigen::VectorXf &qpos, const Eigen::VectorXf &qvelFiltered, float torqueLimit)
------------------------------— main rt-loop ---------------------------------------—
float localStiffnessJointLim
::simox::control::robot::RobotInterface SCRobot
Eigen::VectorXf kdImpedanceTorque
void Identity(MatrixXX< N, N, T > *a)
SelfCollisionData(unsigned int size)
Eigen::Vector4f jointLimitNullSpaceWeightsHigh
~CollisionAvoidanceController()
CollisionAvoidanceController(const simox::control::robot::NodeSetInterface *nodeSet)
simox::control::dynamics::RBDLModel DynamicsModel
double collisionPairTime
time status
double jointLimitNullspaceTime
Eigen::VectorXf impedanceJointTorque
intermediate torque results
float projTotalForceImpedance
This file is part of ArmarX.
Eigen::Vector4f selfCollisionNullSpaceWeights
self-collision avoidance initialization parameters
float totalForceImpedance
internal status of the controller, containing intermediate variables, mutable targets
double collisionTorqueTime
double jointLimitTorqueTime
Eigen::VectorXf selfCollisionTorqueFiltered
double selfCollNullspaceTime
float k1
self-collision avoidance null space intermediate results
Eigen::Matrix4f globalPose
global pose
void reset(const Config &c, const unsigned int nDoF, const unsigned int maxCollisionPairs, VirtualRobot::RobotNodeSetPtr &rns)
std::vector< SelfCollisionData > selfCollDataVec
distance results
Eigen::MatrixXf jointLimNullSpaceFiltered
common::control_law::arondto::CollisionAvoidanceConfig Config
Eigen::VectorXf jointLimitTorqueFiltered
Eigen::MatrixXf inertiaInverse
Eigen::Vector6f projForceImpedance
Eigen::Vector4f calculateTransitionWeights(float z1, float z2)
helper functions
Eigen::MatrixXf selfCollNullSpaceFiltered
Eigen::MatrixXf jointLimNullSpace
::simox::control::environment::DistanceResult DistanceResult
unsigned int activeCollPairsNum
Eigen::Vector4f jointLimitNullSpaceWeightsLow
float jointVel
joint limit avoidance intermediate results
unsigned int node1
the distances and projected jacobians from the generateSelfCollisionTorque() method are needed for th...