model_base.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <franka/model.h>
4 #include <franka/robot_state.h>
5 
6 namespace franka_hw {
7 
20 class ModelBase {
21  public:
22  virtual ~ModelBase() noexcept = default;
23 
34  std::array<double, 16> pose(franka::Frame frame, const franka::RobotState& robot_state) const {
35  return pose(frame, robot_state.q, robot_state.F_T_EE, robot_state.EE_T_K);
36  }
37 
50  virtual std::array<double, 16> pose(
51  franka::Frame frame,
52  const std::array<double, 7>& q,
53  const std::array<double, 16>& F_T_EE, // NOLINT(readability-identifier-naming)
54  const std::array<double, 16>& EE_T_K) // NOLINT(readability-identifier-naming)
55  const = 0;
56 
67  std::array<double, 42> bodyJacobian(franka::Frame frame,
68  const franka::RobotState& robot_state) const {
69  return bodyJacobian(frame, robot_state.q, robot_state.F_T_EE, robot_state.EE_T_K);
70  }
71 
84  virtual std::array<double, 42> bodyJacobian(
85  franka::Frame frame,
86  const std::array<double, 7>& q,
87  const std::array<double, 16>& F_T_EE, // NOLINT(readability-identifier-naming)
88  const std::array<double, 16>& EE_T_K) // NOLINT(readability-identifier-naming)
89  const = 0;
90 
101  std::array<double, 42> zeroJacobian(franka::Frame frame,
102  const franka::RobotState& robot_state) const {
103  return zeroJacobian(frame, robot_state.q, robot_state.F_T_EE, robot_state.EE_T_K);
104  }
105 
118  virtual std::array<double, 42> zeroJacobian(
119  franka::Frame frame,
120  const std::array<double, 7>& q,
121  const std::array<double, 16>& F_T_EE, // NOLINT(readability-identifier-naming)
122  const std::array<double, 16>& EE_T_K) // NOLINT(readability-identifier-naming)
123  const = 0;
124 
132  std::array<double, 49> mass(const franka::RobotState& robot_state) const {
133  return mass(robot_state.q, robot_state.I_total, robot_state.m_total, robot_state.F_x_Ctotal);
134  }
135 
149  virtual std::array<double, 49> mass(
150  const std::array<double, 7>& q,
151  const std::array<double, 9>& I_total, // NOLINT(readability-identifier-naming)
152  double m_total,
153  const std::array<double, 3>& F_x_Ctotal) // NOLINT(readability-identifier-naming)
154  const = 0;
155 
164  std::array<double, 7> coriolis(const franka::RobotState& robot_state) const {
165  return coriolis(robot_state.q, robot_state.dq, robot_state.I_total, robot_state.m_total,
166  robot_state.F_x_Ctotal);
167  }
168 
184  virtual std::array<double, 7> coriolis(
185  const std::array<double, 7>& q,
186  const std::array<double, 7>& dq,
187  const std::array<double, 9>& I_total, // NOLINT(readability-identifier-naming)
188  double m_total,
189  const std::array<double, 3>& F_x_Ctotal) // NOLINT(readability-identifier-naming)
190  const = 0;
191 
203  std::array<double, 7> gravity(
204  const std::array<double, 7>& q,
205  double m_total,
206  const std::array<double, 3>& F_x_Ctotal // NOLINT(readability-identifier-naming)
207  ) const {
208  return gravity(q, m_total, F_x_Ctotal, {0, 0, -9.81});
209  }
210 
223  virtual std::array<double, 7> gravity(
224  const std::array<double, 7>& q,
225  double m_total,
226  const std::array<double, 3>& F_x_Ctotal, // NOLINT(readability-identifier-naming)
227  const std::array<double, 3>& gravity_earth) const = 0;
228 
236  std::array<double, 7> gravity(const franka::RobotState& robot_state) const {
237 #ifdef ENABLE_BASE_ACCELERATION
238  return gravity(robot_state.q, robot_state.m_total, robot_state.F_x_Ctotal, robot_state.O_ddP_O);
239 #else
240  return gravity(robot_state.q, robot_state.m_total, robot_state.F_x_Ctotal, {0, 0, -9.81});
241 #endif
242  }
243 
252  std::array<double, 7> gravity(const franka::RobotState& robot_state,
253  const std::array<double, 3>& gravity_earth) const {
254  return gravity(robot_state.q, robot_state.m_total, robot_state.F_x_Ctotal, gravity_earth);
255  }
256 };
257 
258 } // namespace franka_hw
franka_hw::ModelBase::pose
std::array< double, 16 > pose(franka::Frame frame, const franka::RobotState &robot_state) const
Gets the 4x4 pose matrix for the given frame in base frame.
Definition: model_base.h:34
franka_hw::ModelBase::coriolis
std::array< double, 7 > coriolis(const franka::RobotState &robot_state) const
Calculates the Coriolis force vector (state-space equation): , in .
Definition: model_base.h:164
franka_hw::ModelBase::gravity
std::array< double, 7 > gravity(const std::array< double, 7 > &q, double m_total, const std::array< double, 3 > &F_x_Ctotal) const
Calculates the gravity vector.
Definition: model_base.h:203
franka_hw::ModelBase::mass
std::array< double, 49 > mass(const franka::RobotState &robot_state) const
Calculates the 7x7 mass matrix.
Definition: model_base.h:132
franka_hw::ModelBase::zeroJacobian
std::array< double, 42 > zeroJacobian(franka::Frame frame, const franka::RobotState &robot_state) const
Gets the 6x7 Jacobian for the given joint relative to the base frame.
Definition: model_base.h:101
franka_hw::ModelBase::gravity
std::array< double, 7 > gravity(const franka::RobotState &robot_state) const
Calculates the gravity vector.
Definition: model_base.h:236
franka_hw::ModelBase::~ModelBase
virtual ~ModelBase() noexcept=default
franka_hw::ModelBase
Calculates poses of joints and dynamic properties of the robot.
Definition: model_base.h:20
franka_hw
Definition: control_mode.h:8
franka_hw::ModelBase::gravity
std::array< double, 7 > gravity(const franka::RobotState &robot_state, const std::array< double, 3 > &gravity_earth) const
Calculates the gravity vector.
Definition: model_base.h:252
franka_hw::ModelBase::bodyJacobian
std::array< double, 42 > bodyJacobian(franka::Frame frame, const franka::RobotState &robot_state) const
Gets the 6x7 Jacobian for the given frame, relative to that frame.
Definition: model_base.h:67


franka_hw
Author(s): Franka Emika GmbH
autogenerated on Mon Sep 19 2022 02:33:21