34class Jr3Mbed :
public yarp::dev::DeviceDriver,
35 public yarp::dev::ISixAxisForceTorqueSensors,
42 bool open(yarp::os::Searchable & config)
override;
43 bool close()
override;
47 unsigned int getId()
override;
56#if YARP_VERSION_COMPARE(>=, 4, 1, 0) || defined(YARP_NEXT)
57 yarp::dev::ReturnValue getNrOfSixAxisForceTorqueSensors(std::size_t & num)
const override;
58 yarp::dev::MAS_status getSixAxisForceTorqueSensorStatus(std::size_t sens_index)
const override;
59 yarp::dev::ReturnValue getSixAxisForceTorqueSensorName(std::size_t sens_index, std::string & name)
const override;
60 yarp::dev::ReturnValue getSixAxisForceTorqueSensorFrameName(std::size_t sens_index, std::string & frameName)
const override;
61 yarp::dev::ReturnValue getSixAxisForceTorqueSensorMeasure(std::size_t sens_index, yarp::sig::Vector & out,
double & timestamp)
const override;
63 std::size_t getNrOfSixAxisForceTorqueSensors()
const override;
64 yarp::dev::MAS_status getSixAxisForceTorqueSensorStatus(std::size_t sens_index)
const override;
65 bool getSixAxisForceTorqueSensorName(std::size_t sens_index, std::string & name)
const override;
66 bool getSixAxisForceTorqueSensorFrameName(std::size_t sens_index, std::string & frameName)
const override;
67 bool getSixAxisForceTorqueSensorMeasure(std::size_t sens_index, yarp::sig::Vector & out,
double & timestamp)
const override;
72 enum class can_ops : std::uint16_t
81 GET_FS_FORCES = 0x480,
82 GET_FS_MOMENTS = 0x500,
90 enum class jr3_state : std::uint8_t
91 { READY = 0x00, NOT_INITIALIZED = 0x01 };
94 { SYNC, ASYNC, INVALID };
96 constexpr unsigned int getCommandId(can_ops op)
const
97 {
return m_canId +
static_cast<unsigned int>(op); }
99 bool performRequest(
const std::string & cmd,
const roboticslab::can_message & msg, std::uint8_t * response,
bool quiet =
false);
100 bool sendStartSyncCommand(
double filter);
101 bool sendStartAsyncCommand(
double filter,
double delay);
102 bool sendCommand(
const std::string & cmd, can_ops op);
104 bool queryFullScales();
106 bool monitorWorker(
const yarp::os::YarpTimerEvent & event);
108 std::array<double, 6> scales;
109 bool shouldQueryFullScales {
false};
111 jr3_mode mode {jr3_mode::INVALID};
116 mutable std::mutex mtx;
118 std::array<std::int16_t, 3> buffer {};
119 std::array<std::int16_t, 6> raw {};
121 std::atomic<yarp::dev::MAS_status> status {yarp::dev::MAS_UNKNOWN};
122 std::atomic_bool isBooting {
false};
123 double timestamp {0.0};
124 std::uint16_t frameCounter {0};
125 double lastDiagnosticsTimestamp {0.0};
126 unsigned int lastFrameCounter {0};
128 yarp::os::Timer * monitorThread {
nullptr};
130 static constexpr unsigned int FULL_SCALE = 16384;
bool notifyMessage(const roboticslab::can_message &message) override
Notify observers that a new CAN message has arrived.
Definition ICanBusSharerImpl.cpp:88
bool registerSender(roboticslab::ICanSenderDelegate *sender) override
Pass a handle to a CAN sender delegate instance.
Definition ICanBusSharerImpl.cpp:130
bool synchronize(double timestamp) override
Perform synchronized action on CAN master's request.
Definition ICanBusSharerImpl.cpp:138