CartesianVelocityController.h
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * Copyright (C) 2012-2016, High Performance Humanoid Technologies (H2T),
5  * Karlsruhe Institute of Technology (KIT), all rights reserved.
6  *
7  * ArmarX is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  *
11  * ArmarX is distributed in the hope that it will be useful, but
12  * WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program. If not, see <http://www.gnu.org/licenses/>.
18  *
19  * @author ()
20  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
21  * GNU General Public License
22  */
23 
24 #pragma once
25 
26 #include <Eigen/Core>
27 
28 #include <VirtualRobot/IK/JacobiProvider.h>
29 #include <VirtualRobot/VirtualRobot.h>
30 
31 namespace armarx
32 {
33  class CartesianVelocityController;
34  using CartesianVelocityControllerPtr = std::shared_ptr<CartesianVelocityController>;
35 
37  {
38  public:
39  CartesianVelocityController(const VirtualRobot::RobotNodeSetPtr& rns,
40  const VirtualRobot::RobotNodePtr& tcp = nullptr,
41  const VirtualRobot::JacobiProvider::InverseJacobiMethod
42  invJacMethod = VirtualRobot::JacobiProvider::eSVDDamped,
43  bool _considerJointLimits = true);
44 
47 
48  Eigen::VectorXf calculate(const Eigen::VectorXf& cartesianVel,
50  Eigen::VectorXf calculate(const Eigen::VectorXf& cartesianVel,
51  float KpJointLimitAvoidanceScale,
53  Eigen::VectorXf calculate(const Eigen::VectorXf& cartesianVel,
54  const Eigen::VectorXf& nullspaceVel,
56  Eigen::VectorXf calculateJointLimitAvoidance();
57  Eigen::VectorXf calculateJointLimitAvoidanceWithMargins(const Eigen::VectorXf& margins);
58  Eigen::VectorXf calculateNullspaceVelocity(const Eigen::VectorXf& cartesianVel,
59  float KpScale,
61 
62  void setCartesianRegularization(float cartesianMMRegularization,
63  float cartesianRadianRegularization);
64 
65  bool getConsiderJointLimits() const;
66  void setConsiderJointLimits(bool value);
67 
68  Eigen::MatrixXf jacobi;
69  VirtualRobot::RobotNodeSetPtr rns;
70  VirtualRobot::DifferentialIKPtr ik;
71  VirtualRobot::RobotNodePtr _tcp;
72  Eigen::VectorXf maximumJointVelocities;
73 
74  void setJointCosts(const std::vector<float>& _jointCosts);
76 
77  private:
78  void calculateJacobis(VirtualRobot::IKSolver::CartesianSelection mode);
79  Eigen::MatrixXf _jacobiWithCosts;
80  Eigen::MatrixXf _inv;
81  bool clampJacobiAtJointLimits(VirtualRobot::IKSolver::CartesianSelection mode,
82  const Eigen::VectorXf& cartesianVel,
83  Eigen::MatrixXf& jacobi,
84  Eigen::MatrixXf& _inv,
85  float jointLimitCheckAccuracy = 0.001f);
86  bool _considerJointLimits = true;
87  float _cartesianMMRegularization;
88  float _cartesianRadianRegularization;
89  Eigen::VectorXf _jointCosts;
90  };
91 } // namespace armarx
armarx::CartesianVelocityController::jacobi
Eigen::MatrixXf jacobi
Definition: CartesianVelocityController.h:68
armarx::CartesianVelocityController::calculate
Eigen::VectorXf calculate(const Eigen::VectorXf &cartesianVel, VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CartesianVelocityController.cpp:80
armarx::CartesianVelocityController::calculateRegularization
Eigen::VectorXf calculateRegularization(VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CartesianVelocityController.cpp:246
armarx::CartesianVelocityController::setCartesianRegularization
void setCartesianRegularization(float cartesianMMRegularization, float cartesianRadianRegularization)
Definition: CartesianVelocityController.cpp:238
armarx::CartesianVelocityController::maximumJointVelocities
Eigen::VectorXf maximumJointVelocities
Definition: CartesianVelocityController.h:72
armarx::CartesianVelocityController
Definition: CartesianVelocityController.h:36
armarx::CartesianVelocityControllerPtr
std::shared_ptr< CartesianVelocityController > CartesianVelocityControllerPtr
Definition: CartesianVelocityController.h:34
armarx::CartesianVelocityController::operator=
CartesianVelocityController & operator=(CartesianVelocityController &&)=default
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:855
armarx::CartesianVelocityController::setConsiderJointLimits
void setConsiderJointLimits(bool value)
Definition: CartesianVelocityController.cpp:335
armarx::CartesianVelocityController::getConsiderJointLimits
bool getConsiderJointLimits() const
Definition: CartesianVelocityController.cpp:329
armarx::NJointTaskSpaceDMPControllerMode::CartesianSelection
CartesianSelection
Definition: ControllerInterface.ice:34
armarx::CartesianVelocityController::calculateJointLimitAvoidance
Eigen::VectorXf calculateJointLimitAvoidance()
Definition: CartesianVelocityController.cpp:171
armarx::CartesianVelocityController::calculateJointLimitAvoidanceWithMargins
Eigen::VectorXf calculateJointLimitAvoidanceWithMargins(const Eigen::VectorXf &margins)
CartesianVelocityController::calculateJointLimitAvoidanceWithMargins.
Definition: CartesianVelocityController.cpp:198
armarx::CartesianVelocityController::ik
VirtualRobot::DifferentialIKPtr ik
Definition: CartesianVelocityController.h:70
armarx::CartesianVelocityController::CartesianVelocityController
CartesianVelocityController(const VirtualRobot::RobotNodeSetPtr &rns, const VirtualRobot::RobotNodePtr &tcp=nullptr, const VirtualRobot::JacobiProvider::InverseJacobiMethod invJacMethod=VirtualRobot::JacobiProvider::eSVDDamped, bool _considerJointLimits=true)
Definition: CartesianVelocityController.cpp:41
armarx::CartesianVelocityController::setJointCosts
void setJointCosts(const std::vector< float > &_jointCosts)
Definition: CartesianVelocityController.cpp:341
armarx::CartesianVelocityController::_tcp
VirtualRobot::RobotNodePtr _tcp
Definition: CartesianVelocityController.h:71
armarx::CartesianVelocityController::calculateNullspaceVelocity
Eigen::VectorXf calculateNullspaceVelocity(const Eigen::VectorXf &cartesianVel, float KpScale, VirtualRobot::IKSolver::CartesianSelection mode)
Definition: CartesianVelocityController.cpp:223
armarx::CartesianVelocityController::rns
VirtualRobot::RobotNodeSetPtr rns
Definition: CartesianVelocityController.h:69
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27