OrientedTactileSensorUnit.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stdio.h>
4 
5 #include <fstream>
6 #include <iostream>
7 
8 #include <netinet/in.h>
9 
10 #include <Eigen/Dense>
11 
15 
16 #include <RobotAPI/interface/units/OrientedTactileSensorUnit.h>
17 #include <RobotAPI/interface/units/UnitInterface.h>
18 #include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
20 
21 namespace armarx
22 {
24  {
25  public:
28  {
29  defineOptionalProperty<std::string>("SerialInterfaceDevice",
30  "/dev/ttyACM0",
31  "The serial device the arduino is connected to.");
32 
33  defineOptionalProperty<std::string>(
34  "TopicName",
35  "OrientedTactileSensorValues",
36  "Name of the topic on which the sensor values are provided");
37 
38  defineOptionalProperty<std::string>("CalibrationData",
39  "65524 3 12 65534 65534 1 1208 119 58726 1000 943 ",
40  "Sensor Register Data to calibrate the sensor");
41 
42  defineOptionalProperty<std::string>(
43  "SamplesRotation", "20", "number of orientation values to differentiate");
44 
45  defineOptionalProperty<std::string>(
46  "SamplesPressure", "10", "number of pressure values to differentiate");
47 
48  defineOptionalProperty<std::string>(
49  "SamplesAcceleration", "20", "number of pressure values to differentiate");
50 
51  defineOptionalProperty<bool>("logData", "false", "log data from sensor");
52  defineOptionalProperty<bool>("calibrateSensor",
53  "false"
54  "Set true to calibrate the sensor and get calibration "
55  "data and false to use existent calibration data");
56  defineOptionalProperty<std::string>(
57  "DebugDrawerTopicName",
58  "DebugDrawerUpdates",
59  "Name of the debug drawer topic that should be used");
60  }
61  };
62 
63  /**
64  * @class OrientedTactileSensorUnit
65  * @brief ArmarX wrapper for an arduino due with one BNO055 IMU and one BMP280 pressure sensor
66  *
67  */
69  //TODO: needs interface to send calibration data
70  {
71  public:
73 
74  std::string
75  getDefaultName() const override
76  {
77  return "OrientedTactileSensorUnit";
78  }
79 
80  struct SensorData
81  {
82  int id;
83  float pressure;
84  float qw, qx, qy, qz;
85  float accelx, accely, accelz;
86  };
87 
89  {
92  };
93 
94  struct PressureRate
95  {
97  float pressure;
98  };
99 
101  {
104  };
105 
107  {
110  };
111 
112  struct LinAccRate
113  {
115  float accx, accy, accz;
116  };
117 
118  protected:
119  void onInitComponent() override;
120  void onConnectComponent() override;
121 
123 
124  private:
125  std::ifstream arduinoIn;
126  std::ofstream arduinoOut;
128  OrientedTactileSensorUnitListenerPrx topicPrx;
129  OrientedTactileSensorUnitInterfacePrx interfacePrx;
130 
131  void run();
132  SensorData getValues(std::string line);
133  bool getCalibrationValues(std::string line);
134  bool loadCalibration();
135  int fd;
136  CalibrationData calibration;
137 
138  Eigen::Quaternionf inverseOrientation;
139  std::vector<RotationRate> samplesRotation;
140  std::vector<PressureRate> samplesPressure;
141  std::vector<AccelerationRate> samplesAcceleration;
142  std::vector<float> pressureRates;
143  //Eigen::AngleAxisf aa;
144  int maxSamplesRotation;
145  int sampleIndexRotation;
146  int maxSamplesPressure;
147  int sampleIndexPressure;
148  int maxSamplesAcceleration;
149  int sampleIndexAcceleration;
150  int sampleIndexPressureRate;
151  float sumPressureRates;
152  Eigen::Matrix3f sumOrientation;
153  bool first;
154  int i = 0;
155  DebugDrawerInterfacePrx debugDrawerTopic;
156  SimpleJsonLoggerPtr logger;
157  std::string prefix;
158  };
159 } // namespace armarx
armarx::OrientedTactileSensorUnit::SensorData::accelz
float accelz
Definition: OrientedTactileSensorUnit.h:85
armarx::OrientedTactileSensorUnit::CalibrationData::gyro_offset_y
int gyro_offset_y
Definition: OrientedTactileSensorUnit.h:90
armarx::OrientedTactileSensorUnitPropertyDefinitions
Definition: OrientedTactileSensorUnit.h:23
armarx::OrientedTactileSensorUnit::RotationRate
Definition: OrientedTactileSensorUnit.h:100
armarx::OrientedTactileSensorUnit::LinAccRate::accx
float accx
Definition: OrientedTactileSensorUnit.h:115
armarx::OrientedTactileSensorUnit::CalibrationData::accel_offset_x
int accel_offset_x
Definition: OrientedTactileSensorUnit.h:90
armarx::OrientedTactileSensorUnit::AccelerationRate::rotationRate
float rotationRate
Definition: OrientedTactileSensorUnit.h:109
armarx::OrientedTactileSensorUnit::createPropertyDefinitions
PropertyDefinitionsPtr createPropertyDefinitions() override
Definition: OrientedTactileSensorUnit.cpp:157
armarx::OrientedTactileSensorUnit::AccelerationRate::timestamp
IceUtil::Time timestamp
Definition: OrientedTactileSensorUnit.h:108
armarx::OrientedTactileSensorUnit::onInitComponent
void onInitComponent() override
Pure virtual hook for the subclass.
Definition: OrientedTactileSensorUnit.cpp:28
armarx::OrientedTactileSensorUnit::onConnectComponent
void onConnectComponent() override
Pure virtual hook for the subclass.
Definition: OrientedTactileSensorUnit.cpp:148
SimpleJsonLogger.h
armarx::OrientedTactileSensorUnit::OrientedTactileSensorUnit
OrientedTactileSensorUnit()
Definition: OrientedTactileSensorUnit.cpp:18
armarx::PropertyDefinitionContainer::prefix
std::string prefix
Prefix of the properties such as namespace, domain, component name, etc.
Definition: PropertyDefinitionContainer.h:345
PeriodicTask.h
armarx::OrientedTactileSensorUnit::SensorData::qy
float qy
Definition: OrientedTactileSensorUnit.h:84
armarx::OrientedTactileSensorUnit::RotationRate::timestamp
IceUtil::Time timestamp
Definition: OrientedTactileSensorUnit.h:102
armarx::OrientedTactileSensorUnit
ArmarX wrapper for an arduino due with one BNO055 IMU and one BMP280 pressure sensor.
Definition: OrientedTactileSensorUnit.h:68
RunningTask.h
armarx::SimpleJsonLoggerPtr
std::shared_ptr< SimpleJsonLogger > SimpleJsonLoggerPtr
Definition: SimpleJsonLogger.h:40
armarx::OrientedTactileSensorUnit::CalibrationData::mag_radius
int mag_radius
Definition: OrientedTactileSensorUnit.h:91
armarx::OrientedTactileSensorUnit::CalibrationData::gyro_offset_x
int gyro_offset_x
Definition: OrientedTactileSensorUnit.h:90
armarx::OrientedTactileSensorUnit::CalibrationData::mag_offset_z
int mag_offset_z
Definition: OrientedTactileSensorUnit.h:91
armarx::OrientedTactileSensorUnit::SensorData::qx
float qx
Definition: OrientedTactileSensorUnit.h:84
armarx::OrientedTactileSensorUnit::PressureRate::pressure
float pressure
Definition: OrientedTactileSensorUnit.h:97
armarx::OrientedTactileSensorUnit::CalibrationData::mag_offset_x
int mag_offset_x
Definition: OrientedTactileSensorUnit.h:91
armarx::OrientedTactileSensorUnit::SensorData::qw
float qw
Definition: OrientedTactileSensorUnit.h:84
armarx::OrientedTactileSensorUnit::LinAccRate::accz
float accz
Definition: OrientedTactileSensorUnit.h:115
armarx::OrientedTactileSensorUnit::AccelerationRate
Definition: OrientedTactileSensorUnit.h:106
armarx::OrientedTactileSensorUnit::SensorData::id
int id
Definition: OrientedTactileSensorUnit.h:82
armarx::OrientedTactileSensorUnit::CalibrationData::accel_offset_z
int accel_offset_z
Definition: OrientedTactileSensorUnit.h:90
armarx::OrientedTactileSensorUnit::LinAccRate
Definition: OrientedTactileSensorUnit.h:112
armarx::OrientedTactileSensorUnit::SensorData::accelx
float accelx
Definition: OrientedTactileSensorUnit.h:85
armarx::OrientedTactileSensorUnit::SensorData::pressure
float pressure
Definition: OrientedTactileSensorUnit.h:83
armarx::OrientedTactileSensorUnit::CalibrationData::gyro_offset_z
int gyro_offset_z
Definition: OrientedTactileSensorUnit.h:91
armarx::OrientedTactileSensorUnit::CalibrationData::mag_offset_y
int mag_offset_y
Definition: OrientedTactileSensorUnit.h:91
armarx::OrientedTactileSensorUnit::SensorData::qz
float qz
Definition: OrientedTactileSensorUnit.h:84
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::OrientedTactileSensorUnit::PressureRate::timestamp
IceUtil::Time timestamp
Definition: OrientedTactileSensorUnit.h:96
Component.h
armarx::Component
Baseclass for all ArmarX ManagedIceObjects requiring properties.
Definition: Component.h:91
armarx::OrientedTactileSensorUnit::RotationRate::orientation
Eigen::Quaternionf orientation
Definition: OrientedTactileSensorUnit.h:103
armarx::OrientedTactileSensorUnit::CalibrationData::accel_offset_y
int accel_offset_y
Definition: OrientedTactileSensorUnit.h:90
armarx::OrientedTactileSensorUnit::CalibrationData::accel_radius
int accel_radius
Definition: OrientedTactileSensorUnit.h:91
armarx::ComponentPropertyDefinitions
Default component property definition container.
Definition: Component.h:69
armarx::Quaternion< float, 0 >
IceUtil::Handle< class PropertyDefinitionContainer >
IceInternal::ProxyHandle<::IceProxy::armarx::DebugDrawerInterface >
armarx::OrientedTactileSensorUnit::PressureRate
Definition: OrientedTactileSensorUnit.h:94
armarx::OrientedTactileSensorUnit::LinAccRate::accy
float accy
Definition: OrientedTactileSensorUnit.h:115
armarx::OrientedTactileSensorUnit::SensorData::accely
float accely
Definition: OrientedTactileSensorUnit.h:85
armarx::OrientedTactileSensorUnitPropertyDefinitions::OrientedTactileSensorUnitPropertyDefinitions
OrientedTactileSensorUnitPropertyDefinitions(std::string prefix)
Definition: OrientedTactileSensorUnit.h:26
GfxTL::Matrix3f
MatrixXX< 3, 3, float > Matrix3f
Definition: MatrixXX.h:649
armarx::OrientedTactileSensorUnit::LinAccRate::timestamp
IceUtil::Time timestamp
Definition: OrientedTactileSensorUnit.h:114
armarx::OrientedTactileSensorUnit::SensorData
Definition: OrientedTactileSensorUnit.h:80
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::OrientedTactileSensorUnit::getDefaultName
std::string getDefaultName() const override
Retrieve default name of component.
Definition: OrientedTactileSensorUnit.h:75
armarx::OrientedTactileSensorUnit::CalibrationData
Definition: OrientedTactileSensorUnit.h:88