ObjectCollisionAvoidanceImpedanceController.h
Go to the documentation of this file.
1/*
2 * This file is part of ArmarX.
3 *
4 * ArmarX is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation.
7 *
8 * ArmarX is distributed in the hope that it will be useful, but
9 * WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 *
16 * @package ...
17 * @author Jianfeng Gao ( jianfeng dot gao at kit dot edu )
18 * @date 2021
19 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20 * GNU General Public License
21 */
22
23#pragma once
24
25#include <VirtualRobot/VirtualRobot.h>
26
29
31#include <armarx/control/common/control_law/aron/ObjectCollisionAvoidanceControllerConfig.aron.generated.h>
32#include <armarx/control/common/control_law/aron/CollisionPrimitives.aron.generated.h>
33
37#include <armarx/control/njoint_controller/task_space/ControllerInterface.h>
39
40#include <simox/control/environment/CollisionRobot.h>
41#include <simox/control/geodesics/metric/inertia.h>
42#include <simox/control/impl/simox/robot/Robot.h>
43
44#include <Eigen/Core>
45
47{
48 /**
49 * @defgroup Library-NJointTaskspaceCollisionAvoidanceImpedanceController NJointTaskspaceCollisionAvoidanceImpedanceController
50 * @ingroup Library-RobotUnit-NJointControllers
51 * A description of the library NJointTaskspaceCollisionAvoidanceImpedanceController.
52 *
53 * @class NJointTaskspaceCollisionAvoidanceImpedanceController
54 * @ingroup Library-NJointTaskspaceCollisionAvoidanceImpedanceController
55 * @brief Brief description of class NJointTaskspaceCollisionAvoidanceImpedanceController.
56 *
57 * Detailed description of class NJointTaskspaceCollisionAvoidanceImpedanceController.
58 */
63 {
64 public:
65 using ConfigPtrT = ConfigurableNJointControllerConfigPtr;
67 common::control_law::arondto::ObjectCollisionAvoidanceTSImpedanceControllerConfig;
68
71 const NJointControllerConfigPtr& config,
72 const VirtualRobot::RobotPtr& robot);
73
74 std::string getClassName(const Ice::Current& = Ice::emptyCurrent) const override;
75
76 void rtRun(const IceUtil::Time& sensorValuesTimestamp,
77 const IceUtil::Time& timeSinceLastIteration) override;
78
79 void updateCollisionObjects(const std::string& primitiveSourceName,
80 const ::armarx::aron::data::dto::DictPtr& scene,
81 const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
82
83 /// NJointController interface for collision avoidance
84 void
85 updateCollisionAvoidanceConfig(const ::armarx::aron::data::dto::DictPtr& dto,
86 const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
88 getCollisionAvoidanceConfig(const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
89
92 const std::map<std::string, ConstControlDevicePtr>&,
93 const std::map<std::string, ConstSensorDevicePtr>&);
94
96
97 void updateConfig(const ::armarx::aron::data::dto::DictPtr& dto,
98 const Ice::Current& iceCurrent) override;
99 ::armarx::aron::data::dto::DictPtr getConfig(const Ice::Current& iceCurrent) override;
100
101 protected:
102 void limbRT(ArmPtr& arm, const double deltaT);
103 void onPublish(const SensorAndControl& sc,
104 const DebugDrawerInterfacePrx& drawer,
105 const DebugObserverInterfacePrx&) override;
106
108 const DebugObserverInterfacePrx& debugObs);
109
110 void collObjectPublish(const std::vector<hpp::fcl::CollisionObject>& objects,
111 const DebugObserverInterfacePrx& debugObs,
112 const std::string& layerSuffix);
113
115
116 /// NJointControllerBase interface
117 void rtPreActivateController() override;
118 void rtPostDeactivateController() override;
119
120 std::map<std::string, std::vector<hpp::fcl::CollisionObject>> collisionObjects;
122
123
124 private:
125 //TODO make private again: core::ObjectCollisionAvoidanceBasePtr coll = nullptr;
126 std::atomic_bool collReady{false};
127
128 CollisionCtrlCfg userCfgWithColl;
129
130 Eigen::Isometry3d matrixToIsometry(Eigen::Matrix<double, 4, 4> transformation);
131 };
132} // namespace armarx::control::njoint_controller::task_space
Provides a ready-to-use ArViz client arviz as member variable.
NJointTaskspaceImpedanceController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
void collObjectPublish(const std::vector< hpp::fcl::CollisionObject > &objects, const DebugObserverInterfacePrx &debugObs, const std::string &layerSuffix)
static WidgetDescription::WidgetPtr GenerateConfigDescription(const VirtualRobot::RobotPtr &, const std::map< std::string, ConstControlDevicePtr > &, const std::map< std::string, ConstSensorDevicePtr > &)
NJointTaskspaceObjectCollisionAvoidanceImpedanceController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
void updateCollisionAvoidanceConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
NJointController interface for collision avoidance.
void rtRun(const IceUtil::Time &sensorValuesTimestamp, const IceUtil::Time &timeSinceLastIteration) override
TODO make protected and use attorneys.
void updateCollisionObjects(const std::string &primitiveSourceName, const ::armarx::aron::data::dto::DictPtr &scene, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
void onPublish(const SensorAndControl &sc, const DebugDrawerInterfacePrx &drawer, const DebugObserverInterfacePrx &) override
void collLimbPublish(core::ObjectCollisionAvoidanceBase::NodeSetData &arm, const DebugObserverInterfacePrx &debugObs)
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent) override
armarx::aron::data::dto::Dict getCollisionAvoidanceConfig()
std::shared_ptr< class Robot > RobotPtr
Definition Bus.h:19
::IceInternal::Handle<::armarx::WidgetDescription::Widget > WidgetPtr
::IceInternal::Handle< Dict > DictPtr
std::shared_ptr< ObjectCollisionAvoidanceBase > ObjectCollisionAvoidanceBasePtr
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugObserverInterface > DebugObserverInterfacePrx
std::map< std::string, VariantBasePtr > StringVariantBaseMap
IceUtil::Handle< class RobotUnit > RobotUnitPtr
Definition FTSensor.h:34
::IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface > DebugDrawerInterfacePrx
detail::ControlThreadOutputBufferEntry SensorAndControl