13#include <yarp/os/LogStream.h>
14#include <yarp/os/Network.h>
15#include <yarp/os/Property.h>
16#include <yarp/os/ResourceFinder.h>
17#include <yarp/os/Time.h>
19#include <yarp/dev/MultipleAnalogSensorsInterfaces.h>
20#include <yarp/dev/PolyDriver.h>
22int main(
int argc,
char * argv[])
24 yarp::os::Network yarp;
26 if (!yarp::os::Network::checkNetwork())
28 yError() <<
"Please start a yarp name server first";
32 yarp::os::Property options {
33 {
"device", yarp::os::Value(
"multipleanalogsensorsclient")},
34 {
"remote", yarp::os::Value(
"/jr3")},
35 {
"local", yarp::os::Value(
"/exampleRemoteJr3")}
38 yarp::dev::PolyDriver device(options);
40 if (!device.isValid())
42 yError() <<
"Device not available";
46 yarp::dev::ISixAxisForceTorqueSensors * sensor;
48 if (!device.view(sensor))
50 yError() <<
"Unable to acquire interface";
54 int channels = sensor->getNrOfSixAxisForceTorqueSensors();
55 yInfo() <<
"Channels:" << channels;
57 for (
auto ch = 0; ch < channels; ch++)
61 if (!sensor->getSixAxisForceTorqueSensorName(ch, name))
63 yError() <<
"Unable to get name of channel" << ch;
67 yInfo() <<
"Channel" << ch <<
"has name:" << name;
72 constexpr auto MAX_RETRIES = 10;
76 status = yarp::dev::MAS_OK;
78 for (
auto ch = 0; ch < channels; ch++)
80 status += sensor->getSixAxisForceTorqueSensorStatus(ch);
83 yInfo() <<
"Waiting for sensor to be ready... retry" << ++retry;
85 if (retry >= MAX_RETRIES)
87 yError() <<
"Sensor initialization failure, max number of retries exceeded";
91 yarp::os::SystemClock::delaySystem(0.1);
93 while (status != yarp::dev::MAS_OK);
96 constexpr auto MAX_ITERS = 500;
98 yInfo() <<
"Performing" << MAX_ITERS <<
"read iterations";
100 yarp::sig::Vector out;
103 while (n++ < MAX_ITERS)
105 for (
auto ch = 0; ch < channels; ch++)
107 if (!sensor->getSixAxisForceTorqueSensorMeasure(ch, out, timestamp))
109 yError() <<
"Unable to read channel" << ch;
113 yInfo(
"[%d] [%f] Channel %d: %s", n, timestamp, ch, out.toString().c_str());
116 yarp::os::SystemClock::delaySystem(0.01);