13#include <yarp/os/LogStream.h>
14#include <yarp/os/Property.h>
15#include <yarp/os/SystemClock.h>
17#include <yarp/dev/MultipleAnalogSensorsInterfaces.h>
18#include <yarp/dev/PolyDriver.h>
20int main(
int argc,
char * argv[])
22 yarp::os::Property options {{
"device", yarp::os::Value(
"Jr3Pci")}};
24 yarp::dev::PolyDriver device(options);
26 if (!device.isValid())
28 yError() <<
"Device not available";
32 yarp::dev::ISixAxisForceTorqueSensors * sensor;
34 if (!device.view(sensor))
36 yError() <<
"Unable to acquire interface";
40 int channels = sensor->getNrOfSixAxisForceTorqueSensors();
41 yInfo() <<
"Channels:" << channels;
43 for (
auto ch = 0; ch < channels; ch++)
46 sensor->getSixAxisForceTorqueSensorName(ch, name);
47 yInfo() <<
"Channel" << ch <<
"has name:" << name;
52 constexpr auto MAX_RETRIES = 10;
56 status = yarp::dev::MAS_OK;
58 for (
auto ch = 0; ch < channels; ch++)
60 status += sensor->getSixAxisForceTorqueSensorStatus(ch);
63 yInfo() <<
"Waiting for sensor to be ready... retry" << ++retry;
65 if (retry >= MAX_RETRIES)
67 yError() <<
"Sensor initialization failure, max number of retries exceeded";
71 yarp::os::SystemClock::delaySystem(0.1);
73 while (status != yarp::dev::MAS_OK);
76 constexpr auto MAX_ITERS = 500;
78 yInfo() <<
"Performing" << MAX_ITERS <<
"read iterations";
80 yarp::sig::Vector out;
83 while (n++ < MAX_ITERS)
85 for (
auto ch = 0; ch < channels; ch++)
87 if (!sensor->getSixAxisForceTorqueSensorMeasure(ch, out, timestamp))
89 yError() <<
"Unable to read channel" << ch;
93 yInfo(
"[%d] [%f] Channel %d: %s", n, timestamp, ch, out.toString().c_str());
96 yarp::os::SystemClock::delaySystem(0.01);