End of arm and cliff sensor checks failing when performing system check

Hello!
I’m just starting out with working with the Stretch and am running into some issues when running stretch_robot_system_check.py. The output is below:

Summary

hello-robot@stretch-re1-1053:~$ stretch_robot_system_check.py
For use with S T R E T C H ™ RESEARCH EDITION from Hello Robot Inc.

---- Checking Devices ----
[Pass] : hello-wacc
[Pass] : hello-motor-left-wheel
[Pass] : hello-motor-arm
[Pass] : hello-dynamixel-wrist
[Pass] : hello-motor-right-wheel
[Pass] : hello-motor-lift
[Pass] : hello-pimu
[Pass] : hello-respeaker
[Pass] : hello-lrf
[Pass] : hello-dynamixel-head

---- Checking Pimu ----
[Pass] Voltage = 13.6170089245
[Pass] Current = 1.84335316367
[Pass] Temperature = 30.6443610252
[Fail] Cliff-0 = 41.2888183594 out of range -50 to 20
[Fail] Cliff-1 = 22.8532104492 out of range -50 to 20
[Fail] Cliff-2 = 47.4836425781 out of range -50 to 20
[Fail] Cliff-3 = 46.3931274414 out of range -50 to 20
[Pass] IMU AZ = -9.77453422546
[Pass] IMU Pitch = -3.41267251968
[Pass] IMU Roll = 1.5562286377

---- Checking EndOfArm ----
[Fail] Ping of: wrist_yaw
[Fail] Not Calibrated: wrist_yaw

[Fail] Ping of: stretch_gripper
[Fail] Not Calibrated: stretch_gripper

---- Checking Head ----
[Pass] Ping of: head_tilt

[Pass] Ping of: head_pan

---- Checking Wacc ----
[Pass] AX = 9.60655403137

---- Checking hello-motor-left-wheel ----
[Pass] Position = -2.42438435555

---- Checking hello-motor-right-wheel ----
[Pass] Position = -0.974644005299

---- Checking hello-motor-arm ----
[Pass] Position = 14.5796604156
[Pass] Position Calibrated = True

---- Checking hello-motor-lift ----
[Pass] Position = 62.8315010071
[Pass] Position Calibrated = True

---- Checking for Intel D435i ----
Bus 002 Device 002: ID 8086:0b3a Intel Corp.
[Pass] : Device found

As you can see, the system is failing to ping the end of arm components and the cliff sensor readings are out of range. The homing procedure runs without any issues but doesn’t resolve problems in the system check.

Regarding the end of arm issue, I am able to run Xbox teleop and can jog all the individual wrist joints (robot was shipped with the dex wrist) and the gripper without any noticeable problems. The output when running stretch_gripper_jog.py and stretch_dex_wrist_jog.py for pitch, roll, and yaw respectively, is below.

Summary

— StretchGripper ----
Position (%) 1.34428678118
----- HelloXL430 ------
Name stretch_gripper
Position (rad) 0.0828349625458
Position (deg) 4.74609375
Position (ticks) 4071
Velocity (rad/s) 0.0
Velocity (ticks/s) 0
Effort (%) -1.66015625
Effort (ticks) -17
Temp 44.0
Comm Errors 0
Hardware Error 0
Hardware Error: Input Voltage Error: False
Hardware Error: Overheating Error: False
Hardware Error: Motor Encoder Error: False
Hardware Error: Electrical Shock Error: False
Hardware Error: Overload Error: False
Timestamp PC 1624998226.31
Range (ticks) [0, 6415]
Range (rad) [ -6.16200082494 , 3.67848592935 ]
Stalled True
Stall Overload False
Is Calibrated 1

----- HelloXL430 ------
Name wrist_pitch
Position (rad) 0.561436968366
Position (deg) 32.16796875
Position (ticks) 658
Velocity (rad/s) 0.0
Velocity (ticks/s) 0
Effort (%) -5.2734375
Effort (ticks) -54
Temp 31.0
Comm Errors 0
Hardware Error 0
Hardware Error: Input Voltage Error: False
Hardware Error: Overheating Error: False
Hardware Error: Motor Encoder Error: False
Hardware Error: Electrical Shock Error: False
Hardware Error: Overload Error: False
Timestamp PC 1624995377.29
Range (ticks) [650, 2048]
Range (rad) [ 0.573708814669 , -1.57079632679 ]
Stalled True
Stall Overload False
Is Calibrated 0

----- HelloXL430 ------
Name wrist_roll
Position (rad) -1.56926234601
Position (deg) -89.912109375
Position (ticks) 1025
Velocity (rad/s) 0.0
Velocity (ticks/s) 0
Effort (%) -0.1953125
Effort (ticks) -2
Temp 33.0
Comm Errors 0
Hardware Error 0
Hardware Error: Input Voltage Error: False
Hardware Error: Overheating Error: False
Hardware Error: Motor Encoder Error: False
Hardware Error: Electrical Shock Error: False
Hardware Error: Overload Error: False
Timestamp PC 1624995397.59
Range (ticks) [0, 4095]
Range (rad) [ -3.14159265359 , 3.1400586728 ]
Stalled True
Stall Overload False
Is Calibrated 0

----- HelloXL430 ------
Name wrist_yaw
Position (rad) 1.5704128316
Position (deg) 89.9780273438
Position (ticks) 4718
Velocity (rad/s) 0.0
Velocity (ticks/s) 0
Effort (%) 0.0
Effort (ticks) 0
Temp 41.0
Comm Errors 0
Hardware Error 0
Hardware Error: Input Voltage Error: False
Hardware Error: Overheating Error: False
Hardware Error: Motor Encoder Error: False
Hardware Error: Electrical Shock Error: False
Hardware Error: Overload Error: False
Timestamp PC 1624995416.48
Range (ticks) [0, 9340]
Range (rad) [ 4.58596339712 , -1.38377850241 ]
Stalled True
Stall Overload False
Is Calibrated 1

Any advice you might have for resolving the issues with the cliff sensors and the end of arm components would be much appreciated! Thank you for your help!

After performing a complete shutdown and running some more tests, I started getting the “Pull Status IOError on /dev/hello-dynamixel-wrist” error when running Xbox teleop, which led me to this previous forum post on the topic. One of the servo cable connectors had indeed been completely unseated. I’ll give another update once I get a chance to do some more investigating on what might have caused this (I only recently started working with the robot) and on whether reconnecting the cable fully resolved the problem. Sorry for the trouble!

Hello,

The cliff sensors likely just need to be recalibrated to your floor surface. We calibrate them to be approximately zero value when on a concrete floor. Carpeting or different surface reflectivity can alter the reported values. To calibrate run RE1_cliff_sensor_calibrate.py

For the Dex Wrist it seems it may be a configuration issue. Can you provide a log file of the output from running stretch_params.py as well as the output from running pip2 list | grep hello.

Thanks!

1 Like

Thank you for getting back to me so quickly!

I tried running RE1_cliff_sensor_calibrate.py, however, the calibration failed with out-of-range errors. Here is the output from where the calibration script fails:

Summary

Got cliff zeros of: [600.2450213623047, 563.0357232666015, 556.1849993896484, 554.4704211425782]
Cliff-zero-0 out of range
Calibration failed…

For the Dex Wrist, the output of stretch_params.py can be found at this link (the character count exceeds what is allowed here and the forum doesn’t allow .txt attachments). Here is the output I got from trying pip2 list | grep hello:

Summary

hello-robot@stretch-re1-1053:~$ pip2 list | grep hello
DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
hello-robot-stretch-body (0.1.1)
hello-robot-stretch-body-tools (0.1.0)
hello-robot-stretch-factory (0.1.2)
hello-robot-stretch-tool-share (0.1.3)

Upon closer inspection of the servo cables, it looks like they have actually been getting damaged during the homing movement. I’ve attached an image of the damage to the cables and a gif of how the cables are getting caught and chewed up during rotation of the wrist. The cables look like they are close to being severed and definitely need to be replaced.

dex_wrist_damaging_cables

Sorry to see you’re having trouble with the beta Dex Wrist! Thanks for uploading the .gif, that’s very helpful and its clear to see how this damage happened. Feedback like this will directly help us improve the product before its full release.

While we discuss the proper fix to prevent this damage in the future, you should go ahead and replace this cable if you haven’t already - I believe there should be a spare in the Spare Parts bag that shipped with the robot.

1 Like

Regarding the cliff sensor calibration, the latest version of Stretch Factory (v0.1.4+) should allow you to successfully calibrate. Try:

>>$ pip2 install --upgrade hello-robot-stretch-factory
>>$ RE1_cliff_sensor_calibrate.py
1 Like

Updating Stretch Factory and recalibrating did the trick for the cliff sensor issue! Thank you so much for your help.

I replaced the servo wire but am unfortunately still experiencing the system check failure for the end of the arm. As before, I can still control the wrist and gripper in teleop/while homing just fine - it’s just that system check is failing to ping the wrist yaw and gripper.

Regarding the failure to ping during stretch_robot_system_check.py, this is a bug that has been fixed in the latest release of stretch-body-tools. Try:

>>$ pip2 install --upgrade hello-robot-stretch-body-tools

, to install version 0.1.1( or greater).

1 Like

That worked! The system check (which now checks the wrist pitch and roll as well) is able to ping all of the end-of-arm components. Thank you again for looking into this issue for me!

Just curious, is there a recommended way to calibrate the wrist pitch and roll since the homing procedure doesn’t currently do so?

The wrist pitch and roll should not require calibration as the servos use the encoders in absolute mode. The wrist yaw and gripper servos require calibration as they are in multi-turn mode (which therefore use the encoders in incremental mode).

1 Like