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.
- Serial Number is
stretch.re1.1100
- 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
- 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
- Executing
stretch_params.py | grep effort_pct
gives nothing. So the output when executing stretch_params.py | grep effort
is 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