|
|
#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.
Here is the call graph for this function: