PositionControllerHelper.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 Simon Ottenhaus (simon dot ottenhaus at kit dot edu)
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/Dense>
27 
28 #include <VirtualRobot/IK/JacobiProvider.h>
29 #include <VirtualRobot/VirtualRobot.h>
30 
33 
35 
36 namespace Eigen
37 {
39 }
40 
41 namespace armarx
42 {
43 
44  class PositionControllerHelper;
45  using PositionControllerHelperPtr = std::shared_ptr<PositionControllerHelper>;
46 
48  {
49  public:
50  PositionControllerHelper(const VirtualRobot::RobotNodePtr& tcp,
52  const Eigen::Matrix4f& target);
53  PositionControllerHelper(const VirtualRobot::RobotNodePtr& tcp,
55  const std::vector<Eigen::Matrix4f>& waypoints);
56  PositionControllerHelper(const VirtualRobot::RobotNodePtr& tcp,
58  const std::vector<PosePtr>& waypoints);
59 
60  void readConfig(const CartesianPositionControllerConfigBase& config);
61  void readConfig(const CartesianPositionControllerConfigBasePtr& config);
62 
63  // read data and write targets, call this if you are unsure, anywhere in your control loop.
64  // use updateRead and updateWrite for better performance
65  void update();
66  // read data, call this after robot sync
67  void updateRead();
68  // write targets, call this at the end of your control loop, before the sleep
69  void updateWrite();
70 
71  void setNewWaypoints(const std::vector<Eigen::Matrix4f>& waypoints);
72  void setNewWaypoints(const std::vector<PosePtr>& waypoints);
73  void addWaypoint(const Eigen::Matrix4f& waypoint);
74  void setTarget(const Eigen::Matrix4f& target);
76  void setFeedForwardVelocity(const Eigen::Vector3f& feedForwardVelocityPos,
77  const Eigen::Vector3f& feedForwardVelocityOri);
79  void immediateHardStop(bool clearTargets = true);
80 
81  float getPositionError() const;
82 
83  float getOrientationError() const;
84 
85  bool isCurrentTargetReached() const;
86  bool isCurrentTargetNear() const;
87  bool isFinalTargetReached() const;
88  bool isFinalTargetNear() const;
89 
90  bool isLastWaypoint() const;
91 
92  const Eigen::Matrix4f& getCurrentTarget() const;
93  const Eigen::Vector3f getCurrentTargetPosition() const;
94 
95  size_t skipToClosestWaypoint(float rad2mmFactor);
96 
97  void setNullSpaceControl(bool enabled);
98 
99  std::string getStatusText();
100 
102  {
104  {
105  }
106 
107  int loops = 100;
108  float stepLength = 0.05f;
109  float eps = 0.001;
110  float maxOriErrorIncrease = 1.f / 180 * M_PI;
113  VirtualRobot::IKSolver::All;
114  VirtualRobot::JacobiProvider::InverseJacobiMethod invJacMethod =
115  VirtualRobot::JacobiProvider::eSVD;
116  };
117 
118  /**
119  * @brief OptimizeNullspace
120  * @param tcp
121  * @param rns
122  * @param target target pose in root frame of the robot
123  * @param args
124  * @return
125  */
126  static bool
127  OptimizeNullspace(const VirtualRobot::RobotNodePtr& tcp,
128  const VirtualRobot::RobotNodeSetPtr& rns,
129  const Eigen::Matrix4f& target,
131 
134 
135  std::vector<Eigen::Matrix4f> waypoints;
137 
142  Eigen::Vector6f feedForwardVelocity = Eigen::Vector6f::Zero();
143  bool autoClearFeedForward = true;
144  };
145 } // namespace armarx
armarx::PositionControllerHelper::NullspaceOptimizationArgs::maxOriErrorIncrease
float maxOriErrorIncrease
Definition: PositionControllerHelper.h:110
armarx::PositionControllerHelper::clearFeedForwardVelocity
void clearFeedForwardVelocity()
Definition: PositionControllerHelper.cpp:168
Eigen
Definition: Elements.h:32
armarx::PositionControllerHelper::isCurrentTargetNear
bool isCurrentTargetNear() const
Definition: PositionControllerHelper.cpp:203
armarx::PositionControllerHelper::NullspaceOptimizationArgs::loops
int loops
Definition: PositionControllerHelper.h:107
armarx::PositionControllerHelper::getStatusText
std::string getStatusText()
Definition: PositionControllerHelper.cpp:266
armarx::PositionControllerHelper::thresholdPositionNear
float thresholdPositionNear
Definition: PositionControllerHelper.h:140
armarx::PositionControllerHelper::addWaypoint
void addWaypoint(const Eigen::Matrix4f &waypoint)
Definition: PositionControllerHelper.cpp:140
GfxTL::Matrix4f
MatrixXX< 4, 4, float > Matrix4f
Definition: MatrixXX.h:650
armarx::PositionControllerHelper::getCurrentTargetPosition
const Eigen::Vector3f getCurrentTargetPosition() const
Definition: PositionControllerHelper.cpp:234
Pose.h
armarx::PositionControllerHelper::posController
CartesianPositionController posController
Definition: PositionControllerHelper.h:132
VelocityControllerHelper.h
boost::target
Vertex target(const detail::edge_base< Directed, Vertex > &e, const PCG &)
Definition: point_cloud_graph.h:668
armarx::PositionControllerHelper::setNullSpaceControl
void setNullSpaceControl(bool enabled)
Definition: PositionControllerHelper.cpp:260
armarx::PositionControllerHelper::isFinalTargetNear
bool isFinalTargetNear() const
Definition: PositionControllerHelper.cpp:216
armarx::PositionControllerHelper::NullspaceOptimizationArgs::maxPoseErrorIncrease
float maxPoseErrorIncrease
Definition: PositionControllerHelper.h:111
armarx::PositionControllerHelper::NullspaceOptimizationArgs::stepLength
float stepLength
Definition: PositionControllerHelper.h:108
armarx::PositionControllerHelper::thresholdOrientationNear
float thresholdOrientationNear
Definition: PositionControllerHelper.h:141
armarx::PositionControllerHelper
Definition: PositionControllerHelper.h:47
armarx::PositionControllerHelper::NullspaceOptimizationArgs
Definition: PositionControllerHelper.h:101
armarx::PositionControllerHelper::updateWrite
void updateWrite()
Definition: PositionControllerHelper.cpp:110
armarx::PositionControllerHelper::immediateHardStop
void immediateHardStop(bool clearTargets=true)
Definition: PositionControllerHelper.cpp:174
armarx::PositionControllerHelper::feedForwardVelocity
Eigen::Vector6f feedForwardVelocity
Definition: PositionControllerHelper.h:142
armarx::PositionControllerHelper::isFinalTargetReached
bool isFinalTargetReached() const
Definition: PositionControllerHelper.cpp:210
armarx::PositionControllerHelper::update
void update()
Definition: PositionControllerHelper.cpp:94
armarx::PositionControllerHelper::thresholdPositionReached
float thresholdPositionReached
Definition: PositionControllerHelper.h:138
armarx::PositionControllerHelper::waypoints
std::vector< Eigen::Matrix4f > waypoints
Definition: PositionControllerHelper.h:135
M_PI
#define M_PI
Definition: MathTools.h:17
armarx::PositionControllerHelper::updateRead
void updateRead()
Definition: PositionControllerHelper.cpp:101
armarx::PositionControllerHelper::NullspaceOptimizationArgs::eps
float eps
Definition: PositionControllerHelper.h:109
armarx::PositionControllerHelper::setFeedForwardVelocity
void setFeedForwardVelocity(const Eigen::Vector6f &feedForwardVelocity)
Definition: PositionControllerHelper.cpp:154
armarx::PositionControllerHelper::velocityControllerHelper
VelocityControllerHelperPtr velocityControllerHelper
Definition: PositionControllerHelper.h:133
armarx::PositionControllerHelper::autoClearFeedForward
bool autoClearFeedForward
Definition: PositionControllerHelper.h:143
armarx::PositionControllerHelper::NullspaceOptimizationArgs::invJacMethod
VirtualRobot::JacobiProvider::InverseJacobiMethod invJacMethod
Definition: PositionControllerHelper.h:114
armarx::NJointTaskSpaceDMPControllerMode::CartesianSelection
CartesianSelection
Definition: ControllerInterface.ice:34
enabled
std::atomic< bool > * enabled
Definition: RemoteGuiWidgetController.cpp:75
armarx::PositionControllerHelper::currentWaypointIndex
size_t currentWaypointIndex
Definition: PositionControllerHelper.h:136
armarx::PositionControllerHelper::getCurrentTarget
const Eigen::Matrix4f & getCurrentTarget() const
Definition: PositionControllerHelper.cpp:228
armarx::PositionControllerHelper::skipToClosestWaypoint
size_t skipToClosestWaypoint(float rad2mmFactor)
Definition: PositionControllerHelper.cpp:240
armarx::PositionControllerHelper::PositionControllerHelper
PositionControllerHelper(const VirtualRobot::RobotNodePtr &tcp, const VelocityControllerHelperPtr &velocityControllerHelper, const Eigen::Matrix4f &target)
Definition: PositionControllerHelper.cpp:38
Eigen::Vector6f
Matrix< float, 6, 1 > Vector6f
Definition: CartesianNaturalPositionController.h:40
armarx::PositionControllerHelperPtr
std::shared_ptr< PositionControllerHelper > PositionControllerHelperPtr
Definition: PositionControllerHelper.h:45
CartesianPositionController.h
armarx::PositionControllerHelper::thresholdOrientationReached
float thresholdOrientationReached
Definition: PositionControllerHelper.h:139
armarx::PositionControllerHelper::OptimizeNullspace
static bool OptimizeNullspace(const VirtualRobot::RobotNodePtr &tcp, const VirtualRobot::RobotNodeSetPtr &rns, const Eigen::Matrix4f &target, const NullspaceOptimizationArgs &args=NullspaceOptimizationArgs())
OptimizeNullspace.
Definition: PositionControllerHelper.cpp:277
armarx::PositionControllerHelper::NullspaceOptimizationArgs::NullspaceOptimizationArgs
NullspaceOptimizationArgs()
Definition: PositionControllerHelper.h:103
armarx::PositionControllerHelper::getOrientationError
float getOrientationError() const
Definition: PositionControllerHelper.cpp:190
armarx::PositionControllerHelper::NullspaceOptimizationArgs::cartesianSelection
VirtualRobot::IKSolver::CartesianSelection cartesianSelection
Definition: PositionControllerHelper.h:112
armarx::PositionControllerHelper::readConfig
void readConfig(const CartesianPositionControllerConfigBase &config)
Definition: PositionControllerHelper.cpp:75
armarx::CartesianPositionController
Definition: CartesianPositionController.h:42
armarx::PositionControllerHelper::isCurrentTargetReached
bool isCurrentTargetReached() const
Definition: PositionControllerHelper.cpp:196
Eigen::Matrix
Definition: EigenForwardDeclarations.h:27
armarx::PositionControllerHelper::setTarget
void setTarget(const Eigen::Matrix4f &target)
Definition: PositionControllerHelper.cpp:146
armarx::PositionControllerHelper::isLastWaypoint
bool isLastWaypoint() const
Definition: PositionControllerHelper.cpp:222
armarx::PositionControllerHelper::getPositionError
float getPositionError() const
Definition: PositionControllerHelper.cpp:184
armarx::VelocityControllerHelperPtr
std::shared_ptr< VelocityControllerHelper > VelocityControllerHelperPtr
Definition: VelocityControllerHelper.h:36
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::PositionControllerHelper::setNewWaypoints
void setNewWaypoints(const std::vector< Eigen::Matrix4f > &waypoints)
Definition: PositionControllerHelper.cpp:122