YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
MultipleAnalogSensorsServer.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-License-Identifier: BSD-3-Clause
4 */
5
6
7#ifndef YARP_DEV_MULTIPLEANALOGSENSORSSERVER_MULTIPLEANALOGSENSORSSERVER_H
8#define YARP_DEV_MULTIPLEANALOGSENSORSSERVER_MULTIPLEANALOGSENSORSSERVER_H
9
11#include <yarp/os/Stamp.h>
13#include <yarp/dev/PolyDriver.h>
16
17// Thrift-generated classes
18#include "SensorStreamingData.h"
20
22
39{
40 double m_periodInS{0.01};
41 yarp::os::Stamp m_stamp;
42 std::string m_streamingPortName;
43 std::string m_RPCPortName;
45 yarp::os::Port m_rpcPort;
46 // Generic vector buffer
47 yarp::sig::Vector m_buffer;
48
49 // Interface of the wrapped device
50 yarp::dev::IThreeAxisGyroscopes* m_iThreeAxisGyroscopes{nullptr};
51 yarp::dev::IThreeAxisLinearAccelerometers* m_iThreeAxisLinearAccelerometers{nullptr};
52 yarp::dev::IThreeAxisAngularAccelerometers* m_iThreeAxisAngularAccelerometers{nullptr};
53 yarp::dev::IThreeAxisMagnetometers* m_iThreeAxisMagnetometers{nullptr};
54 yarp::dev::IPositionSensors* m_iPositionSensors{nullptr};
55 yarp::dev::ILinearVelocitySensors* m_iLinearVelocitySensors{nullptr};
56 yarp::dev::IOrientationSensors* m_iOrientationSensors{nullptr};
57 yarp::dev::ITemperatureSensors* m_iTemperatureSensors{nullptr};
58 yarp::dev::ISixAxisForceTorqueSensors* m_iSixAxisForceTorqueSensors{nullptr};
59 yarp::dev::IContactLoadCellArrays* m_iContactLoadCellArrays{nullptr};
60 yarp::dev::IEncoderArrays* m_iEncoderArrays{nullptr};
61 yarp::dev::ISkinPatches* m_iSkinPatches{nullptr};
62
63 // Metadata to be server via the RPC port
64 SensorRPCData m_sensorMetadata;
65 bool populateAllSensorsMetadata();
66 template<typename Interface>
67 bool populateSensorsMetadata(Interface * wrappedDeviceInterface,
68 std::vector<SensorMetadata>& metadataVector, const std::string& tag,
69 size_t (Interface::*getNrOfSensorsMethodPtr)() const,
70 bool (Interface::*getNameMethodPtr)(size_t, std::string&) const,
71 bool (Interface::*getFrameNameMethodPtr)(size_t, std::string&) const);
72 template<typename Interface>
73 bool populateSensorsMetadataNoFrameName(Interface * wrappedDeviceInterface,
74 std::vector<SensorMetadata>& metadataVector, const std::string& tag,
75 size_t (Interface::*getNrOfSensorsMethodPtr)() const,
76 bool (Interface::*getNameMethodPtr)(size_t, std::string&) const);
77
78
79 // Helper methods to resize measure buffers
80 template<typename Interface>
81 bool resizeMeasureVectors(Interface* wrappedDeviceInterface,
82 const std::vector< SensorMetadata >& metadataVector,
83 std::vector< SensorMeasurement >& streamingDataVector,
84 size_t (Interface::*getMeasureSizePtr)(size_t) const);
85 template<typename Interface>
86 bool resizeMeasureVectors(Interface* wrappedDeviceInterface,
87 const std::vector< SensorMetadata >& metadataVector,
88 std::vector< SensorMeasurement >& streamingDataVector,
89 size_t measureSize);
90 bool resizeAllMeasureVectors(SensorStreamingData& streamingData);
91
92
93 // Helper method used to copy the sensor measure to the measure buffers
94 template<typename Interface>
95 bool genericStreamData(Interface* wrappedDeviceInterface,
96 const std::vector< SensorMetadata >& metadataVector,
97 std::vector< SensorMeasurement >& streamingDataVector,
98 yarp::dev::MAS_status (Interface::*getStatusMethodPtr)(size_t) const,
99 bool (Interface::*getMeasureMethodPtr)(size_t, yarp::sig::Vector&, double&) const,
100 const char* sensorType);
101
102
103public:
106
107 /* DevideDriver methods */
108 bool open(yarp::os::Searchable &params) override;
109 bool close() override;
110
111 /* IWrapper methods */
112 bool attach(yarp::dev::PolyDriver* p) override;
113 bool detach() override;
114
115 /* RateThread methods */
116 void threadRelease() override;
117 void run() override;
118
119 /* MultipleAnalogSensorsMetadata */
120 SensorRPCData getMetadata() override;
121};
122
123#endif
This class is the parameters parser for class MultipleAnalogSensorsServer.
multipleanalogsensorsserver: The server side of the MultipleAnalogSensorsClient, useful to expose dev...
bool detach() override
Detach the object (you must have first called attach).
SensorRPCData getMetadata() override
Read the sensor metadata necessary to configure the MultipleAnalogSensorsClient device.
void threadRelease() override
Release method.
bool close() override
Close the DeviceDriver.
bool attach(yarp::dev::PolyDriver *p) override
Attach to another object.
bool open(yarp::os::Searchable &params) override
Open the DeviceDriver.
Interface implemented by all device drivers.
Device interface to one or multiple contact load cell arrays.
Device interface to one or multiple arrays of encoders.
Device interface to one or multiple orientation sensors, such as IMUs with on board estimation algori...
Device interface to one or multiple position sensors, such as UWB localization sensors.
Device interface to one or multiple six axis force torque sensor.
Device interface to one or more groups (patches) of tactile sensors (skin).
Device interface to one or multiple temperature sensors.
Device interface to one or multiple three axis gyroscopes.
Device interface to one or multiple three axis linear accelerometers.
Device interface to one or multiple three axis magnetometers.
A container for a device driver.
Definition PolyDriver.h:23
Helper interface for an object that can wrap/or "attach" to a single other device.
A mini-server for performing network communication in the background.
An abstraction for a periodic thread.
A mini-server for network communication.
Definition Port.h:46
A base class for nested structures that can be searched.
Definition Searchable.h:31
An abstraction for a time stamp and/or sequence number.
Definition Stamp.h:21
MAS_status
Status of a given analog sensor exposed by a multiple analog sensors interface.