Skip to content

Commit f74c67b

Browse files
follesoeclaude
andcommitted
Add gripper diagnostics and identity telemetry
GripperDiagnosticsTel reports the health of each device of a gripper every few seconds: supply voltage, the temperature, humidity and pressure in its housing, motor current and the hardware status flags a Reach Robotics device raises, over-pressure and over-humidity of a leaking housing among them. A value a device does not report is NaN. GripperInfoTel reports what a gripper is, as the GuestPortDeviceID of its connector, and its serial number, model number and firmware version, every minute. Both carry the guest port of the gripper, so that two grippers can be told apart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 618bf0b commit f74c67b

2 files changed

Lines changed: 65 additions & 0 deletions

File tree

‎protobuf_definitions/message_formats.proto‎

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,61 @@ message Gripper {
320320
ManipulatorPose moving_to = 8; // Named pose the arm is moving towards, if any.
321321
}
322322

323+
// Hardware status flags a device of a gripper raises about itself, named as a Reach Robotics device names them.
324+
message GripperHardwareStatus {
325+
bool flash_failed_read = 1; // Reading the device's flash memory failed.
326+
bool over_humidity = 2; // Humidity in the housing is too high: water may have got in.
327+
bool over_temperature = 3; // The housing is too hot.
328+
bool comms_serial_error = 4; // Error on the serial line.
329+
bool comms_crc_error = 5; // A packet failed its checksum.
330+
bool motor_driver_fault = 6; // The motor driver reports a fault.
331+
bool encoder_position_error = 7; // The position encoder reads an invalid position.
332+
bool encoder_not_detected = 8; // The position encoder is not detected.
333+
bool device_axis_conflict = 9; // Another device has the same axis.
334+
bool motor_not_connected = 10; // The motor is not connected.
335+
bool motor_over_current = 11; // The motor draws too much current.
336+
bool input_encoder_position_error = 12; // The input encoder reads an invalid position.
337+
bool device_id_conflict = 13; // Another device has the same ID.
338+
bool over_pressure = 14; // Pressure in the housing is too high: the seal may have failed.
339+
bool motor_driver_over_current_and_under_voltage = 15; // Over current or under voltage in the motor driver.
340+
bool motor_driver_over_temperature = 16; // The motor driver is too hot.
341+
bool joint_service_due = 17; // The device is due for service.
342+
bool encoder_fault = 18; // The position encoder reports a fault.
343+
bool low_supply_voltage = 19; // The supply voltage is too low.
344+
bool position_report_not_received = 20; // A position report the device waits for has not arrived.
345+
}
346+
347+
// Health of one device of a gripper: a joint, or a device of its own.
348+
//
349+
// A value the device did not report is NaN.
350+
message GripperDeviceDiagnostics {
351+
uint32 device_id = 1; // Address of the device on the gripper's bus. On a Reach Robotics arm, 1 is the jaws.
352+
float supply_voltage = 2; // Supply voltage (V).
353+
float temperature = 3; // Temperature in the housing (°C).
354+
float humidity = 4; // Relative humidity in the housing (%).
355+
float internal_pressure = 5; // Pressure in the housing (bar). It holds a partial vacuum: a rise can mean a leak.
356+
float current = 6; // Motor current (A).
357+
// Flags the device reported, and those it raised since the last report. Not set if it reported none.
358+
GripperHardwareStatus hardware_status = 7;
359+
}
360+
361+
// Identity of a gripper: what it is, and what it reports of itself.
362+
//
363+
// A value the gripper does not report is empty.
364+
message GripperInfo {
365+
GuestPortNumber guest_port_number = 1; // Guest port the gripper is on.
366+
GuestPortDeviceID device_id = 2; // What the gripper is, as its guest-port connector names it.
367+
string serial_number = 3; // Serial number of the gripper, such as 5854.
368+
string model_number = 4; // Model number of the gripper, such as 5001 for a Reach Alpha 5 (RA-5001).
369+
string software_version = 5; // Firmware version of the gripper, such as 5.2.0.
370+
}
371+
372+
// Health of a gripper and its devices, for diagnostics.
373+
message GripperDiagnostics {
374+
repeated GripperDeviceDiagnostics devices = 1; // One for each device of the gripper that answered.
375+
GuestPortNumber guest_port_number = 2; // Guest port the gripper is on.
376+
}
377+
323378
// Information about a remote client.
324379
message ClientInfo {
325380
string type = 1; // The type of client (such as Blueye App, Observer App, SDK, etc).

‎protobuf_definitions/telemetry.proto‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,16 @@ message GripperTel {
273273
Gripper gripper = 1; // Gripper state.
274274
}
275275

276+
// Identity of a gripper, published every minute for each connected gripper.
277+
message GripperInfoTel {
278+
GripperInfo gripper_info = 1; // Gripper identity.
279+
}
280+
281+
// Health of a gripper, published every few seconds for each connected gripper that reports it.
282+
message GripperDiagnosticsTel {
283+
GripperDiagnostics gripper_diagnostics = 1; // Gripper diagnostics.
284+
}
285+
276286
// GuestPort current readings.
277287
message GuestPortCurrentTel {
278288
GuestPortCurrent current = 1; // Guest port current readings.

0 commit comments

Comments
 (0)