25#include <VirtualRobot/VirtualRobot.h>
27#include <simox/control/dynamics/RBDLModel.h>
28#include <simox/control/environment/CollisionRobotInterface.h>
29#include <simox/control/environment/fwd.h>
30#include <simox/control/impl/simox/robot/Robot.h>
31#include <simox/control/robot/RobotInterface.h>
36#include <armarx/control/common/control_law/aron/CollisionAvoidanceConfig.aron.generated.h>
41 namespace law = armarx::control::common::control_law;
58 using SCRobot = law::CollisionAvoidanceController::SCRobot;
61 using CtrlConfig = law::arondto::CollisionAvoidanceConfig;
62 using Config = law::arondto::CollisionAvoidanceConfigDict;
63 using RtStatus = law::CollisionAvoidanceController::RtStatusForSafetyStrategy;
74 VirtualRobot::RobotNodeSetPtr
rtRNS;
88 const std::string& robotNodeSetName,
92 const std::vector<size_t>& velCtrlIndex);
94 void reset(
const Config&
c,
const std::vector<size_t>& velCtrlIndex);
99 const std::map<std::string, std::vector<size_t>>& velCtrlIndices);
104 const Eigen::VectorXf& qpos,
105 const Eigen::VectorXf& qvelFiltered,
107 const Eigen::VectorXf& impedanceJointTorque,
126 std::vector<std::string>
135 simox::control::environment::CompDistArgs{.nearestPoints =
true,
136 .individualColObjects =
true};
141 float preFilterDistance = 0.6;
142 std::map<std::string, std::vector<size_t>> velCtrlIdx;
145 const bool reduceModel =
false;
147 simox::control::environment::CompDistArgs selfColAvoidanceArgs;
150 VirtualRobot::RobotNodeSetPtr rtRobotNodeSet;
A simple triple buffer for lockfree comunication between a single writer and a single reader.
std::vector< std::string > actuatedJointNames
const simox::control::environment::CompDistArgs compDistArgs
!
simox::control::dynamics::RBDLModel DynamicsModel
law::CollisionAvoidanceController::DistanceResults DistanceResults
std::vector< unsigned int > translationJointIndex
std::unique_ptr< CollisionRobot > collisionRobot
armarx::TripleBuffer< Config > bufferCfgUserToRT
DistanceResults collisionPairs
law::CollisionAvoidanceController::CollisionRobotIndices CollisionRobotIndices
Eigen::VectorXd qposActuatedJoints
TODO, rename to actuatedJointNames, Not needed anymore?
law::CollisionAvoidanceController::RtStatusForSafetyStrategy RtStatus
virtual void rtCollisionChecking()
simox::control::environment::CollisionRobotInterface CollisionRobot
std::unique_ptr< SCRobot > scRobot
void rtLimbControllerRun(const std::string &robotNodeSetName, const Eigen::VectorXf &qpos, const Eigen::VectorXf &qvelFiltered, float torqueLimit, const Eigen::VectorXf &impedanceJointTorque, double deltaT)
void setUserCfg(const Config &cfg)
CollisionAvoidanceBase(const VirtualRobot::RobotPtr &rtRobot, const Config &cfg, const std::map< std::string, std::vector< size_t > > &velCtrlIndices)
law::CollisionAvoidanceController::SCRobot SCRobot
law::arondto::CollisionAvoidanceConfigDict Config
void validateConfigData(const Config &cfg)
void updateRtConfigFromUser()
VirtualRobot::RobotNodeSetPtr scRobotNodeSet
law::arondto::CollisionAvoidanceConfig CtrlConfig
virtual ~CollisionAvoidanceBase()
std::map< std::string, NodeSetData > collLimb
law::CollisionAvoidanceController::RecoveryState RecoveryState
std::shared_ptr< class Robot > RobotPtr
This file is part of ArmarX.
This file is part of ArmarX.
std::shared_ptr< CollisionAvoidanceBase > CollisionAvoidanceBasePtr
CollisionRobotIndices collisionRobotIndices
RecoveryState rStateSelfColl
VirtualRobot::RobotNodeSetPtr rtRNS
!!!!!!! Note that, all the data below should only be accessed in rt thread !!!!!!!
void reset(const Config &c, const std::vector< size_t > &velCtrlIndex)
std::unique_ptr< DynamicsModel > dynamicsModel
self-collision avoidance
armarx::TripleBuffer< RtStatus > bufferRTtoPublish
NodeSetData(const VirtualRobot::RobotPtr &rtRobot, const std::string &robotNodeSetName, const SCRobot &scRobot, const DistanceResults &collisionPairs, const Config &c, const std::vector< size_t > &velCtrlIndex)
const DistanceResults & collisionPairs