Beta Dex Wrist Ping Failure - DynamixelCommError

Hello! I’m working with a Stretch with a Beta Dex Wrist, and I’m having some trouble with the wrist motors. I set up my environment using the Dex Wrist Installation Guide, and at first, I was briefly able to drive all three DOF of the wrist using the xbox and keyboard teleop.py scripts. After some use, and a Stretch reboot, the Stretch system check now reads:

lamsey@stretch-re1-1053:~$ stretch_robot_system_check.py 
For use with S T R E T C H (TM) RESEARCH EDITION from Hello Robot Inc.

Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
    self.run()
  File "/home/lamsey/.local/lib/python2.7/site-packages/stretch_body/robot.py", line 84, in run
    self.robot.collision.step()
  File "/home/lamsey/.local/lib/python2.7/site-packages/stretch_body/robot_collision.py", line 81, in step
    new_limits=m.step(status)
  File "/home/lamsey/.local/lib/python2.7/site-packages/stretch_tool_share/stretch_dex_wrist/collision_model.py", line 19, in step
    x_roll=status['end_of_arm']['wrist_roll']['pos']
KeyError: 'wrist_roll'


---- 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.5132551193
[Pass] Current = 2.09771637969
[Pass] Temperature = 30.7234678513
[Pass] Cliff-0 = 5.6728515625
[Pass] Cliff-1 = -5.36968994141
[Pass] Cliff-2 = -11.794128418
[Pass] Cliff-3 = -5.93902587891
[Pass] IMU AZ = -9.80333328247
[Pass] IMU Pitch = -2.82402253151
[Pass] IMU Roll = 2.2745513916


---- Checking EndOfArm ----
Traceback (most recent call last):
  File "/home/lamsey/.local/bin/stretch_robot_system_check.py", line 78, in <module>
    if w.motors[mk].do_ping():
  File "/home/lamsey/.local/lib/python2.7/site-packages/stretch_body/dynamixel_hello_XL430.py", line 99, in do_ping
    return self.motor.do_ping(verbose)
  File "/home/lamsey/.local/lib/python2.7/site-packages/stretch_body/dynamixel_XL430.py", line 249, in do_ping
    if self.handle_comm_result('XL430_PING', dxl_comm_result, dxl_error):
  File "/home/lamsey/.local/lib/python2.7/site-packages/stretch_body/dynamixel_XL430.py", line 226, in handle_comm_result
    raise DynamixelCommError
stretch_body.dynamixel_XL430.DynamixelCommError

Also, running RE1_dynamixel_id_scan.py /dev/hello-dynamixel-wrist --baud 115200 (as well as --baud 57600 and --baud 1000000) yields “ping failed” for all 0-24 IDs. I am able to see the head IDs when I scan for those.

We’ve been having trouble with the wrist cabling, as detailed here. However, I checked the cabling, and nothing seems severed or unseated. When I run RE1_dynamixel_id_scan.py /dev/hello-dynamixel-wrist --baud 115200, all of the Dex Wrist motors hold their position, so they are receiving power. If the motors are unplugged and replugged, they no longer hold position until that command is run again.

Last, my stretch_re1_user_params.yaml is:

factory_params: stretch_re1_factory_params.yaml
tool_params: stretch_re1_tool_params.yaml
# You can override factory settings for each device here
# Otherwise defaults to the factory 'robot_params'
# USE WITH CAUTION. IT IS POSSIBLE TO CAUSE UNSAFE BEHAVIOR OF THE ROBOT #

params:
  - stretch_tool_share.stretch_dex_wrist.params

tool_none:
  baud: 11520
tool_stretch_gripper:
  baud: 115200

head:
  baud: 115200
wrist_yaw:
  baud: 115200
head_tilt:
  baud: 115200
head_pan:
  baud: 115200

stretch_gripper:
  range_t:
    - 0
    - 6415
  zero_t: 4017
  baud: 115200

lift:
  i_feedforward: 0.75

hello-motor-lift:
  gains:
    i_safety_feedforward: 0.75

end_of_arm:
  devices:
    stretch_gripper:
      py_class_name: StretchGripper
      py_module_name: stretch_body.stretch_gripper
robot:
  use_collision_manager: 1
  tool: tool_stretch_dex_wrist
  log_to_console: 0

tool_stretch_dex_wrist:
  use_group_sync_read: 0

Any advice on troubleshooting would be appreciated! We’re out of spare Dynamixel cables, so I haven’t been able to try changing those out. I’m happy to provide any more info, if needed.

Hi @lamsey, sorry to hear about the issues. Can you provide a few more things so we can debug:

  • Output from stretch_params.py
  • Output from pip2 list | grep hello

I believe replacement cables are being shipped out today.

Thanks for the reply! Here’s the stretch_params output, and pip2 list | grep hello is below.

hello-robot-stretch-body (0.1.4)
hello-robot-stretch-body-tools (0.1.3)
hello-robot-stretch-factory (0.1.5)
hello-robot-stretch-tool-share (0.1.5)

I’ll keep an eye out for the cables.

After looking through your Stretch params / installed software it appears that everything is correct (as expected).

Because RE1_dynamixel_id_scan.py fails it seems to be a hardware issue. It may be that the damaged cables in turn damaged the Dynamixel controller board (eg, the Wacc).

If the problem persists with the cables replaced then we’ll likely need to send you a new Wacc so you can replace the board as well (not too bad).

1 Like

Sorry, you can ignore that. That was a separate issue because I hadn’t updated my hello-robot-stretch-factory.

Update:

After installing a full new set of motor cables, the DynamixelCommError problems persisted. But, after installing a new WACC board, the error messages are gone! stretch_robot_system_check output looks normal, and the homing sequence works as expected.

I appreciate the help!