|
#include <armarx/control/common/control_law/CollisionAvoidance.h>
Classes | |
struct | JointRangeBufferZoneData |
class | RtStatusForSafetyStrategy |
internal status of the controller, containing intermediate variables, mutable targets More... | |
struct | SelfCollisionData |
Public Types | |
using | CollisionRobotIndices = std::unordered_map< unsigned int, const simox::control::robot::NodeInterface * > |
using | Config = common::control_law::arondto::CollisionAvoidanceConfig |
using | DistanceResult = ::simox::control::environment::DistanceResult |
using | DistanceResults = std::vector< DistanceResult > |
using | DynamicsModel = simox::control::dynamics::RBDLModel |
using | FTConfig = common::ft::arondto::FTConfig |
using | SCRobot = ::simox::control::robot::RobotInterface |
Public Member Functions | |
CollisionAvoidanceController (const simox::control::robot::NodeSetInterface *nodeSet) | |
const simox::control::robot::NodeSetInterface & | getNodeSet () const |
std::size_t | numNodes () const |
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 ---------------------------------------— More... | |
~CollisionAvoidanceController () | |
Definition at line 52 of file CollisionAvoidance.h.
using CollisionRobotIndices = std::unordered_map<unsigned int, const simox::control::robot::NodeInterface*> |
Definition at line 61 of file CollisionAvoidance.h.
using Config = common::control_law::arondto::CollisionAvoidanceConfig |
Definition at line 60 of file CollisionAvoidance.h.
using DistanceResult = ::simox::control::environment::DistanceResult |
Definition at line 56 of file CollisionAvoidance.h.
using DistanceResults = std::vector<DistanceResult> |
Definition at line 57 of file CollisionAvoidance.h.
using DynamicsModel = simox::control::dynamics::RBDLModel |
Definition at line 58 of file CollisionAvoidance.h.
using FTConfig = common::ft::arondto::FTConfig |
Definition at line 59 of file CollisionAvoidance.h.
using SCRobot = ::simox::control::robot::RobotInterface |
Definition at line 55 of file CollisionAvoidance.h.
CollisionAvoidanceController | ( | const simox::control::robot::NodeSetInterface * | nodeSet | ) |
Definition at line 30 of file CollisionAvoidance.cpp.
|
inline |
Definition at line 257 of file CollisionAvoidance.h.
|
inline |
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 ---------------------------------------—
--------------------------— inertia calculations -----------------------------------------------—
--------------------------— safety constraints -----------------------------------------------—
------------------------— apply EMA low pass filter --------------------------------------------—
filter safety constraint values using EMA low pass filter
assign filtered values
--------------------------— hierarchical control -----------------------------------------------— The following control hierarchies are considered:
three tasks in hierarchy: "enableSelfCollisionAvoidance": true, "enableJointLimitAvoidance": true
flag: "samePriority": true same priority: torque_coll + torque_jl + torque_imp
flag: "topPrioritySelfCollisionAvoidance": true, "samePriority": false self-coll avoidance on top: torque_coll -> torque_jl -> torque_imp
flag: "topPriorityJointLimitAvoidance": true, "samePriority": false joint limit avoidance on top: torque_jl -> torque_coll -> torque_imp
flag: "topPrioritySelfCollisionAvoidance": false, "topPriorityJointLimitAvoidance": false, "samePriority": false (torque_coll + torque_jl) -> torque_imp self-coll and joint limit avoidance on same priority level:
two tasks in hierarchy:
"enableSelfCollisionAvoidance": true, "enableJointLimitAvoidance": false self-coll avoidance on top: torque_coll -> torque_imp
"enableSelfCollisionAvoidance": false, "enableJointLimitAvoidance": true joint limit avoidance on top: torque_jl -> torque_imp
one task in hierarchy (impedance control):
"enableSelfCollisionAvoidance": false, "enableJointLimitAvoidance": false only impedance control: torque_imp
three tasks in hierarchy considered
impedance control and self-collision avoidance
impedance control and joint limit avoidance
plain impedance control
----------------------— write impedance forces to buffer --------------------------------------—
--------------------------— write torque target -----------------------------------------------—
Definition at line 498 of file CollisionAvoidance.cpp.