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/CollisionAvoidanceVelConfig.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::CollisionAvoidanceVelConfig;
57 std::unordered_map<unsigned int, const simox::control::robot::NodeInterface*>;
74 Eigen::Vector3f
direction = Eigen::Vector3f::Zero();
75 Eigen::Vector3f
point1 = Eigen::Vector3f::Zero();
76 Eigen::Vector3f
point2 = Eigen::Vector3f::Zero();
259 unsigned int maxCollisionPairs,
260 VirtualRobot::RobotNodeSetPtr& rns);
264 void initJointLimtDataVec(
const Config&
c,
266 VirtualRobot::RobotNodeSetPtr& rns);
288 const Eigen::VectorXf& qpos,
289 const Eigen::VectorXf& qvelFiltered,
299 inline const simox::control::robot::NodeSetInterface&
306 const simox::control::robot::NodeSetInterface*
nodeSet;
307 const Eigen::MatrixXf
I;
317 const Eigen::VectorXf& qvelFiltered,
318 double deltaT)
const;
323 const Eigen::VectorXf& qpos,
324 const Eigen::VectorXf& qvelFiltered)
const;
331 const Eigen::VectorXf& qvelFiltered,
332 Eigen::VectorXf& jointTorque,
333 float distanceThreshold)
const;
340 const Eigen::VectorXf& qpos)
const;
void update(const Config &c, RtStatusForSafetyStrategy &rtStatus, double deltaT)
float collDistanceThreshold
float collDistanceThresholdInit
internal status of the controller, containing intermediate variables, mutable targets
Eigen::MatrixXf selfCollTempNullSpaceMatrix
float impTorqueRatio
intermediate projected torques via null space matrices ===== to remove the following
float jointVel
joint limit avoidance intermediate results
Eigen::MatrixXf jointLimNullSpace
double selfCollNullspaceTime
double collisionTorqueTime
Eigen::VectorXf finalTorque
double jointLimitNullspaceTime
Eigen::Vector4f objectCollisionNullSpaceWeights
double jointLimitTorqueTime
unsigned int objectCollDataIndex
Eigen::VectorXf torqueAcc
double objectCollNullspaceTime
Eigen::MatrixXf jointLimNullSpaceFiltered
Eigen::MatrixXf objectCollTempNullSpaceMatrix
Eigen::VectorXf jointLimitJointVel
Eigen::VectorXf jointLimitVelFiltered
float totalForceImpedance
Eigen::MatrixXf objectCollNullSpace
Eigen::VectorXf objectCollisionVelFiltered
Eigen::MatrixXf selfCollNullSpace
intermediate null space matrices ((self-)collision and joint limit avoidance)
Eigen::MatrixXf objectCollNullSpaceFiltered
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
targets
double timeSinceStart
Adaptive threshold for collision recovery.
Eigen::VectorXf selfCollisionJointVel
std::vector< JointRangeBufferZoneData > jointLimitData
joint limit avoidance initialization parameters
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::MatrixXf inertiaInverse
Eigen::VectorXf trajFollowJointVel
intermediate torque results
Eigen::VectorXf selfCollisionVelFiltered
Eigen::VectorXf objectCollisionJointVel
Eigen::Matrix4f globalPose
global pose
Eigen::MatrixXf nullSpaceAcc
for generating torques according to priority
Eigen::MatrixXf impedanceNullSpace
Eigen::Vector6f projForceImpedance
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 velocityLimit, double deltaT)
------------------------------— main rt-loop ---------------------------------------—
void calculateSelfCollisionVel(const Config &c, RtStatusForSafetyStrategy &rtStatus, RecoveryState &rState, const DistanceResults &collisionPairs, const CollisionRobotIndices &collisionRobotIndices, const Eigen::VectorXf &qvelFiltered, double deltaT) const
avoidance torque methods
void calculateJointLimitNullspace(const Config &c, RtStatusForSafetyStrategy &rtStatus, const Eigen::VectorXf &qpos) const
simox::control::dynamics::RBDLModel DynamicsModel
const simox::control::robot::NodeSetInterface * nodeSet
::simox::control::environment::DistanceResult DistanceResult
std::size_t numNodes() const
void calculateSelfCollisionNullspace(const Config &c, RtStatusForSafetyStrategy &rtStatus) const
caclulate null spaces
common::ft::arondto::FTConfig FTConfig
RecoveryState selfCollRecoveryState
void calculateJointLimitVel(const Config &c, RtStatusForSafetyStrategy &rtStatus, const Eigen::VectorXf &qpos, const Eigen::VectorXf &qvelFiltered) const
simox::control::simox::robot::Robot SCRobot
std::vector< DistanceResult > DistanceResults
std::unordered_map< unsigned int, const simox::control::robot::NodeInterface * > CollisionRobotIndices
~CollisionAvoidanceVelController()
CollisionAvoidanceVelController(const simox::control::robot::NodeSetInterface *nodeSet)
const simox::control::robot::NodeSetInterface & getNodeSet() const
void calculateCollisionJointVel(CollisionData &collDataVec, const Config &c, RtStatusForSafetyStrategy &rts, const CollisionRobotIndices &collisionRobotIndices, const Eigen::VectorXf &qvelFiltered, Eigen::VectorXf &jointTorque, float distanceThreshold) const
common::control_law::arondto::CollisionAvoidanceVelConfig Config
Matrix< float, 6, 1 > Vector6f
void validateConfigData(const arondto::CollisionAvoidanceConfig &cfg)
This file is part of ArmarX.
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...