24#include <VirtualRobot/VirtualRobot.h>
26#include <simox/control/environment/DistanceResult.h>
27#include <simox/control/impl/simox/robot/Robot.h>
28#include <simox/control/robot/RobotInterface.h>
32#include <armarx/control/common/control_law/aron/CollisionAvoidanceConfig.aron.generated.h>
35#include <armarx/control/common/ft/aron/FTConfig.aron.generated.h>
50 using SCRobot = simox::control::simox::robot::Robot;
54 using FTConfig = common::ft::arondto::FTConfig;
55 using Config = common::control_law::arondto::CollisionAvoidanceConfig;
57 std::unordered_map<unsigned int, const simox::control::robot::NodeInterface*>;
73 Eigen::Vector3f
direction = Eigen::Vector3f::Zero();
74 Eigen::Vector3f
point1 = Eigen::Vector3f::Zero();
75 Eigen::Vector3f
point2 = Eigen::Vector3f::Zero();
148 void run(Eigen::VectorXf& jointTorque,
float jointVelLimit,
const TSCtrlRtStatus& rts);
149 void reset(
size_t nDoFNodeSet,
size_t nDoFVelocity);
273 unsigned int maxCollisionPairs,
274 VirtualRobot::RobotNodeSetPtr& rns,
275 const std::vector<size_t>& velCtrlIndex);
279 void initJointLimtDataVec(
const Config&
c,
281 VirtualRobot::RobotNodeSetPtr& rns);
302 const Eigen::VectorXf& qpos,
303 const Eigen::VectorXf& qvelFiltered,
310 return nodeSet_->getSize();
313 inline const simox::control::robot::NodeSetInterface&
320 const simox::control::robot::NodeSetInterface* nodeSet_;
321 const Eigen::MatrixXf identityMat;
324 const Eigen::MatrixXf&
332 RtStatusForSafetyStrategy& rtStatus,
333 RecoveryState& rState,
336 const Eigen::VectorXf& qvelFiltered,
337 double deltaT)
const;
340 RtStatusForSafetyStrategy& rtStatus,
341 const Eigen::VectorXf& qpos,
342 const Eigen::VectorXf& qvelFiltered)
const;
346 RtStatusForSafetyStrategy& rts,
348 const Eigen::VectorXf& qvelFiltered,
349 Eigen::VectorXf& jointTorque,
350 float distanceThresholdRaw,
351 float distanceThreshold)
const;
355 RtStatusForSafetyStrategy& rtStatus)
const;
357 RtStatusForSafetyStrategy& rtStatus,
358 const Eigen::VectorXf& qpos)
const;
internal status of the controller, containing intermediate variables, mutable targets
Eigen::VectorXf objectCollisionTorqueFiltered
Eigen::MatrixXf selfCollTempNullSpaceMatrix
float jointVel
joint limit avoidance intermediate results
Eigen::MatrixXf jointLimNullSpace
AdmittanceInterface jointLimAdmInterface
std::vector< size_t > velCtrlIdx
admittance interface for velocity controlled joint
Eigen::VectorXf projCollJointTorque
double selfCollNullspaceTime
double collisionTorqueTime
Eigen::VectorXf projJointLimJointTorque
AdmittanceInterface objColAdmInterface
Eigen::VectorXf finalTorque
double jointLimitNullspaceTime
Eigen::Vector4f objectCollisionNullSpaceWeights
double jointLimitTorqueTime
AdmittanceInterface selfColAdmInterface
unsigned int objectCollDataIndex
Eigen::VectorXf torqueAcc
Eigen::VectorXf jointLimitJointTorque
double objectCollNullspaceTime
Eigen::MatrixXf jointLimNullSpaceFiltered
Eigen::MatrixXf objectCollTempNullSpaceMatrix
Eigen::VectorXf jointLimitJointVel
Eigen::VectorXf impedanceJointTorque
intermediate torque results
float totalForceImpedance
Eigen::MatrixXf objectCollNullSpace
Eigen::MatrixXf selfCollNullSpace
intermediate null space matrices ((self-)collision and joint limit avoidance)
Eigen::MatrixXf objectCollNullSpaceFiltered
Eigen::VectorXf selfCollisionTorqueFiltered
Eigen::VectorXf projImpedanceJointTorque
intermediate projected torques via null space matrices
float objectCollK1
object collision avoidance null space intermediate results
Eigen::VectorXf objectCollNormalizedJacT
Eigen::Vector4f selfCollisionNullSpaceWeights
collision avoidance initialization parameters
unsigned int collisionPairsNum
collision pair info
float projTotalForceImpedance
Eigen::MatrixXf selfCollNullSpaceFiltered
Eigen::VectorXf desiredJointVel
double timeSinceStart
Adaptive threshold for collision recovery.
Eigen::VectorXf selfCollisionJointVel
for admittance interface
std::vector< JointRangeBufferZoneData > jointLimitData
joint limit avoidance initialization parameters
Eigen::VectorXf selfCollisionJointTorque
Eigen::VectorXf desiredJointTorques
targets
unsigned int activeCollPairsNum
float localStiffnessJointLim
Eigen::Vector3f dirErrorImp
double collisionPairTime
time status
Eigen::VectorXf selfCollNormalizedJacT
void rtPreActivate(const Config &c)
float selfCollK1
self collision avoidance null space intermediate results
std::vector< CollisionData > collDataVec
distance results
Eigen::MatrixXd inertia
others
Eigen::VectorXf jointLimitTorqueFiltered
Eigen::MatrixXf inertiaInverse
Eigen::VectorXf objectCollisionJointTorque
Eigen::VectorXf objectCollisionJointVel
Eigen::Matrix4f globalPose
global pose
Eigen::MatrixXf nullSpaceAcc
for generating torques according to priority
Eigen::MatrixXf impedanceNullSpace
Eigen::VectorXf kdImpedanceTorque
Eigen::Vector6f projForceImpedance
void calculateJointLimitNullspace(const Config &c, RtStatusForSafetyStrategy &rtStatus, const Eigen::VectorXf &qpos) const
const Eigen::MatrixXf & getIdentityMat() const
simox::control::dynamics::RBDLModel DynamicsModel
::simox::control::environment::DistanceResult DistanceResult
void calculateJointLimitTorque(const Config &c, RtStatusForSafetyStrategy &rtStatus, const Eigen::VectorXf &qpos, const Eigen::VectorXf &qvelFiltered) const
std::size_t numNodes() const
void calculateSelfCollisionNullspace(const Config &c, RtStatusForSafetyStrategy &rtStatus) const
caclulate null spaces
common::ft::arondto::FTConfig FTConfig
simox::control::simox::robot::Robot SCRobot
std::vector< DistanceResult > DistanceResults
CollisionAvoidanceController(const simox::control::robot::NodeSetInterface *nodeSet)
~CollisionAvoidanceController()
std::unordered_map< unsigned int, const simox::control::robot::NodeInterface * > CollisionRobotIndices
void calculateCollisionTorque(CollisionData &collDataVec, const Config &c, RtStatusForSafetyStrategy &rts, const CollisionRobotIndices &collisionRobotIndices, const Eigen::VectorXf &qvelFiltered, Eigen::VectorXf &jointTorque, float distanceThresholdRaw, float distanceThreshold) const
void calculateSelfCollisionTorque(const Config &c, RtStatusForSafetyStrategy &rtStatus, RecoveryState &rState, const DistanceResults &collisionPairs, const CollisionRobotIndices &collisionRobotIndices, const Eigen::VectorXf &qvelFiltered, double deltaT) const
avoidance torque methods
const simox::control::robot::NodeSetInterface & getNodeSet() const
common::control_law::arondto::CollisionAvoidanceConfig Config
void run(const Config &c, RtStatusForSafetyStrategy &robotStatus, RecoveryState &rStateSelfColl, const DistanceResults &collisionPairs, const CollisionRobotIndices &collisionRobotIndices, DynamicsModel &dynamicsModel, const Eigen::VectorXf &qpos, const Eigen::VectorXf &qvelFiltered, float torqueLimit, double deltaT)
------------------------------— main rt-loop ---------------------------------------—
Matrix< float, 6, 1 > Vector6f
void validateConfigData(const arondto::CollisionAvoidanceConfig &cfg)
This file is part of ArmarX.
void run(Eigen::VectorXf &jointTorque, float jointVelLimit, const TSCtrlRtStatus &rts)
Eigen::VectorXf projectedJacT
CollisionData(unsigned int size)
Eigen::Vector3f direction
float projectedImpedanceForce
unsigned int node1
the distances and projected jacobians from the generateSelfCollisionTorque() method are needed for th...
float qposZ1Low
null space parameters
Eigen::Vector4f jointLimitNullSpaceWeightsLow
Eigen::Vector4f jointLimitNullSpaceWeightsHigh
std::string jointName
for each joint, that has a limit, based on the config parameters: jointRangeBufferZone jointRangeBuff...
void update(const Config &c, RtStatusForSafetyStrategy &rtStatus, double deltaT)
float collDistanceThreshold
float collDistanceThresholdInit