Klamp't  0.9.0
InertialSensors.h
1 #ifndef CONTROL_INERTIAL_SENSORS_H
2 #define CONTROL_INERTIAL_SENSORS_H
3 
4 #include "Sensor.h"
5 #include <KrisLibrary/math3d/primitives.h>
6 
7 namespace Klampt {
8  using namespace Math3D;
9 
19 class Accelerometer : public SensorBase
20 {
21  public:
22  Accelerometer();
23  virtual const char* Type() const override { return "Accelerometer"; }
24  virtual void Simulate(SimRobotController* robot,Simulator* sim) override;
25  virtual void SimulateKinematic(RobotModel& robot,WorldModel& world) override;
26  virtual void Advance(double dt) override;
27  virtual void Reset() override;
28  virtual void MeasurementNames(vector<string>& names) const override;
29  virtual void GetMeasurements(vector<double>& values) const override;
30  virtual void SetMeasurements(const vector<double>& values) override;
31  virtual void GetInternalState(vector<double>& state) const override;
32  virtual void SetInternalState(const vector<double>& state) override;
33  virtual map<string,string> Settings() const override;
34  virtual bool GetSetting(const string& name,string& str) const override;
35  virtual bool SetSetting(const string& name,const string& str) override;
36 
37  int link;
38  RigidTransform Tsensor;
39  bool hasAxis[3];
40  Vector3 accelVariance;
41 
42  Vector3 accel;
43 
44  Real last_dt;
45  Vector3 last_v;
46 };
47 
61 class TiltSensor : public SensorBase
62 {
63  public:
64  TiltSensor();
65  virtual const char* Type() const override { return "TiltSensor"; }
66  virtual void Simulate(SimRobotController* robot,Simulator* sim) override;
67  virtual void SimulateKinematic(RobotModel& robot,WorldModel& world) override;
68  virtual void Advance(double dt) override;
69  virtual void Reset() override;
70  virtual void MeasurementNames(vector<string>& names) const override;
71  virtual void GetMeasurements(vector<double>& values) const override;
72  virtual void SetMeasurements(const vector<double>& values) override;
73  virtual map<string,string> Settings() const override;
74  virtual bool GetSetting(const string& name,string& str) const override;
75  virtual bool SetSetting(const string& name,const string& str) override;
76 
77  int link;
78  Vector3 referenceDir;
79  Matrix3 Rsensor;
80  bool hasAxis[3];
81  Vector3 resolution,variance;
82  bool hasVelocity;
83 
84  Vector3 alocal,wlocal;
85 };
86 
87 
100 class GyroSensor : public SensorBase
101 {
102  public:
103  GyroSensor();
104  virtual const char* Type() const override { return "GyroSensor"; }
105  virtual void Simulate(SimRobotController* robot,Simulator* sim) override;
106  virtual void SimulateKinematic(RobotModel& robot,WorldModel& world) override;
107  virtual void Reset() override;
108  virtual void Advance(Real dt) override;
109  virtual void MeasurementNames(vector<string>& names) const override;
110  virtual void GetMeasurements(vector<double>& values) const override;
111  virtual void SetMeasurements(const vector<double>& values) override;
112  virtual void GetInternalState(vector<double>& state) const override;
113  virtual void SetInternalState(const vector<double>& state) override;
114  virtual map<string,string> Settings() const override;
115  virtual bool GetSetting(const string& name,string& str) const override;
116  virtual bool SetSetting(const string& name,const string& str) override;
117 
118  int link;
119  bool hasAngAccel;
120  bool hasAngVel;
121  bool hasRotation;
123  Matrix3 angVelVariance;
125 
126  Vector3 angAccel;
127  Vector3 angVel;
128  Matrix3 rotation;
129 
130  Real last_dt;
131  Vector3 last_w;
132 };
133 
141 class IMUSensor : public SensorBase
142 {
143  public:
144  IMUSensor();
145  virtual const char* Type() const override { return "IMUSensor"; }
146  virtual void Simulate(SimRobotController* robot,Simulator* sim) override;
147  virtual void SimulateKinematic(RobotModel& robot,WorldModel& world) override;
148  virtual void Advance(Real dt) override;
149  virtual void Reset() override;
150  virtual void MeasurementNames(vector<string>& names) const override;
151  virtual void GetMeasurements(vector<double>& values) const override;
152  virtual void SetMeasurements(const vector<double>& values) override;
153  virtual void GetInternalState(vector<double>& state) const override;
154  virtual void SetInternalState(const vector<double>& state) override;
155  virtual map<string,string> Settings() const override;
156  virtual bool GetSetting(const string& name,string& str) const override;
157  virtual bool SetSetting(const string& name,const string& str) override;
158 
159  Accelerometer accelerometer;
160  GyroSensor gyro;
161  Vector3 accel,velocity,translation;
162  Vector3 angAccel,angVel;
163  Matrix3 rotation;
164 };
165 
166 } //namespace Klampt
167 
168 #endif
Matrix3 angVelVariance
The variance associated with the measurement.
Definition: InertialSensors.h:123
A physical simulator for a WorldModel.
Definition: Simulator.h:69
Real last_dt
Temporary: needed to derive accel from ODE.
Definition: InertialSensors.h:130
bool hasAngVel
True if angular velocity is directly measured.
Definition: InertialSensors.h:120
int link
The link on which the sensor is located.
Definition: InertialSensors.h:118
Vector3 accel
Measurement: acceleration value.
Definition: InertialSensors.h:42
Vector3 angAccel
Measurement: the angular accel reading.
Definition: InertialSensors.h:126
Vector3 angVel
Measurement: the angular velocity reading.
Definition: InertialSensors.h:127
Matrix3 rotation
Measurement: the rotation matrix reading.
Definition: InertialSensors.h:128
A class containing information about an ODE-simulated and controlled robot.
Definition: SimRobotController.h:19
bool hasAngAccel
True if angular accel is directly measured.
Definition: InertialSensors.h:119
A sensor base class. A SensorBase should allow a Controller to both connect to a simulation as well a...
Definition: Sensor.h:55
Simulates a gyroscope.
Definition: InertialSensors.h:100
Matrix3 angAccelVariance
The variance associated with the measurement.
Definition: InertialSensors.h:122
Simulates an accelerometer.
Definition: InertialSensors.h:19
Vector3 accelVariance
Estimated variances of the sensor.
Definition: InertialSensors.h:40
bool hasRotation
True if rotation is directly measured.
Definition: InertialSensors.h:121
The main robot type used in RobotSim.
Definition: Robot.h:83
Simulates a tilt sensor that measures the angle of a reference direction about certain axes...
Definition: InertialSensors.h:61
Matrix3 rotationVariance
The variance associated with the measurement.
Definition: InertialSensors.h:124
Matrix3 Rsensor
Orientation of unit on link.
Definition: InertialSensors.h:79
Vector3 last_w
Temporary: needed to derive accel from ODE.
Definition: InertialSensors.h:131
Real last_dt
Temporary: needed to derive accel from ODE.
Definition: InertialSensors.h:44
Definition: ContactDistance.h:6
Vector3 last_v
Temporary: needed to derive accel from ODE.
Definition: InertialSensors.h:45
The main world class containing multiple robots, objects, and static geometries (terrains). Lights and other viewport information may also be stored here.
Definition: World.h:24
RigidTransform Tsensor
Position of unit on link.
Definition: InertialSensors.h:38
An inertial measurement unit. May provide all or some of a rigid body&#39;s state.
Definition: InertialSensors.h:141