AdmittanceController.cpp
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 TaskSpaceActiveImpedanceControl::ArmarXObjects::NJointTaskSpaceImpedanceController
17  * @author zhou ( you dot zhou at kit dot edu )
18  * @date 2018
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
23 #include "AdmittanceController.h"
24 
26 
27 
29 {
31 
32 
34  const RobotUnitPtr& robotUnit,
35  const NJointControllerConfigPtr& config,
36  const VirtualRobot::RobotPtr& robot):
38  mp::MPPool{}
39 {
40  const auto& cfg = bufferUserToAdditionalTask.getUpToDateReadBuffer();
41  createMPs(cfg.mpConfig);
42  ARMARX_IMPORTANT << "NJointTSImpedanceMPController construction done";
43 }
44 
45 
46 std::string NJointTSAdmittanceMPController::getClassName(const Ice::Current &) const
47 {
48  return "NJointTSAdmittanceMPController";
49 }
50 
51 
53 {
56  reconfigureMPs(cfg.mpConfig);
57 }
58 
59 
61 {
63  /// parse arguments and run mp
64  for (auto& _mp: mps)
65  {
66  if (_mp.second.mp->getClassName() == "TSMP")
67  {
68  mp::TSMPInputPtr in = std::dynamic_pointer_cast<mp::TSMPInput>(_mp.second.input);
69  in->pose = controller.tcp->getPoseInRootFrame();
70  in->vel = controller.bufferNonRtToOnPublish.getWriteBuffer().currentTwist;
71  in->deltaT = bufferRtToAdditionalTask.getUpToDateReadBuffer().deltaT;
72  }
73  }
74  runMPs();
75  /// set mp target to rt buffer
76  auto& rtConfig = bufferUserToRt.getWriteBuffer();
77  for (auto& _mp: mps)
78  {
79  if (_mp.second.mp->getClassName() == "TSMP")
80  {
81  mp::TSMPOutputPtr out = std::dynamic_pointer_cast<mp::TSMPOutput>(_mp.second.output);
82  rtConfig.desiredPose = out->pose;
83  rtConfig.desiredTwist = out->vel;
85  }
86  }
87 }
88 
90 {
91  ARMARX_IMPORTANT << "rt pre activate: reinitialize the mp input output, as well as the rt related buffer values";
92  VirtualRobot::RobotNodeSetPtr rns = rtGetRobot()->getRobotNodeSet(kinematicChainName);
93  Eigen::Matrix4f currentPose = rns->getTCP()->getPoseInRootFrame();
95  for (auto& _mp: mps)
96  {
97  if (_mp.second.mp->getClassName() == "TSMP")
98  {
99  ARMARX_IMPORTANT << "init input output data to/from MPs";
100 
101  std::dynamic_pointer_cast<mp::TSMPInput>(_mp.second.input)->pose = currentPose;
102  std::dynamic_pointer_cast<mp::TSMPOutput>(_mp.second.output)->pose = currentPose;
103  }
104  }
105 }
106 } /// namespace armarx::control::njoint_mp_controller::task_space
armarx::control::njoint_mp_controller::task_space::NJointTSAdmittanceMPController::bufferUserToAdditionalTask
TripleBuffer< BO > bufferUserToAdditionalTask
Definition: AdmittanceController.h:72
armarx::control::njoint_mp_controller::task_space::NJointTSAdmittanceMPController::additionalTask
void additionalTask() override
Definition: AdmittanceController.cpp:60
armarx::control::njoint_controller::task_space::NJointTaskspaceAdmittanceController::bufferRtToAdditionalTask
TripleBuffer< law::RobotStatus > bufferRtToAdditionalTask
Definition: AdmittanceController.h:109
armarx::TripleBuffer::getWriteBuffer
T & getWriteBuffer()
Definition: TripleBuffer.h:90
armarx::NJointControllerRegistration
Definition: NJointControllerRegistry.h:74
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:183
armarx::control::njoint_controller::task_space::NJointTaskspaceAdmittanceController::robotUnit
RobotUnitPtr robotUnit
Definition: AdmittanceController.h:119
armarx::TripleBuffer::commitWrite
void commitWrite()
Definition: TripleBuffer.h:146
armarx::control::njoint_mp_controller::task_space::NJointTSAdmittanceMPController::bufferUserToRt
TripleBuffer< BO > bufferUserToRt
Definition: AdmittanceController.h:73
armarx::control::common::mp::MPPool::runMPs
void runMPs()
Definition: MPPool.cpp:68
armarx::control::njoint_controller::task_space::NJointTaskspaceAdmittanceController::rtPreActivateController
void rtPreActivateController() override
This function is called before the controller is activated.
Definition: AdmittanceController.cpp:276
armarx::NJointControllerBase::rtGetRobot
const VirtualRobot::RobotPtr & rtGetRobot()
TODO make protected and use attorneys.
Definition: NJointControllerBase.h:845
armarx::control::njoint_controller::task_space::NJointTaskspaceAdmittanceController::additionalTask
virtual void additionalTask()
Definition: AdmittanceController.cpp:145
armarx::control::common::mp::TSMPOutputPtr
std::shared_ptr< TSMPOutput > TSMPOutputPtr
Definition: TSMP.h:47
controller
Definition: AddOperation.h:39
armarx::control::njoint_mp_controller::task_space::NJointTSAdmittanceMPController::updateConfig
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
Definition: AdmittanceController.cpp:52
armarx::control::njoint_controller::task_space::NJointTaskspaceAdmittanceController
Brief description of class NJointTaskspaceAdmittanceController.
Definition: AdmittanceController.h:52
AdmittanceController.h
armarx::control::njoint_mp_controller::task_space::NJointTSAdmittanceMPController::getClassName
std::string getClassName(const Ice::Current &) const override
Definition: AdmittanceController.cpp:46
armarx::control::njoint_mp_controller::task_space::NJointTSAdmittanceMPController::NJointTSAdmittanceMPController
NJointTSAdmittanceMPController(const RobotUnitPtr &robotUnit, const NJointControllerConfigPtr &config, const VirtualRobot::RobotPtr &)
Definition: AdmittanceController.cpp:33
utils.h
armarx::control::njoint_mp_controller::task_space
This file is part of ArmarX.
Definition: AdmittanceController.cpp:28
armarx::control::common::mp::MPPool::reconfigureMPs
void reconfigureMPs(const MP::MPListConfig &mpListConfig)
Definition: MPPool.cpp:62
armarx::aron::data::DictPtr
std::shared_ptr< Dict > DictPtr
Definition: Dict.h:41
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:601
armarx::control::njoint_mp_controller::task_space::NJointTSAdmittanceMPController::rtPreActivateController
void rtPreActivateController() override
This function is called before the controller is activated.
Definition: AdmittanceController.cpp:89
armarx::control::njoint_controller::task_space::NJointTaskspaceAdmittanceController::updateConfig
void updateConfig(const ::armarx::aron::data::dto::DictPtr &dto, const Ice::Current &iceCurrent=Ice::emptyCurrent) override
NJointController interface.
Definition: AdmittanceController.cpp:196
armarx::control::njoint_mp_controller::task_space::registrationControllerNJointTSAdmittanceMPController
NJointControllerRegistration< NJointTSAdmittanceMPController > registrationControllerNJointTSAdmittanceMPController("NJointTSAdmittanceMPController")
armarx::control::common::mp::MPPool
Definition: MPPool.h:45
armarx::control::common::mp::MPPool::mps
std::map< std::string, MPInputOutput > mps
Definition: MPPool.h:91
armarx::control::njoint_controller::task_space::NJointTaskspaceAdmittanceController::kinematicChainName
std::string kinematicChainName
variables
Definition: AdmittanceController.h:102
armarx::control::common::mp::TSMPInputPtr
std::shared_ptr< TSMPInput > TSMPInputPtr
Definition: TSMP.h:46
armarx::TripleBuffer::getUpToDateReadBuffer
const T & getUpToDateReadBuffer() const
Definition: TripleBuffer.h:108
VirtualRobot::RobotPtr
std::shared_ptr< class Robot > RobotPtr
Definition: Bus.h:18