Replies: 3 comments 10 replies
-
Reporting here some comments collected internally. From @traversaro
From @marcoaccame
|
Beta Was this translation helpful? Give feedback.
-
Hi @S-Dafarra hfaultdetect-2021-12-06_13.27.54.mp4The displayed message is the same one displayed in the We had an internal discussion and we think that it might be useful to expose the the Motion Controller error category: {eoerror_value_MC_motor_external_fault, "MC: exernal fault button pressed."},
{eoerror_value_MC_motor_overcurrent, "MC: overcurrent. The motor has been turned off to prevent it from being damaged by an impulsive spike of current. par16 = ID of joint."},
{eoerror_value_MC_motor_i2t_limit, "MC: i2t limit exceeded. The motor has been turned off to prevent it from being damaged by overheating due to a continuous high current. par16 = ID of joint."},
{eoerror_value_MC_motor_hallsensors, "MC: 2FOC hall sensors fault. Invalid sequence in motor Hall effect sensors, please check motor hall cable connections. par16 = ID of joint."},
{eoerror_value_MC_motor_can_invalid_prot,"MC: 2FOC CAN invalid protocol. The EMS and 2FOC firmware versions are incompatible, please update. par16 = ID of joint."},
{eoerror_value_MC_motor_can_generic, "MC: 2FOC CAN generic error. Errors happened in the CAN bus between the EMS and the 2FOC board. par16 = ID of joint."},
{eoerror_value_MC_motor_can_no_answer, "MC: 2FOC CAN no answer. The communication between the EMS and the 2FOC board has been lost for more than 50 ms. par16 = ID of joint."},
{eoerror_value_MC_axis_torque_sens, "MC: torque sensor timeout. The joint is in a compliant interaction mode or torque control mode, and data from torque sensor have been unavailable for more than 100 ms. par16 = ID of joint."},
{eoerror_value_MC_aea_abs_enc_invalid, "MC: AEA encoder invalid data. Hardware problem in the magnetic position sensor of the joint caused invalid position readings. par16 = AEA port (msb) and ID of joint (lsb)."},
{eoerror_value_MC_aea_abs_enc_timeout, "MC: AEA encoder timeout. No answer from the magnetic position sensor of the joint (cable broken?). par16 = AEA port (msb) and ID of joint (lsb)."},
{eoerror_value_MC_aea_abs_enc_spikes, "MC: AEA encoder has spikes. There is impulsive noise in the measures of the magnetic position sensor of the joint. par16 = AEA port (msb) and ID of joint (lsb)."},
{eoerror_value_MC_motor_qencoder_dirty, "MC: 2FOC quadrature encoder dirty. The number of thicks in a complete revolution of the motor was lower than expected, the optical disks need to be cleaned. In par64 0xFF is the mask of raw encoder value. par16 = ID of joint."},
{eoerror_value_MC_motor_qencoder_index, "MC: 2FOC quadrature encoder index broken. The reference special thick was not detected during a complete revolution of the motor, please check motor encoder cables. In par64 0xFF is the mask of raw encoder value. par16 = ID of joint."},
{eoerror_value_MC_motor_qencoder_phase, "MC: 2FOC quadrature encoder phase broken. The motor encoder is not counting even if the motor is moving, please check motor encoder cables. In par64 0xFF is the mask of raw encoder value. par16 = ID of joint."},
{eoerror_value_MC_generic_error, "MC: generic motor error (see 64 bit mask parameter)."},
{eoerror_value_MC_motor_wrong_state, "MC: 2FOC wrong state. The 2FOC motor controller is in a control state different from required by the EMS. In par64 0xF0 is the mask of requested state, 0x0F is the mask of actual state. par16 = ID of joint."},
{eoerror_value_MC_joint_hard_limit, "MC: hard limit reached. The joint position is outside its hardware boundaries. par16 = ID of joint."},
{eoerror_value_MC_motor_qencoder_phase_disappeared, "MC: qenc error has disappeared, warning counter has been reset."} As a first iteration of this feature implementation we could support the above states, and expand them in the future. For example, lower-level fault states can be triggered by the 2FOC boards: typedef union
{
struct
{
...
unsigned CAN_BufferOverRun :1;
unsigned SetpointExpired :1;
...
unsigned SiliconRevisionFault :1;
...
} bits;
uint32_t bitmask;
} MotorFaultState; https://github.com/robotology/icub-firmware/blob/master/emBODY/eBcode/arch-arm/embobj/plus/mc/Motor.h#L60 |
Beta Was this translation helpful? Give feedback.
-
PR opened in icub-main: robotology/icub-main#779 |
Beta Was this translation helpful? Give feedback.
-
Problem
Often during demos in general, it may happen that a joint goes in hardware fault. In this case, the classical workflow would consist in looking for the logger, searching for the last
yarprobotinterface
entry, searching for the last message regarding the part that went in hardware fault.Usually, during long testing sessions, the entries on the
yarplogger
could be close to 100. This complicates the finding of the correctyarprobotinterface
entry, and it might be quite easy to get confused with previous runs of theyarprobotinterface
. Hence, a common trick is to order the entries by "Last heard", but at this point, if there are other modules running and printing in the logger, we start playing whack-a-mole trying to catch the correct entry.Once we have opened the correct log entry, then we have to scroll through potentially thousands of lines (see #558) to find the reason why that specific joint went in hardware fault.
Things get even more complicated if other joints in the same part are also in hardware fault because of different reasons.
All this may take easily tens of minutes, and during a potentially stressful situation, so a typical result is that we give up and we simply try to restart the joint. This is clearly not ideal since it will not help at all in avoiding this problem to occur again in the future.
Proposed solution
A possible solution to this problem would be to have the reason why a joint went in hardware fault directly inside the
yarpmotorgui
. The idea would be that in case a joint goes inVOCAB_CM_HW_FAULT
, a small text box is displayed on thepartItem
displaying the reason for the hardware fault, retrieved directly from the board.cc @traversaro @randaz81 @pattacini @marcoaccame @lornat75 @drdanz @Nicogene @maggia80
Beta Was this translation helpful? Give feedback.
All reactions