Lift joint is not working

Hi ! Thank you for making cool robot.
I need help to make this cool robot run again.

[Situation]
Lift joint is not working. It seems servo is not turned on.

[What I have tried 1]
The output of “stretch_robot_system_check” is below.

For use with S T R E T C H (R) RESEARCH EDITION from Hello Robot Inc.
---------------------------------------------------------------------

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

---- Checking Pimu ----
[Pass] Voltage = 13.14063549041748
[Pass] Current = 3.2714260851635655
[Pass] Temperature = 32.25264289440253
[Pass] Cliff-0 = -10.34271240234375
[Pass] Cliff-1 = 1.0858154296875
[Fail] Cliff-2 = 114.51666259765625 out of range -50 to 20
[Pass] Cliff-3 = -1.584228515625
[Fail] IMU AZ = -9.138444900512695 out of range -10.1 to -9.5
[Pass] IMU Pitch = -3.2207500934600826
[Pass] IMU Roll = 1.6123046875


---- Checking EndOfArm ----
[Pass] Ping of: stretch_gripper
[Pass] Calibrated: stretch_gripper

[Pass] Ping of: wrist_yaw
[Pass] Calibrated: wrist_yaw


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

[Pass] Ping of: head_tilt


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


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


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


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


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


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

[What I have tried 2]
After killing stretch_xbox* process, executing stretch_xbox_controller_teleop leads to moving all joints except for lift joint.

Thank you for your support.

Hey @mnishiura, We are glad you are using the Stretch robot. Also we are sorry you are experiencing an issue with the Lift joint. Would you mind giving us more information using some debug steps I have mentioned below.

  • Try homing the lift joint using cmd: stretch_lift_home.py . What happens? and can you send the output.
  • Try jogging the lift joint using cmd: stretch_lift_jog.py. This cmd ideally should allow you to move the lift up/down by pressing the U/D keys. But this cmd will also output the Lift stepper motor’s status data that is useful for debugging. Can you also send the output of this step.

Best,
Mohamed Fazil

Hi @Mohamed_Fazil ! Thank you so much for your quick response.

1.Result of using stretch_lift_home.py
Looks like Lift joint doesn’t move at all.
Output is below.

For use with S T R E T C H (R) RESEARCH EDITION from Hello Robot Inc.
---------------------------------------------------------------------

Homing lift...
Upward contact detected at motor position (rad) 114.06511688232422 1.089241631170602
Marking lift position to (m) 1.0992366660080726

2.Result of using stretch_lift_home.py
Lift joint doesn’t move in both direction.
Output when sending U cmd.

----- Lift ------ 
Pos (m):  1.099194983533576
Vel (m/s):  9.683512257303704e-05
Force (N):  -0.00028946820427311337
Soft motion limits (m) [0.0, 1.0992366660080726]
Timestamp PC (s): 1671194758.1762912
-----------
Mode MODE_SAFETY
x_des (rad) 0 (deg) 0.0
v_des (rad) 12 (deg) 687.5493541569879
a_des (rad) 15 (deg) 859.4366926962349
Stiffness 1
Feedforward 0
Pos (rad) 115.10742950439453 (deg) 6595.169901201456
Vel (rad/s) 0.010140550322830677 (deg) 0.5810107354382222
Effort 41.72697448730469
Current (A) 0.5399961404239431
Error (deg) 0.0
Debug 0.0
Guarded Events: 13
Diag 00000000000000000000000100000101
       Position Calibrated: True
       Runstop on: False
       Near Pos Setpoint: True
       Near Vel Setpoint: False
       Is Moving: False
       Is Moving Filtered: 0
       At Current Limit: False
       Is MG Accelerating: False
       Is MG Moving: False
       Encoder Calibration in Flash: True
       In Guarded Event: False
       In Safety Event: False
       Waiting on Sync: False
Waypoint Trajectory
       State: idle
       Setpoint: (rad) 0.0 | (deg) 0.0
       Segment ID: 0
Timestamp (s) 1671194758.1617513
Read error 0
Board variant: Stepper.0
Firmware version: Stepper.v0.2.0p1

Output when sending D cmd.

----- Lift ------ 
Pos (m):  1.0991983348797287
Vel (m/s):  -0.000771095913895882
Force (N):  0.0002955268411070078
Soft motion limits (m) [0.0, 1.0992366660080726]
Timestamp PC (s): 1671193980.6438053
-----------
Mode MODE_SAFETY
x_des (rad) 31.41592653589793 (deg) 1800.0
v_des (rad) 9.948376736367681 (deg) 570.0000000000001
a_des (rad) 15.707963267948966 (deg) 900.0
Stiffness 1.0
Feedforward 0.54
Pos (rad) 115.10778045654297 (deg) 6595.190009278373
Vel (rad/s) -0.08074897527694702 (deg) -4.626575483375293
Effort 41.727577209472656
Current (A) 0.5400039403578815
Error (deg) 0.049804688885941695
Debug 0.0
Guarded Events: 11
Diag 00000000000000000000001100000101
       Position Calibrated: True
       Runstop on: False
       Near Pos Setpoint: True
       Near Vel Setpoint: False
       Is Moving: False
       Is Moving Filtered: 0
       At Current Limit: False
       Is MG Accelerating: False
       Is MG Moving: False
       Encoder Calibration in Flash: True
       In Guarded Event: True
       In Safety Event: False
       Waiting on Sync: False
Waypoint Trajectory
       State: idle
       Setpoint: (rad) 0.0 | (deg) 0.0
       Segment ID: 0
Timestamp (s) 1671193980.6770027
Read error 0
Board variant: Stepper.0
Firmware version: Stepper.v0.2.0p1

Thanks for your support.

Best,
Manabu

Hey @mnishiura , thank you for sending the outputs.
Looking at your outputs, during the stretch_lift_home.py command, an upward contact has been detected even without movement, and your lift motor status looks normal.
Therefore I guess there is an issue with the contact models sensitivity setting for your lift stepper motor, which might be preventing you from moving the lift.

Could you give us more information using some steps I have mentioned below before we can dive in to debug the sensivity?

  • Your robot serial number? It is printed on the trunk
  • When the robot is powered off, backdrive the Lift to the Top and then the Bottom. Is there any part of the Lift’s range where it gets tighter/harder due to some sort of friction?
  • What is the output of the following cmd: pip3 list | grep hello
  • What is the output of the following cmd: stretch_params.py | grep effort_pct | grep lift ?

Hi, @Mohamed_Fazil . Thanks for your suggesttion.

  1. Serial Number is stretch.re1.1100
  2. There are some part where some sort of friction occurs when moving arm from bottom to top and from top to bottom.
    I attach video link. https://youtube.com/shorts/jptzbTlMqMI
  3. The output is following.
hello-robot-stretch-body           0.3.4
hello-robot-stretch-body-tools     0.3.1
hello-robot-stretch-body-tools-py3 0.0.8
hello-robot-stretch-factory        0.2.7
hello-robot-stretch-tool-share     0.2.1
  1. Executing stretch_params.py | grep effort_pct gives nothing. So the output when executing stretch_params.py | grep effortis following.
stretch_body.robot_params.nominal_params                               param.head_pan.stall_max_effort                                        20.0                          
stretch_body.robot_params.nominal_params                               param.head_tilt.stall_max_effort                                       20.0                          
stretch_body.robot_params.nominal_params                               param.hello-motor-arm.gains.effort_LPF                                 10.0                          
stretch_body.robot_params.nominal_params                               param.hello-motor-arm.gains.flip_effort_polarity                       0                             
stretch_body.robot_params.nominal_params                               param.hello-motor-left-wheel.gains.effort_LPF                          2.0                           
stretch_body.robot_params.nominal_params                               param.hello-motor-left-wheel.gains.flip_effort_polarity                1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.effort_LPF                                2.0                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.flip_effort_polarity                      1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-right-wheel.gains.effort_LPF                         2.0                           
stretch_body.robot_params.nominal_params                               param.hello-motor-right-wheel.gains.flip_effort_polarity               0                             
stretch_body.robot_params.nominal_params                               param.stretch_gripper.stall_max_effort                                 20.0                          
stretch_body.robot_params.nominal_params                               param.wrist_yaw.stall_max_effort                                       20.0

And the output when executing stretch_params.py | grep lift is following.

stretch_body.robot_params.nominal_params                               param.base.sentry_max_velocity.max_lift_height_m                       0.3                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.effort_LPF                                2.0                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.enable_guarded_mode                       1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.enable_runstop                            1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.enable_sync_mode                          1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.flip_effort_polarity                      1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.flip_encoder_polarity                     1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.iMax_neg                                  -3.2                          
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.iMax_pos                                  3.2                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.i_contact_neg                             -1.5                          
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.i_contact_pos                             2.0                           
stretch_configuration_params.yaml                                      param.hello-motor-lift.gains.i_safety_feedforward                      0.54                          
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.pKd_d                                     20.0                          
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.pKi_d                                     0.05                          
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.pKi_limit                                 100.0                         
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.pKp_d                                     10.0                          
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.pLPF                                      60                            
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.phase_advance_d                           1.8                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.pos_near_setpoint_d                       0.5                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.safety_hold                               1                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.safety_stiffness                          0.0                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vKd_d                                     0                             
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vKi_d                                     0.005                         
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vKi_limit                                 200                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vKp_d                                     0.2                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vLPF                                      30                            
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vTe_d                                     50                            
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vel_near_setpoint_d                       3.5                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.gains.vel_status_LPF                            10.0                          
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.holding_torque                                  1.9                           
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.motion.accel                                    15                            
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.motion.vel                                      12                            
stretch_body.robot_params.nominal_params                               param.hello-motor-lift.rated_current                                   2.8                           
stretch_configuration_params.yaml                                      param.hello-motor-lift.serial_no                                       CE4FBC8A50574C52362E3120FF170221
stretch_body.robot_params.nominal_params                               param.lift.belt_pitch_m                                                0.005                         
stretch_body.robot_params.nominal_params                               param.lift.force_N_per_A                                               75.0                          
stretch_body.robot_params.nominal_params                               param.lift.motion.default.accel_m                                      0.15                          
stretch_body.robot_params.nominal_params                               param.lift.motion.default.vel_m                                        0.095                         
stretch_body.robot_params.nominal_params                               param.lift.motion.fast.accel_m                                         0.2                           
stretch_body.robot_params.nominal_params                               param.lift.motion.fast.vel_m                                           0.12                          
stretch_body.robot_params.nominal_params                               param.lift.motion.max.accel_m                                          0.3                           
stretch_body.robot_params.nominal_params                               param.lift.motion.max.vel_m                                            0.15                          
stretch_body.robot_params.nominal_params                               param.lift.motion.slow.accel_m                                         0.05                          
stretch_body.robot_params.nominal_params                               param.lift.motion.slow.vel_m                                           0.05                          
stretch_body.robot_params.nominal_params                               param.lift.motion.trajectory_max.vel_m                                 0.2                           
stretch_body.robot_params.nominal_params                               param.lift.motion.trajectory_max.accel_m                               0.3                           
stretch_body.robot_params.nominal_params                               param.lift.pinion_t                                                    12                            
stretch_configuration_params.yaml                                      param.lift.contact_thresh_N                                            [-64.3703682899475, 67.74031286800607]
stretch_configuration_params.yaml                                      param.lift.contact_thresh_max_N                                        [-100, 100]                   
stretch_configuration_params.yaml                                      param.lift.homing_force_N                                              [-70, 70]                     
stretch_configuration_params.yaml                                      param.lift.i_feedforward                                               0.54                          
stretch_configuration_params.yaml                                      param.lift.range_m                                                     [0.0, 1.0992366660080726]     
stretch_body.robot_params.nominal_params                               param.robot.stow.lift                                                  0.2

Thank you so much for your help.

Hey @mnishiura; thank you for sending the detailed results and outputs. It does seem like, over time, the Lift’s mechanism has accumulated some friction in certain places. This might be preventing the Lift from moving as it is taking more force than the defined contact_thresh_N parameter making the Lift system think it is in contact. But we can try to solve this issue by increasing these contact threshold parameters for the Lift.

Start by running the following command to identify the current settings for these parameters:

stretch_params.py | grep lift | grep contact_thresh_N | grep homing_force_N

The above command should give out the current settings of the Lift’s contact_thresh_N and homing_force_N parameters used during homing and moving the joint, respectively.
For example, if one of the parameters returns [-70, 70], then -70 is the homing effort moving down, and 70 is the homing effort moving up.
Next, modify the “stretch_re1_user_params.yaml” file in “~/stretch_user/stretch-rex-xxxx” folder to include the following at the end of the file:

lift:
  contact_thresh_N:
  -  <effort threshold moving in while homing>
  -  <effort threshold moving out while homing>
  contact_thresh_max_N:
  -  <effort threshold moving>
  -  <effort threshold moving>

Replace the <> parts with the corresponding values grepped from stretch_params.py and increase the magnitude of the values by 10 units until the Lift can reliably home against the end-stop with cmd stretch_lift_home.py and jogged with cmd stretch_lift_jog.py.
Let us know how this goes and happy to assist further.

Hi @Mohamed_Fazil . Thank you for your support.
As you suggested, I get parameters of contact_thresh_N , contact_thresh_max_N and homing_force_N and changed these parameters using stretch_re1_user_params.yaml file. I increased contact_thresh_N to [-300, 300] and homing_force_N [-100, 100] and tried stretch_lift_jog, but the lift joint did not move at all. And the stretch_lift_home.py outputs following.

For use with S T R E T C H (R) RESEARCH EDITION from Hello Robot Inc.
---------------------------------------------------------------------

Homing lift...
Upward contact detected at motor position (rad) 115.1117935180664 1.0992366567944318
Marking lift position to (m) 1.0992366660080726

Thanks.

I also increased contact_threshold_N to 400 and tried “stretch_lift_home.py”.
The “upward contact detected” message disappears, but the lift joint did not move in “homing_force_N” [-500, 500]. So there should be huge friction or internal issue.

Thanks.

Hey @mnishiura, Thank you for performing the above-mentioned debug method. I think the numbers you have mentioned are more enormous than I expected. I think it would be better to get into a support call to debug this issue. Please email us at support@hello-robot.com, and we can schedule a support call to get your robot running again.

Best,
Mohamed Fazil