TaskspaceImpedanceController.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 
33 
34 
36 {
37 
39  {
40  public:
41  /// you can set the following values from outside of the rt controller via Ice interfaces
42  struct Config
43  {
46 
47  Eigen::VectorXf kpNullspace;
48  Eigen::VectorXf kdNullspace;
49 
52  std::optional<Eigen::VectorXf> desiredNullspaceJointAngles;
53 
54  float torqueLimit;
55  float qvelFilter;
56  };
57 
58  /// internal status of the controller, containing intermediate variables, mutable targets
59  struct RtStatus
60  {
61  /// targets
62  Eigen::VectorXf desiredJointTorques;
64 
65  /// task space variables
67  };
68 
69  struct NonRtStatus
70  {
71  /// joint space variable
72  Eigen::VectorXf qpos;
73  Eigen::VectorXf qvel;
74 
75  /// task space variables
78 
81 
82  /// others
83  Eigen::MatrixXf jacobi;
84  Eigen::MatrixXf jtpinv;
85  };
86 
87  private:
88  /// joint space variables
89  int numOfJoints;
90  std::atomic_bool enablePreactivateInit{false};
91 
92  Eigen::MatrixXf I;
93 
94  VirtualRobot::DifferentialIKPtr ik;
95 
96  const float lambda = 2.0f;
97 
98  public:
100 
104 
105  VirtualRobot::RobotNodePtr tcp;
106 
107  void initialize(const VirtualRobot::RobotNodeSetPtr& rns);
108  void preactivateInit(const VirtualRobot::RobotNodeSetPtr& rns);
109  bool updateControlStatus(
110  const Config& cfg,
111  const RobotStatus& robotStatus);
112 
113  void run(const Config& cfg, ControlTarget& targets);
114  void firstRun();
115 
116  std::atomic<bool> isInitialized{false};
117  };
118 } /// namespace armarx::control::common::control_law
armarx::control::common::control_law::TaskspaceImpedanceController::Config::desiredPose
Eigen::Matrix4f desiredPose
Definition: TaskspaceImpedanceController.h:50
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::qvel
Eigen::VectorXf qvel
Definition: TaskspaceImpedanceController.h:73
armarx::control::common::control_law::TaskspaceImpedanceController::isInitialized
std::atomic< bool > isInitialized
Definition: TaskspaceImpedanceController.h:116
armarx::control::common::control_law::TaskspaceImpedanceController::RtStatus::forceImpedance
Eigen::Vector6f forceImpedance
task space variables
Definition: TaskspaceImpedanceController.h:66
common.h
armarx::control::common::control_law::TaskspaceImpedanceController::RtStatus::desiredPose
Eigen::Matrix4f desiredPose
Definition: TaskspaceImpedanceController.h:63
armarx::control::common::control_law::TaskspaceImpedanceController::RtStatus::desiredJointTorques
Eigen::VectorXf desiredJointTorques
targets
Definition: TaskspaceImpedanceController.h:62
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus
Definition: TaskspaceImpedanceController.h:69
armarx::control::common::control_law::TaskspaceImpedanceController::Config::qvelFilter
float qvelFilter
Definition: TaskspaceImpedanceController.h:55
armarx::control::common::control_law::TaskspaceImpedanceController::Config::desiredNullspaceJointAngles
std::optional< Eigen::VectorXf > desiredNullspaceJointAngles
Definition: TaskspaceImpedanceController.h:52
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::currentTwist
Eigen::Vector6f currentTwist
Definition: TaskspaceImpedanceController.h:77
armarx::control::common::control_law::TaskspaceImpedanceController::preactivateInit
void preactivateInit(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: TaskspaceImpedanceController.cpp:34
armarx::control::common::control_law::TaskspaceImpedanceController::bufferNonRtToUser
TripleBuffer< NonRtStatus > bufferNonRtToUser
Definition: TaskspaceImpedanceController.h:103
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::currentPose
Eigen::Matrix4f currentPose
task space variables
Definition: TaskspaceImpedanceController.h:76
armarx::control::common::control_law::TaskspaceImpedanceController::updateControlStatus
bool updateControlStatus(const Config &cfg, const RobotStatus &robotStatus)
Definition: TaskspaceImpedanceController.cpp:80
armarx::control::common::control_law::RobotStatus
Definition: common.h:30
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::jtpinv
Eigen::MatrixXf jtpinv
Definition: TaskspaceImpedanceController.h:84
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::qpos
Eigen::VectorXf qpos
joint space variable
Definition: TaskspaceImpedanceController.h:72
armarx::control::common::control_law
namespace armarx::control::common::ft
Definition: aron_conversions.cpp:62
ControlTarget1DoFActuator.h
armarx::control::common::control_law::TaskspaceImpedanceController::bufferRtToOnPublish
TripleBuffer< RtStatus > bufferRtToOnPublish
Definition: TaskspaceImpedanceController.h:99
armarx::control::common::control_law::TaskspaceImpedanceController::Config::kpImpedance
Eigen::Vector6f kpImpedance
Definition: TaskspaceImpedanceController.h:44
armarx::control::common::control_law::TaskspaceImpedanceController::bufferNonRtToRt
TripleBuffer< NonRtStatus > bufferNonRtToRt
Definition: TaskspaceImpedanceController.h:101
TripleBuffer.h
armarx::control::common::control_law::TaskspaceImpedanceController::Config::kpNullspace
Eigen::VectorXf kpNullspace
Definition: TaskspaceImpedanceController.h:47
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:601
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::desiredPose
Eigen::Matrix4f desiredPose
Definition: TaskspaceImpedanceController.h:79
armarx::control::common::control_law::TaskspaceImpedanceController::run
void run(const Config &cfg, ControlTarget &targets)
Definition: TaskspaceImpedanceController.cpp:135
armarx::control::common::control_law::TaskspaceImpedanceController
Definition: TaskspaceImpedanceController.h:38
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::jacobi
Eigen::MatrixXf jacobi
others
Definition: TaskspaceImpedanceController.h:83
armarx::control::common::control_law::TaskspaceImpedanceController::Config::kdImpedance
Eigen::Vector6f kdImpedance
Definition: TaskspaceImpedanceController.h:45
armarx::control::common::control_law::TaskspaceImpedanceController::Config::torqueLimit
float torqueLimit
Definition: TaskspaceImpedanceController.h:54
armarx::control::common::control_law::TaskspaceImpedanceController::tcp
VirtualRobot::RobotNodePtr tcp
Definition: TaskspaceImpedanceController.h:105
armarx::control::common::control_law::TaskspaceImpedanceController::NonRtStatus::desiredTwist
Eigen::Vector6f desiredTwist
Definition: TaskspaceImpedanceController.h:80
armarx::control::common::control_law::TaskspaceImpedanceController::Config::desiredTwist
Eigen::Vector6f desiredTwist
Definition: TaskspaceImpedanceController.h:51
armarx::control::common::control_law::TaskspaceImpedanceController::bufferNonRtToOnPublish
TripleBuffer< NonRtStatus > bufferNonRtToOnPublish
Definition: TaskspaceImpedanceController.h:102
Eigen::Matrix< float, 6, 1 >
armarx::control::common::control_law::TaskspaceImpedanceController::Config::kdNullspace
Eigen::VectorXf kdNullspace
Definition: TaskspaceImpedanceController.h:48
armarx::control::common::control_law::TaskspaceImpedanceController::firstRun
void firstRun()
Definition: TaskspaceImpedanceController.cpp:68
armarx::control::common::control_law::TaskspaceImpedanceController::RtStatus
internal status of the controller, containing intermediate variables, mutable targets
Definition: TaskspaceImpedanceController.h:59
armarx::control::common::control_law::ControlTarget
Definition: common.h:44
armarx::control::common::control_law::TaskspaceImpedanceController::Config
you can set the following values from outside of the rt controller via Ice interfaces
Definition: TaskspaceImpedanceController.h:42
SensorValue1DoFActuator.h
armarx::control::common::control_law::TaskspaceImpedanceController::initialize
void initialize(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: TaskspaceImpedanceController.cpp:20
armarx::TripleBuffer
A simple triple buffer for lockfree comunication between a single writer and a single reader.
Definition: TripleBuffer.h:71