mc_rtc  2.12.0
ForceSensor.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2019 CNRS-UM LIRMM, CNRS-AIST JRL
3  */
4 
5 #pragma once
6 
7 #include <mc_rbdyn/Device.h>
9 
10 namespace mc_rbdyn
11 {
12 
13 struct Robot;
14 
20 {
21 public:
24 
37  ForceSensor(const std::string & name, const std::string & parentBodyName, const sva::PTransformd & X_p_f);
38 
39  ForceSensor(const ForceSensor & fs);
40 
42 
43  ForceSensor(ForceSensor &&) = default;
45 
47  ~ForceSensor() noexcept override;
48 
50  inline const std::string & parentBody() const { return Device::parent(); }
51 
53  inline const sva::PTransformd & X_p_f() const { return Device::X_p_s(); }
54 
56  inline sva::PTransformd X_0_f(const mc_rbdyn::Robot & robot) const { return Device::X_0_s(robot); }
57 
59  inline const sva::ForceVecd & wrench() const { return wrench_; }
60 
65  inline const Eigen::Vector3d & force() const { return wrench().force(); }
66 
71  inline const Eigen::Vector3d & couple() const { return wrench().couple(); }
72 
77  inline void wrench(const sva::ForceVecd & wrench) { wrench_ = wrench; }
78 
86  sva::ForceVecd wrenchWithoutGravity(const mc_rbdyn::Robot & robot) const;
87 
95  sva::ForceVecd worldWrench(const mc_rbdyn::Robot & robot) const;
96 
104  sva::ForceVecd worldWrenchWithoutGravity(const mc_rbdyn::Robot & robot) const;
105 
113  void loadCalibrator(const detail::ForceSensorCalibData & data) noexcept;
114 
124  void loadCalibrator(const std::string & calib_file, const Eigen::Vector3d & gravity = {0., 0., 9.81});
125 
132 
138 
142  const sva::PTransformd & X_fsmodel_fsactual() const;
143 
146  const sva::PTransformd X_fsactual_parent() const;
147 
149  double mass() const;
150 
152  const sva::ForceVecd & offset() const;
153 
155  inline const detail::ForceSensorCalibData & calib() const noexcept { return calibration_; }
156 
158  /* End of Calibration group */
159 
160  DevicePtr clone() const override;
161 
162 private:
163  sva::ForceVecd wrench_;
164 
165  detail::ForceSensorCalibData calibration_;
166 };
167 
168 inline bool operator==(const mc_rbdyn::ForceSensor & lhs, const mc_rbdyn::ForceSensor & rhs)
169 {
170  return lhs.name() == rhs.name() && lhs.parentBody() == rhs.parentBody() && lhs.X_p_f() == rhs.X_p_f();
171 }
172 
173 } // namespace mc_rbdyn
#define MC_RBDYN_DLLAPI
Definition: api.h:50
Definition: generic_gripper.h:15
std::unique_ptr< Device > DevicePtr
Definition: Device.h:20
bool operator==(const mc_rbdyn::BodySensor &lhs, const mc_rbdyn::BodySensor &rhs)
Definition: BodySensor.h:147
const Eigen::Vector3d gravity
Definition: constants.h:16
auto Robot(const std::string &name, GetT get_fn)
Definition: Robot.h:56
Definition: Contact.h:67
Definition: Device.h:30
const sva::PTransformd & X_p_s() const
Definition: Device.h:64
sva::PTransformd X_0_s(const mc_rbdyn::Robot &robot) const
const std::string & parent() const
Definition: Device.h:55
const std::string & name() const
Definition: Device.h:49
Definition: ForceSensor.h:20
void loadCalibrator(const std::string &calib_file, const Eigen::Vector3d &gravity={0., 0., 9.81})
sva::ForceVecd worldWrench(const mc_rbdyn::Robot &robot) const
ForceSensor(const ForceSensor &fs)
ForceSensor & operator=(ForceSensor &&)=default
ForceSensor(ForceSensor &&)=default
void copyCalibrator(const mc_rbdyn::ForceSensor &other)
void wrench(const sva::ForceVecd &wrench)
Definition: ForceSensor.h:77
const std::string & parentBody() const
Definition: ForceSensor.h:50
~ForceSensor() noexcept override
const sva::PTransformd & X_p_f() const
Definition: ForceSensor.h:53
void loadCalibrator(const detail::ForceSensorCalibData &data) noexcept
const sva::PTransformd & X_fsmodel_fsactual() const
const sva::PTransformd X_fsactual_parent() const
sva::PTransformd X_0_f(const mc_rbdyn::Robot &robot) const
Definition: ForceSensor.h:56
ForceSensor(const std::string &name, const std::string &parentBodyName, const sva::PTransformd &X_p_f)
sva::ForceVecd worldWrenchWithoutGravity(const mc_rbdyn::Robot &robot) const
const Eigen::Vector3d & force() const
Definition: ForceSensor.h:65
DevicePtr clone() const override
const sva::ForceVecd & offset() const
ForceSensor & operator=(const ForceSensor &fs)
const detail::ForceSensorCalibData & calib() const noexcept
Definition: ForceSensor.h:155
const sva::ForceVecd & wrench() const
Definition: ForceSensor.h:59
sva::ForceVecd wrenchWithoutGravity(const mc_rbdyn::Robot &robot) const
double mass() const
const Eigen::Vector3d & couple() const
Definition: ForceSensor.h:71
Definition: Robot.h:63
Definition: ForceSensorCalibData.h:9