ColAvoidVel.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 2025
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
30#include <armarx/control/common/common.aron.generated.h>
31#include <armarx/control/common/control_law/aron/ObjectCollisionAvoidanceVelControllerConfig.aron.generated.h>
34#include <armarx/control/njoint_controller/task_space/ControllerInterface.h>
35
37{
38 namespace law = armarx::control::common::control_law;
41
42 template <typename NJointControllerType, typename CollisionCtrlCfg>
44 virtual public TSColAvoidCtrlInterface,
45 public NJointControllerType,
47 {
48 public:
49 using ConfigPtrT = typename NJointControllerType::ConfigPtrT;
50 using ArmPtr = typename NJointControllerType::ArmPtr;
51
53 const NJointControllerConfigPtr& config,
54 const VirtualRobot::RobotPtr& robot);
55
56 // std::string getClassName(const Ice::Current& = Ice::emptyCurrent) const override;
57
58 void rtRun(const IceUtil::Time& sensorValuesTimestamp,
59 const IceUtil::Time& timeSinceLastIteration) override;
60
61 void updateCollisionObjects(const std::string& primitiveSourceName,
62 const ::armarx::aron::data::dto::DictPtr& scene,
63 const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
64
65 /// NJointController interface for collision avoidance
66 void
67 updateCollisionAvoidanceConfig(const ::armarx::aron::data::dto::DictPtr& dto,
68 const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
70 getCollisionAvoidanceConfig(const Ice::Current& iceCurrent = Ice::emptyCurrent) override;
71
73
74 void updateConfig(const ::armarx::aron::data::dto::DictPtr& dto,
75 const Ice::Current& iceCurrent) override;
76 ::armarx::aron::data::dto::DictPtr getConfig(const Ice::Current& iceCurrent) override;
77
78 void deleteCollisionObjects(const Ice::Current& iceCurrent) override;
79
80 protected:
81 void limbRT(ArmPtr& arm, const double deltaT);
82 void onPublish(const SensorAndControl& sc,
83 const DebugDrawerInterfacePrx& drawer,
84 const DebugObserverInterfacePrx&) override;
85
87 const DebugObserverInterfacePrx& debugObs);
88
89 void collObjectPublish(const std::vector<hpp::fcl::CollisionObject>& objects,
90 const DebugObserverInterfacePrx& debugObs,
91 const std::string& layerSuffix);
92
94
95
96 /// NJointControllerBase interface
97 void rtPreActivateController() override;
98 void rtPostDeactivateController() override;
99
100 std::map<std::string, std::vector<hpp::fcl::CollisionObject>> collisionObjects;
102
103
104 private:
105 //TODO make private again: CollAvoidBasePtr coll = nullptr;
106 std::atomic_bool collReady{false};
107
108 CollisionCtrlCfg userCfgWithColl;
109
110 // Eigen::Matrix4f globalPose = Eigen::Matrix4f::Identity();
111 // VirtualRobot::RobotNodePtr rootNode;
112 };
113
115 public NJointTSVelBasedColController<NJointTSVelController,
116 law::arondto::TSVelColConfigDict>
117 {
118 public:
120 const NJointControllerConfigPtr& config,
121 const VirtualRobot::RobotPtr& robot);
122 std::string getClassName(const Ice::Current& = Ice::emptyCurrent) const override;
123 };
124
125} // namespace armarx::control::njoint_controller::task_space
Provides a ready-to-use ArViz client arviz as member variable.
void collObjectPublish(const std::vector< hpp::fcl::CollisionObject > &objects, const DebugObserverInterfacePrx &debugObs, const std::string &layerSuffix)
void collLimbPublish(CollAvoidVelBase::NodeSetData &arm, const DebugObserverInterfacePrx &debugObs)
std::map< std::string, std::vector< hpp::fcl::CollisionObject > > collisionObjects
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
void updateCollisionObjects(const std::string &primitiveSourceName, const ::armarx::aron::data::dto::DictPtr &scene, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
static ConfigPtrT GenerateConfigFromVariants(const StringVariantBaseMap &values)
void onPublish(const SensorAndControl &sc, const DebugDrawerInterfacePrx &drawer, const DebugObserverInterfacePrx &) override
::armarx::aron::data::dto::DictPtr getConfig(const Ice::Current &iceCurrent) override
NJointTSVelBasedColController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
void rtPreActivateController() override
NJointControllerBase interface.
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent) override
std::string getClassName(const Ice::Current &=Ice::emptyCurrent) const override
NJointTSVelColController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &robot)
armarx::aron::data::dto::Dict getCollisionAvoidanceConfig()
std::shared_ptr< class Robot > RobotPtr
Definition Bus.h:19
::IceInternal::Handle< Dict > DictPtr
std::shared_ptr< ObjectCollisionAvoidanceVelBase > ObjectCollisionAvoidanceVelBasePtr
core::ObjectCollisionAvoidanceVelBase CollAvoidVelBase
Definition ColAvoidVel.h:39
core::ObjectCollisionAvoidanceVelBasePtr CollAvoidVelBasePtr
Definition ColAvoidVel.h:40
::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