14 YARP_LOG_COMPONENT(MULTIPLEANALOGSENSORSCLIENT,
"yarp.device.multipleanalogsensorsclient")
19 std::lock_guard<std::mutex> guard(
dataMutex);
32 yCError(MULTIPLEANALOGSENSORSCLIENT,
33 "No data received in the last %lf seconds, timeout enabled.",
43 if (!config.
check(
"remote"))
45 yCError(MULTIPLEANALOGSENSORSCLIENT,
"Missing name parameter, exiting.");
49 if (!config.
check(
"local"))
51 yCError(MULTIPLEANALOGSENSORSCLIENT,
"Missing local parameter, exiting.");
57 yCError(MULTIPLEANALOGSENSORSCLIENT,
"'timeout' parameter is present but is not double, exiting.");
67 m_localRPCPortName = local +
"/rpc:i";
68 m_localStreamingPortName = local +
"/measures:i";
69 m_remoteRPCPortName = remote +
"/rpc:o";
70 m_remoteStreamingPortName = remote +
"/measures:o";
76 bool ok = m_rpcPort.
open(m_localRPCPortName);
79 yCError(MULTIPLEANALOGSENSORSCLIENT,
80 "Failure to open the port %s.",
81 m_localRPCPortName.c_str());
86 ok = m_streamingPort.
open(m_localStreamingPortName);
90 yCError(MULTIPLEANALOGSENSORSCLIENT,
91 "Failure to open the port %s.",
92 m_localStreamingPortName.c_str());
98 if (!m_externalConnection) {
101 yCError(MULTIPLEANALOGSENSORSCLIENT,
102 "Failure connecting port %s to %s.",
103 m_localRPCPortName.c_str(),
104 m_remoteRPCPortName.c_str());
105 yCError(MULTIPLEANALOGSENSORSCLIENT,
"Check that the specified MultipleAnalogSensorsServer is up.");
109 m_RPCConnectionActive =
true;
113 yCError(MULTIPLEANALOGSENSORSCLIENT,
114 "Failure connecting port %s to %s.",
115 m_remoteStreamingPortName.c_str(),
116 m_localStreamingPortName.c_str());
117 yCError(MULTIPLEANALOGSENSORSCLIENT,
"Check that the specified MultipleAnalogSensorsServer is up.");
121 m_StreamingConnectionActive =
true;
126 yCError(MULTIPLEANALOGSENSORSCLIENT,
"Failure opening Thrift-based RPC interface.");
143 if (m_StreamingConnectionActive)
147 if (m_RPCConnectionActive)
152 m_streamingPort.
close();
158 size_t MultipleAnalogSensorsClient::genericGetNrOfSensors(
const std::vector<SensorMetadata>& metadataVector,
161 if (!m_externalConnection) {
162 return metadataVector.size();
164 std::lock_guard<std::mutex> guard(m_streamingPort.
dataMutex);
176 std::lock_guard<std::mutex> guard(m_streamingPort.
dataMutex);
178 return m_streamingPort.
status;
181 bool MultipleAnalogSensorsClient::genericGetName(
const std::vector<SensorMetadata>& metadataVector,
const std::string& tag,
182 size_t sens_index, std::string& name)
const
184 if (m_externalConnection) {
185 yCError(MULTIPLEANALOGSENSORSCLIENT,
186 "Missing metadata, the device has been configured with the option"
187 "externalConnection set to true.");
190 if (sens_index >= metadataVector.size())
192 yCError(MULTIPLEANALOGSENSORSCLIENT,
193 "No sensor of type %s with index %lu (nr of sensors: %lu).",
196 metadataVector.size());
200 name = metadataVector[sens_index].name;
204 bool MultipleAnalogSensorsClient::genericGetFrameName(
const std::vector<SensorMetadata>& metadataVector,
const std::string& tag,
205 size_t sens_index, std::string& frameName)
const
207 if (m_externalConnection) {
208 yCError(MULTIPLEANALOGSENSORSCLIENT,
209 "Missing metadata, the device has been configured with the option"
210 "externalConnection set to true.");
213 if (sens_index >= metadataVector.size())
215 yCError(MULTIPLEANALOGSENSORSCLIENT,
216 "No sensor of type %s with index %lu (nr of sensors: %lu).",
219 metadataVector.size());
223 frameName = metadataVector[sens_index].frameName;
227 bool MultipleAnalogSensorsClient::genericGetMeasure(
const std::vector<SensorMetadata>& metadataVector,
const std::string& tag,
232 std::lock_guard<std::mutex> guard(m_streamingPort.
dataMutex);
236 yCError(MULTIPLEANALOGSENSORSCLIENT,
237 "Sensor of type %s with index %lu has non-MAS_OK status.",
245 yCError(MULTIPLEANALOGSENSORSCLIENT,
246 "No sensor of type %s with index %lu (nr of sensors: %lu).",
249 metadataVector.size());
253 if (!m_externalConnection) {
254 assert(metadataVector.size() == measurementsVector.
measurements.size());
257 timestamp = measurementsVector.
measurements[sens_index].timestamp;
258 out = measurementsVector.
measurements[sens_index].measurement;
263 size_t MultipleAnalogSensorsClient::genericGetSize(
const std::vector<SensorMetadata>& metadataVector,
264 const std::string& tag,
const SensorMeasurements& measurementsVector,
size_t sens_index)
const
266 std::lock_guard<std::mutex> guard(m_streamingPort.
dataMutex);
269 yCError(MULTIPLEANALOGSENSORSCLIENT,
"No data received, no information on the size of the specified sensor.");
274 if (sens_index >= measurementsVector.
measurements.size())
276 yCError(MULTIPLEANALOGSENSORSCLIENT,
277 "No sensor of type %s with index %lu (nr of sensors: %lu).",
280 metadataVector.size());
284 return measurementsVector.
measurements[sens_index].measurement.size();
331 return genericGetStatus();
336 return genericGetName(m_sensorsMetadata.
ThreeAxisGyroscopes,
"ThreeAxisGyroscopes", sens_index, name);
341 return genericGetFrameName(m_sensorsMetadata.
ThreeAxisGyroscopes,
"ThreeAxisGyroscopes", sens_index, frameName);
358 return genericGetStatus();
385 return genericGetStatus();
390 return genericGetName(m_sensorsMetadata.
ThreeAxisMagnetometers,
"ThreeAxisMagnetometers", sens_index, name);
395 return genericGetFrameName(m_sensorsMetadata.
ThreeAxisMagnetometers,
"ThreeAxisMagnetometers", sens_index, frameName);
412 return genericGetStatus();
417 return genericGetName(m_sensorsMetadata.
OrientationSensors,
"OrientationSensors", sens_index, name);
422 return genericGetFrameName(m_sensorsMetadata.
OrientationSensors,
"OrientationSensors", sens_index, frameName);
439 return genericGetStatus();
444 return genericGetName(m_sensorsMetadata.
PositionSensors,
"PositionSensors", sens_index, name);
449 return genericGetFrameName(m_sensorsMetadata.
PositionSensors,
"PositionSensors", sens_index, frameName);
465 return genericGetStatus();
470 return genericGetName(m_sensorsMetadata.
TemperatureSensors,
"TemperatureSensors", sens_index, name);
475 return genericGetFrameName(m_sensorsMetadata.
TemperatureSensors,
"TemperatureSensors", sens_index, frameName);
500 return genericGetStatus();
510 return genericGetFrameName(m_sensorsMetadata.
SixAxisForceTorqueSensors,
"SixAxisForceTorqueSensors", sens_index, frameName);
527 return genericGetStatus();
532 return genericGetName(m_sensorsMetadata.
ContactLoadCellArrays,
"ContactLoadCellArrays", sens_index, name);
549 return genericGetNrOfSensors(m_sensorsMetadata.
EncoderArrays,
555 return genericGetStatus();
560 return genericGetName(m_sensorsMetadata.
EncoderArrays,
"EncoderArrays", sens_index, name);
565 return genericGetMeasure(m_sensorsMetadata.
EncoderArrays,
"EncoderArrays",
571 return genericGetSize(m_sensorsMetadata.
EncoderArrays,
"EncoderArrays",
577 return genericGetNrOfSensors(m_sensorsMetadata.
SkinPatches,
583 return genericGetStatus();
588 return genericGetName(m_sensorsMetadata.
SkinPatches,
"SkinPatches", sens_index, name);
593 return genericGetMeasure(m_sensorsMetadata.
SkinPatches,
"SkinPatches",
599 return genericGetSize(m_sensorsMetadata.
SkinPatches,
"SkinPatches",
yarp::dev::MAS_status getContactLoadCellArrayStatus(size_t sens_index) const override
Get the status of the specified sensor.
size_t getNrOfPositionSensors() const override
Get the number of position sensors exposed by this device.
yarp::dev::MAS_status getPositionSensorStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getPositionSensorName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getSkinPatchName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getThreeAxisLinearAccelerometerFrameName(size_t sens_index, std::string &frameName) const override
Get the name of the frame of the specified sensor.
yarp::dev::MAS_status getThreeAxisMagnetometerStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getTemperatureSensorFrameName(size_t sens_index, std::string &frameName) const override
Get the name of the frame of the specified sensor.
yarp::dev::MAS_status getSixAxisForceTorqueSensorStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getThreeAxisLinearAccelerometerName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getThreeAxisGyroscopeFrameName(size_t sens_index, std::string &frameName) const override
Get the name of the frame of the specified sensor.
bool getEncoderArrayName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getPositionSensorMeasure(size_t sens_index, yarp::sig::Vector &xyz, double ×tamp) const override
Get the last reading of the position sensor as x y z.
yarp::dev::MAS_status getSkinPatchStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getThreeAxisLinearAccelerometerMeasure(size_t sens_index, yarp::sig::Vector &out, double ×tamp) const override
Get the last reading of the specified sensor.
size_t getNrOfTemperatureSensors() const override
Get the number of temperature sensors exposed by this device.
size_t getEncoderArraySize(size_t sens_index) const override
Get the size of the specified encoder array.
size_t getNrOfEncoderArrays() const override
Get the number of encoder arrays exposed by this device.
bool getSixAxisForceTorqueSensorMeasure(size_t sens_index, yarp::sig::Vector &out, double ×tamp) const override
Get the last reading of the specified sensor.
yarp::dev::MAS_status getThreeAxisGyroscopeStatus(size_t sens_index) const override
Get the status of the specified sensor.
size_t getContactLoadCellArraySize(size_t sens_index) const override
Get the size of the specified contact load cell array.
size_t getNrOfSixAxisForceTorqueSensors() const override
Get the number of six axis force torque sensors exposed by this device.
bool getTemperatureSensorMeasure(size_t sens_index, double &out, double ×tamp) const override
Get the last reading of the specified sensor.
size_t getSkinPatchSize(size_t sens_index) const override
Get the size of the specified skin patch.
size_t getNrOfThreeAxisLinearAccelerometers() const override
Get the number of three axis linear accelerometers exposed by this device.
bool close() override
Close the DeviceDriver.
yarp::dev::MAS_status getThreeAxisLinearAccelerometerStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getThreeAxisMagnetometerMeasure(size_t sens_index, yarp::sig::Vector &out, double ×tamp) const override
Get the last reading of the specified sensor.
yarp::dev::MAS_status getOrientationSensorStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getEncoderArrayMeasure(size_t sens_index, yarp::sig::Vector &out, double ×tamp) const override
Get the last reading of the specified sensor.
bool getOrientationSensorMeasureAsRollPitchYaw(size_t sens_index, yarp::sig::Vector &rpy, double ×tamp) const override
Get the last reading of the orientation sensor as roll pitch yaw.
bool getThreeAxisGyroscopeMeasure(size_t sens_index, yarp::sig::Vector &out, double ×tamp) const override
Get the last reading of the gyroscope.
bool getContactLoadCellArrayName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
yarp::dev::MAS_status getEncoderArrayStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getContactLoadCellArrayMeasure(size_t sens_index, yarp::sig::Vector &out, double ×tamp) const override
Get the last reading of the specified sensor.
bool getThreeAxisGyroscopeName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getOrientationSensorName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getPositionSensorFrameName(size_t sens_index, std::string &frameName) const override
Get the name of the frame of the specified sensor.
bool getTemperatureSensorName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getThreeAxisMagnetometerName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool getOrientationSensorFrameName(size_t sens_index, std::string &frameName) const override
Get the name of the frame of the specified sensor.
bool getSixAxisForceTorqueSensorFrameName(size_t sens_index, std::string &frame) const override
Get the name of the frame of the specified sensor.
size_t getNrOfThreeAxisGyroscopes() const override
Get the number of three axis gyroscopes exposed by this sensor.
size_t getNrOfThreeAxisMagnetometers() const override
Get the number of magnetometers exposed by this device.
size_t getNrOfOrientationSensors() const override
Get the number of orientation sensors exposed by this device.
yarp::dev::MAS_status getTemperatureSensorStatus(size_t sens_index) const override
Get the status of the specified sensor.
bool getSkinPatchMeasure(size_t sens_index, yarp::sig::Vector &out, double ×tamp) const override
Get the last reading of the specified sensor.
size_t getNrOfSkinPatches() const override
Get the number of skin patches exposed by this device.
size_t getNrOfContactLoadCellArrays() const override
Get the number of contact load cell array exposed by this device.
bool getThreeAxisMagnetometerFrameName(size_t sens_index, std::string &frameName) const override
Get the name of the frame of the specified sensor.
bool getSixAxisForceTorqueSensorName(size_t sens_index, std::string &name) const override
Get the name of the specified sensor.
bool open(yarp::os::Searchable &config) override
Open the DeviceDriver.
std::vector< SensorMeasurement > measurements
std::vector< SensorMetadata > SkinPatches
std::vector< SensorMetadata > ContactLoadCellArrays
std::vector< SensorMetadata > EncoderArrays
std::vector< SensorMetadata > PositionSensors
std::vector< SensorMetadata > ThreeAxisGyroscopes
std::vector< SensorMetadata > ThreeAxisLinearAccelerometers
std::vector< SensorMetadata > ThreeAxisMagnetometers
std::vector< SensorMetadata > OrientationSensors
std::vector< SensorMetadata > SixAxisForceTorqueSensors
std::vector< SensorMetadata > TemperatureSensors
SensorMeasurements EncoderArrays
SensorMeasurements ThreeAxisLinearAccelerometers
SensorMeasurements PositionSensors
SensorMeasurements OrientationSensors
SensorMeasurements ThreeAxisMagnetometers
SensorMeasurements ThreeAxisGyroscopes
SensorMeasurements SixAxisForceTorqueSensors
SensorMeasurements SkinPatches
SensorMeasurements ContactLoadCellArrays
SensorMeasurements TemperatureSensors
void close() override
Stop port activity.
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
void useCallback(TypedReaderCallback< T > &callback) override
Set an object whose onRead method will be called when data is available.
static bool connect(const std::string &src, const std::string &dest, const std::string &carrier="", bool quiet=true)
Request that an output port connect to an input port.
static bool disconnect(const std::string &src, const std::string &dest, bool quiet)
Request that an output port disconnect from an input port.
void close() override
Stop port activity.
bool open(const std::string &name) override
Start port operation, with a specific name, with automatically-chosen network parameters.
A base class for nested structures that can be searched.
virtual Value & find(const std::string &key) const =0
Gets a value corresponding to a given keyword.
virtual bool check(const std::string &key) const =0
Check if there exists a property of the given name.
A single value (typically within a Bottle).
virtual bool isFloat64() const
Checks if value is a 64-bit floating point number.
virtual std::string asString() const
Get string value.
bool attachAsClient(yarp::os::UnbufferedContactable &port)
Tag this WireLink as a client, sending data via the specified port.
yarp::os::WireLink & yarp()
Get YARP state associated with this object.
#define yCError(component,...)
#define YARP_LOG_COMPONENT(name,...)
MAS_status
Status of a given analog sensor exposed by a multiple analog sensors interface.
@ MAS_TIMEOUT
The sensor is read through the network, and the latest measurement was received before an implementat...
@ MAS_OK
The sensor is working correctly.
double now()
Return the current time in seconds, relative to an arbitrary starting point.