mc_rtc  2.16.0
BodySensor.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>
8 #include <mc_rtc/deprecated.h>
9 
10 #include <Eigen/StdVector>
11 
12 namespace mc_rbdyn
13 {
14 
20 {
21  EIGEN_MAKE_ALIGNED_OPERATOR_NEW
23  inline BodySensor() : BodySensor("", "", sva::PTransformd::Identity()) {}
24 
34  inline BodySensor(const std::string & name, const std::string & bodyName, const sva::PTransformd & X_b_s)
35  : Device(name, bodyName, X_b_s)
36  { type_ = "BodySensor"; }
37 
38  BodySensor(const BodySensor & bs) : BodySensor(bs.name(), bs.parent(), bs.X_b_s())
39  {
40  position_ = bs.position_;
41  orientation_ = bs.orientation_;
42  linear_velocity_ = bs.linear_velocity_;
43  angular_velocity_ = bs.angular_velocity_;
44  linear_acceleration_ = bs.linear_acceleration_;
45  angular_acceleration_ = bs.angular_acceleration_;
46  }
47 
49  {
50  name_ = bs.name_;
51  parent_ = bs.parent_;
52  X_p_s_ = bs.X_p_s_;
53  position_ = bs.position_;
54  orientation_ = bs.orientation_;
55  linear_velocity_ = bs.linear_velocity_;
56  angular_velocity_ = bs.angular_velocity_;
57  linear_acceleration_ = bs.linear_acceleration_;
58  angular_acceleration_ = bs.angular_acceleration_;
59  return *this;
60  }
61 
62  BodySensor(BodySensor &&) = default;
63  BodySensor & operator=(BodySensor &&) = default;
64 
65  ~BodySensor() noexcept override;
66 
68  inline const std::string & parentBody() const { return Device::parent(); }
69 
71  inline const sva::PTransformd & X_b_s() const { return Device::X_p_s(); }
72 
74  inline const Eigen::Vector3d & position() const { return position_; }
75 
77  inline void position(const Eigen::Vector3d & position) { position_ = position; }
78 
80  inline const Eigen::Quaterniond & orientation() const { return orientation_; }
81 
88  inline void orientation(const Eigen::Quaterniond & orientation) { orientation_ = orientation; }
89 
91  inline const Eigen::Vector3d & linearVelocity() const { return linear_velocity_; }
92 
94  inline void linearVelocity(const Eigen::Vector3d & linear_velocity) { linear_velocity_ = linear_velocity; }
95 
97  inline const Eigen::Vector3d & angularVelocity() const { return angular_velocity_; }
98 
100  inline void angularVelocity(const Eigen::Vector3d & angular_velocity) { angular_velocity_ = angular_velocity; }
101 
106  MC_RTC_DEPRECATED inline const Eigen::Vector3d & acceleration() const { return linearAcceleration(); }
107 
112  MC_RTC_DEPRECATED inline void acceleration(const Eigen::Vector3d & acceleration) { linearAcceleration(acceleration); }
113 
115  inline const Eigen::Vector3d & linearAcceleration() const { return linear_acceleration_; }
116 
118  inline void linearAcceleration(const Eigen::Vector3d & linear_acceleration)
119  { linear_acceleration_ = linear_acceleration; }
120 
122  inline const Eigen::Vector3d & angularAcceleration() const { return angular_acceleration_; }
123 
125  inline void angularAcceleration(const Eigen::Vector3d & angular_acceleration)
126  { angular_acceleration_ = angular_acceleration; }
127 
128  DevicePtr clone() const override;
129 
130 private:
131  Eigen::Vector3d position_ = Eigen::Vector3d::Zero();
132  Eigen::Quaterniond orientation_ = Eigen::Quaterniond::Identity();
133  Eigen::Vector3d linear_velocity_ = Eigen::Vector3d::Zero();
134  Eigen::Vector3d angular_velocity_ = Eigen::Vector3d::Zero();
135  Eigen::Vector3d linear_acceleration_ = Eigen::Vector3d::Zero();
136  Eigen::Vector3d angular_acceleration_ = Eigen::Vector3d::Zero();
137 };
138 
139 typedef std::vector<BodySensor, Eigen::aligned_allocator<BodySensor>> BodySensorVector;
140 
141 inline bool operator==(const mc_rbdyn::BodySensor & lhs, const mc_rbdyn::BodySensor & rhs)
142 { return lhs.name() == rhs.name() && lhs.parentBody() == rhs.parentBody() && lhs.X_b_s() == rhs.X_b_s(); }
143 
144 } // namespace mc_rbdyn
std::optional< Eigen::VectorXd > acceleration
#define MC_RBDYN_DLLAPI
Definition: api.h:50
Definition: generic_gripper.h:15
std::unique_ptr< Device > DevicePtr
Definition: Device.h:20
std::vector< BodySensor, Eigen::aligned_allocator< BodySensor > > BodySensorVector
Definition: BodySensor.h:139
bool operator==(const mc_rbdyn::BodySensor &lhs, const mc_rbdyn::BodySensor &rhs)
Definition: BodySensor.h:141
PTransform< double > PTransformd
Definition: BodySensor.h:20
const Eigen::Vector3d & angularVelocity() const
Definition: BodySensor.h:97
EIGEN_MAKE_ALIGNED_OPERATOR_NEW BodySensor()
Definition: BodySensor.h:23
void linearVelocity(const Eigen::Vector3d &linear_velocity)
Definition: BodySensor.h:94
MC_RTC_DEPRECATED void acceleration(const Eigen::Vector3d &acceleration)
Definition: BodySensor.h:112
const Eigen::Vector3d & position() const
Definition: BodySensor.h:74
MC_RTC_DEPRECATED const Eigen::Vector3d & acceleration() const
Definition: BodySensor.h:106
BodySensor(const std::string &name, const std::string &bodyName, const sva::PTransformd &X_b_s)
Definition: BodySensor.h:34
BodySensor & operator=(const BodySensor &bs)
Definition: BodySensor.h:48
BodySensor(BodySensor &&)=default
BodySensor(const BodySensor &bs)
Definition: BodySensor.h:38
const Eigen::Vector3d & angularAcceleration() const
Definition: BodySensor.h:122
const Eigen::Vector3d & linearAcceleration() const
Definition: BodySensor.h:115
DevicePtr clone() const override
void position(const Eigen::Vector3d &position)
Definition: BodySensor.h:77
void orientation(const Eigen::Quaterniond &orientation)
Definition: BodySensor.h:88
void angularAcceleration(const Eigen::Vector3d &angular_acceleration)
Definition: BodySensor.h:125
void angularVelocity(const Eigen::Vector3d &angular_velocity)
Definition: BodySensor.h:100
const std::string & parentBody() const
Definition: BodySensor.h:68
~BodySensor() noexcept override
const Eigen::Quaterniond & orientation() const
Definition: BodySensor.h:80
BodySensor & operator=(BodySensor &&)=default
const Eigen::Vector3d & linearVelocity() const
Definition: BodySensor.h:91
const sva::PTransformd & X_b_s() const
Definition: BodySensor.h:71
void linearAcceleration(const Eigen::Vector3d &linear_acceleration)
Definition: BodySensor.h:118
Definition: Device.h:30
const sva::PTransformd & X_p_s() const noexcept
Definition: Device.h:67
sva::PTransformd X_p_s_
Definition: Device.h:92
const std::string & parent() const noexcept
Definition: Device.h:58
std::string parent_
Definition: Device.h:90
const std::string & name() const noexcept
Definition: Device.h:49
std::string name_
Definition: Device.h:88