TaskspaceAdmittanceController.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  * @author Jianfeng Gao ( jianfeng dot gao at kit dot edu )
17  * @date 2022
18  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
19  * GNU General Public License
20  */
21 
22 #pragma once
23 
24 #include <VirtualRobot/Robot.h>
25 #include <VirtualRobot/IK/DifferentialIK.h>
26 
28 
31 
34 
35 
37 {
38 
40  {
41  public:
42  /// you can set the following values from outside of the rt controller via Ice interfaces
43  struct Config
44  {
47 
51 
52  Eigen::VectorXf kpNullspace;
53  Eigen::VectorXf kdNullspace;
54 
57  std::optional<Eigen::VectorXf> desiredNullspaceJointAngles;
58 
59  float torqueLimit;
60  float qvelFilter;
61 
62  /// force torque sensor config
64  };
65 
66  /// internal status of the controller, containing intermediate variables, mutable targets
67  struct RtStatus
68  {
69  /// targets
70  Eigen::VectorXf desiredJointTorques;
71  Eigen::VectorXf nullspaceTorque;
72 
73  /// variables that need to be kept locally by the rt thread
77 
81 
83 
84  /// task space variables
86  };
87 
88  struct NonRtStatus
89  {
90  /// joint space variable
91  Eigen::VectorXf qpos;
92  Eigen::VectorXf qvel;
93 
94  /// task space variables
97 
98  /// others
99  Eigen::MatrixXf jacobi;
100  Eigen::MatrixXf jtpinv;
101  };
102 
103  private:
104  /// joint space variables
105  unsigned int numOfJoints;
106  std::atomic_bool enablePreactivateInit{false};
107 
108  Eigen::MatrixXf I;
109 // Eigen::Matrix4f desiredPose;
110 // Eigen::Vector6f desiredTwist;
111 // Eigen::Vector6f kmAdmittance;
112 
113  VirtualRobot::DifferentialIKPtr ik;
114 
115  const float lambda = 2.0f;
116 
117  public:
119 
122 
123  VirtualRobot::RobotNodePtr tcp;
125 
126  void updateFT(const common::ft::FTSensor::FTConfig& c, double deltaT);
127  void initialize(const VirtualRobot::RobotNodeSetPtr& rns);
128  void preactivateInit(const VirtualRobot::RobotNodeSetPtr& rns);
129  bool updateControlStatus(
130  const Config& cfg,
131  const RobotStatus& robotStatus);
132 
133  void run(const Config& cfg, ControlTarget& targets, double deltaT);
134  void firstRun();
135 
136  std::atomic<bool> isInitialized{false};
137  };
138 } /// namespace armarx::control::common::control_law
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus
internal status of the controller, containing intermediate variables, mutable targets
Definition: TaskspaceAdmittanceController.h:67
armarx::control::common::control_law::TaskspaceAdmittanceController::firstRun
void firstRun()
Definition: TaskspaceAdmittanceController.cpp:164
armarx::control::common::control_law::TaskspaceAdmittanceController::NonRtStatus
Definition: TaskspaceAdmittanceController.h:88
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::virtualVel
Eigen::Vector6f virtualVel
Definition: TaskspaceAdmittanceController.h:75
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::kdImpedance
Eigen::Vector6f kdImpedance
Definition: TaskspaceAdmittanceController.h:46
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::nullspaceTorque
Eigen::VectorXf nullspaceTorque
Definition: TaskspaceAdmittanceController.h:71
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::desiredTwist
Eigen::Vector6f desiredTwist
Definition: TaskspaceAdmittanceController.h:79
armarx::control::common::control_law::TaskspaceAdmittanceController
Definition: TaskspaceAdmittanceController.h:39
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::kpAdmittance
Eigen::Vector6f kpAdmittance
Definition: TaskspaceAdmittanceController.h:48
common.h
armarx::control::common::control_law::TaskspaceAdmittanceController::NonRtStatus::jtpinv
Eigen::MatrixXf jtpinv
Definition: TaskspaceAdmittanceController.h:100
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::desiredPose
Eigen::Matrix4f desiredPose
Definition: TaskspaceAdmittanceController.h:55
FTSensor.h
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::desiredNullspaceJointAngles
std::optional< Eigen::VectorXf > desiredNullspaceJointAngles
Definition: TaskspaceAdmittanceController.h:57
armarx::control::common::control_law::TaskspaceAdmittanceController::NonRtStatus::currentTwist
Eigen::Vector6f currentTwist
Definition: TaskspaceAdmittanceController.h:96
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::kmAdmittance
Eigen::Vector6f kmAdmittance
Definition: TaskspaceAdmittanceController.h:50
armarx::control::common::control_law::TaskspaceAdmittanceController::bufferRtToOnPublish
TripleBuffer< RtStatus > bufferRtToOnPublish
Definition: TaskspaceAdmittanceController.h:118
c
constexpr T c
Definition: UnscentedKalmanFilterTest.cpp:43
armarx::control::common::control_law::TaskspaceAdmittanceController::ftsensor
common::ft::FTSensor ftsensor
Definition: TaskspaceAdmittanceController.h:124
armarx::control::common::control_law::TaskspaceAdmittanceController::NonRtStatus::jacobi
Eigen::MatrixXf jacobi
others
Definition: TaskspaceAdmittanceController.h:99
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::qvelFilter
float qvelFilter
Definition: TaskspaceAdmittanceController.h:60
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::forceImpedance
Eigen::Vector6f forceImpedance
task space variables
Definition: TaskspaceAdmittanceController.h:85
armarx::control::common::control_law::TaskspaceAdmittanceController::preactivateInit
void preactivateInit(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: TaskspaceAdmittanceController.cpp:123
armarx::control::common::control_law::TaskspaceAdmittanceController::NonRtStatus::qvel
Eigen::VectorXf qvel
Definition: TaskspaceAdmittanceController.h:92
armarx::control::common::control_law::RobotStatus
Definition: common.h:30
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::virtualPose
Eigen::Matrix4f virtualPose
variables that need to be kept locally by the rt thread
Definition: TaskspaceAdmittanceController.h:74
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::desiredTwist
Eigen::Vector6f desiredTwist
Definition: TaskspaceAdmittanceController.h:56
armarx::control::common::control_law
namespace armarx::control::common::ft
Definition: aron_conversions.cpp:62
armarx::control::common::control_law::TaskspaceAdmittanceController::bufferNonRtToRt
TripleBuffer< NonRtStatus > bufferNonRtToRt
Definition: TaskspaceAdmittanceController.h:120
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::kmAdmittance
Eigen::Vector6f kmAdmittance
Definition: TaskspaceAdmittanceController.h:80
ControlTarget1DoFActuator.h
armarx::control::common::control_law::TaskspaceAdmittanceController::Config
you can set the following values from outside of the rt controller via Ice interfaces
Definition: TaskspaceAdmittanceController.h:43
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::kpImpedance
Eigen::Vector6f kpImpedance
Definition: TaskspaceAdmittanceController.h:45
armarx::control::common::control_law::TaskspaceAdmittanceController::isInitialized
std::atomic< bool > isInitialized
Definition: TaskspaceAdmittanceController.h:136
armarx::control::common::control_law::TaskspaceAdmittanceController::tcp
VirtualRobot::RobotNodePtr tcp
Definition: TaskspaceAdmittanceController.h:123
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::currentForceTorque
Eigen::Vector6f currentForceTorque
Definition: TaskspaceAdmittanceController.h:82
TripleBuffer.h
armarx::control::common::control_law::TaskspaceAdmittanceController::bufferNonRtToOnPublish
TripleBuffer< NonRtStatus > bufferNonRtToOnPublish
Definition: TaskspaceAdmittanceController.h:121
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:601
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::ftConfig
common::ft::FTSensor::FTConfig ftConfig
force torque sensor config
Definition: TaskspaceAdmittanceController.h:63
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::kdNullspace
Eigen::VectorXf kdNullspace
Definition: TaskspaceAdmittanceController.h:53
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::virtualAcc
Eigen::Vector6f virtualAcc
Definition: TaskspaceAdmittanceController.h:76
armarx::control::common::control_law::TaskspaceAdmittanceController::run
void run(const Config &cfg, ControlTarget &targets, double deltaT)
Definition: TaskspaceAdmittanceController.cpp:260
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::kdAdmittance
Eigen::Vector6f kdAdmittance
Definition: TaskspaceAdmittanceController.h:49
armarx::control::common::control_law::TaskspaceAdmittanceController::NonRtStatus::currentPose
Eigen::Matrix4f currentPose
task space variables
Definition: TaskspaceAdmittanceController.h:95
Eigen::Matrix< float, 6, 1 >
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::desiredJointTorques
Eigen::VectorXf desiredJointTorques
targets
Definition: TaskspaceAdmittanceController.h:70
armarx::control::common::control_law::TaskspaceAdmittanceController::updateControlStatus
bool updateControlStatus(const Config &cfg, const RobotStatus &robotStatus)
Definition: TaskspaceAdmittanceController.cpp:184
armarx::control::common::control_law::ControlTarget
Definition: common.h:44
armarx::control::common::control_law::TaskspaceAdmittanceController::NonRtStatus::qpos
Eigen::VectorXf qpos
joint space variable
Definition: TaskspaceAdmittanceController.h:91
armarx::control::common::control_law::TaskspaceAdmittanceController::RtStatus::desiredPose
Eigen::Matrix4f desiredPose
Definition: TaskspaceAdmittanceController.h:78
armarx::control::common::control_law::TaskspaceAdmittanceController::initialize
void initialize(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: TaskspaceAdmittanceController.cpp:21
armarx::control::common::ft::FTSensor
Definition: FTSensor.h:44
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::kpNullspace
Eigen::VectorXf kpNullspace
Definition: TaskspaceAdmittanceController.h:52
SensorValue1DoFActuator.h
armarx::TripleBuffer
A simple triple buffer for lockfree comunication between a single writer and a single reader.
Definition: TripleBuffer.h:71
armarx::control::common::ft::FTSensor::FTConfig
Definition: FTSensor.h:47
armarx::control::common::control_law::TaskspaceAdmittanceController::Config::torqueLimit
float torqueLimit
Definition: TaskspaceAdmittanceController.h:59
armarx::control::common::control_law::TaskspaceAdmittanceController::updateFT
void updateFT(const common::ft::FTSensor::FTConfig &c, double deltaT)
Definition: TaskspaceAdmittanceController.cpp:235