mc_rtc  2.12.0
PositionBasedVisServoFunction.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2022 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include <mc_tvm/api.h>
8 #include <mc_tvm/fwd.h>
9 
10 #include <mc_rbdyn/fwd.h>
11 
12 #include <tvm/function/abstract/Function.h>
13 
14 #include <RBDyn/Jacobian.h>
15 
16 namespace mc_tvm
17 {
18 
26 struct MC_TVM_DLLAPI PositionBasedVisServoFunction : tvm::function::abstract::Function
27 {
28  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
29 
30  SET_UPDATES(PositionBasedVisServoFunction, Value, Velocity, Jacobian, NormalAcceleration)
31 
32 
37 
39  inline void reset() noexcept { X_t_s_ = sva::PTransformd::Identity(); }
40 
42  inline const sva::PTransformd & error() const noexcept { return X_t_s_; }
43 
45  inline void error(const sva::PTransformd & X_t_s) noexcept { X_t_s_ = X_t_s; }
46 
48  inline const mc_rbdyn::RobotFrame & frame() const noexcept { return *frame_; }
49 
50 protected:
53 
54  /* Inputs to the function */
55  sva::PTransformd X_t_s_;
56 
57  /* Computation intermediates */
58  rbd::Jacobian frameJac_;
59  double angle_;
60  Eigen::Vector3d axis_;
61  Eigen::Matrix<double, 6, 6> L_pbvs_;
62  Eigen::Matrix<double, 6, 1> frameVelocity_;
63  Eigen::Matrix3d omegaSkew_;
64  Eigen::Matrix<double, 6, 6> L_pbvs_dot_;
65 
66  /* TVM update methods */
67  void updateValue();
70  Eigen::MatrixXd shortJacMat_;
71  Eigen::MatrixXd jacMat_;
73 };
74 
75 } // namespace mc_tvm
#define MC_TVM_DLLAPI
Definition: api.h:47
Definition: generic_gripper.h:15
std::shared_ptr< const RobotFrame > ConstRobotFramePtr
Definition: fwd.h:25
Definition: CollisionFunction.h:16
Definition: RobotFrame.h:22
Definition: PositionBasedVisServoFunction.h:27
void error(const sva::PTransformd &X_t_s) noexcept
Definition: PositionBasedVisServoFunction.h:45
rbd::Jacobian frameJac_
Definition: PositionBasedVisServoFunction.h:58
double angle_
Definition: PositionBasedVisServoFunction.h:59
Eigen::Matrix3d omegaSkew_
Definition: PositionBasedVisServoFunction.h:63
sva::PTransformd X_t_s_
Definition: PositionBasedVisServoFunction.h:55
Eigen::Vector3d axis_
Definition: PositionBasedVisServoFunction.h:60
mc_tvm::RobotFrame & tvm_frame_
Definition: PositionBasedVisServoFunction.h:52
Eigen::Matrix< double, 6, 6 > L_pbvs_
Definition: PositionBasedVisServoFunction.h:61
const sva::PTransformd & error() const noexcept
Definition: PositionBasedVisServoFunction.h:42
mc_rbdyn::ConstRobotFramePtr frame_
Definition: PositionBasedVisServoFunction.h:51
Eigen::Matrix< double, 6, 1 > frameVelocity_
Definition: PositionBasedVisServoFunction.h:62
Eigen::Matrix< double, 6, 6 > L_pbvs_dot_
Definition: PositionBasedVisServoFunction.h:64
const mc_rbdyn::RobotFrame & frame() const noexcept
Definition: PositionBasedVisServoFunction.h:48
Eigen::MatrixXd jacMat_
Definition: PositionBasedVisServoFunction.h:71
Eigen::MatrixXd shortJacMat_
Definition: PositionBasedVisServoFunction.h:70
Definition: RobotFrame.h:28