TaskspaceMixedImpedanceVelocityController.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 2024
18 * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
19 * GNU General Public License
20 */
21
22#pragma once
23
24#include <Eigen/Core>
25
26#include <VirtualRobot/VirtualRobot.h>
27
28#include <armarx/control/common/control_law/aron/TaskspaceMixedImpedanceVelocityControllerConfig.aron.generated.h>
31#include <armarx/control/common/ft/aron/FTConfig.aron.generated.h>
32
34{
35
37 {
38 public:
39 using FTConfig = common::ft::arondto::FTConfig;
40 using Config =
41 common::control_law::arondto::TaskspaceMixedImpedanceVelocityControllerConfig;
42 using ConfigDict =
43 common::control_law::arondto::TaskspaceMixedImpedanceVelocityControllerConfigDict;
44
45 // /// internal status of the controller, containing intermediate variables, mutable targets
46 // struct RtStatus
47 // {
48 // /// targets
49 // Eigen::VectorXf desiredJointTorque;
50 // Eigen::VectorXf desiredJointVelocity;
51 // Eigen::VectorXf nullspaceTorque;
52 // Eigen::VectorXf nullspaceVelocity;
53 //
54 // /// force torque
55 // Eigen::Vector6f currentForceTorque;
56 // Eigen::Vector6f safeFTGuardOffset;
57 //
58 // /// task space variables
59 // Eigen::Vector6f forceImpedance;
60 // Eigen::Vector6f cartesianVelTarget;
61 //
62 // /// current status
63 // // Eigen::VectorXf qpos;
64 // // Eigen::VectorXf qvel;
65 // Eigen::VectorXf qvelFiltered;
66 // Eigen::Matrix4f currentPose;
67 // Eigen::Vector6f currentTwist;
68 // Eigen::Matrix4f desiredPose;
69 // Eigen::Matrix4f desiredPoseUnsafe;
70 //
71 // /// intermediate results
72 // Eigen::Matrix3f poseDiffMatImp;
73 // Eigen::Vector6f poseErrorImp;
74 // Eigen::AngleAxisf oriDiffAngleAxis;
75 //
76 // /// others
77 // Eigen::MatrixXf jacobi;
78 // Eigen::MatrixXf jtpinv;
79 // Eigen::MatrixXf jpinv;
80 // bool rtSafe;
81 // bool rtTargetSafe = true;
82 // bool forceTorqueSafe = true;
83 //
84 // size_t nDoFTorque;
85 // size_t nDoFVelocity;
86 //
87 // void
88 // reset(const unsigned int nDoF, const size_t numDoFTorque, const size_t numDoFVelocity);
89 // void rtPreActivate(const Eigen::Matrix4f& currentPose);
90 // };
91
92 // unsigned int numOfJoints; // for nonRT use case
93 // size_t nDoFTorque;
94 // size_t nDoFVelocity;
95
96 private:
97 // Eigen::MatrixXf I;
98
99 VirtualRobot::DifferentialIKPtr ik;
100
101 // const float lambda = 2.0f;
102
103 public:
104 VirtualRobot::RobotNodePtr tcp;
105 VirtualRobot::RobotNodePtr rtTCP;
107
108 std::vector<size_t> jointIDTorqueMode;
109 std::vector<size_t> jointIDVelocityMode;
110
111 bool isControlModeValid(const std::vector<std::string>& nameList,
112 const std::map<std::string, std::string>& jointControlModeMap);
113
114 void initialize(const VirtualRobot::RobotNodeSetPtr& rns,
115 const VirtualRobot::RobotNodeSetPtr& rtRns,
116 const std::vector<size_t>& torqueControlledIndex,
117 const std::vector<size_t>& velocityControlledIndex);
118 void preactivateInit(const VirtualRobot::RobotNodeSetPtr& rns);
119
120 void run(Config& c, TSCtrlRtStatus& robotStatus);
121 void firstRun();
122 };
123} // namespace armarx::control::common::control_law
constexpr T c
common::control_law::arondto::TaskspaceMixedImpedanceVelocityControllerConfigDict ConfigDict
void initialize(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodeSetPtr &rtRns, const std::vector< size_t > &torqueControlledIndex, const std::vector< size_t > &velocityControlledIndex)
bool isControlModeValid(const std::vector< std::string > &nameList, const std::map< std::string, std::string > &jointControlModeMap)
common::control_law::arondto::TaskspaceMixedImpedanceVelocityControllerConfig Config