Head glitch after turning left found when teleoperating with the web interface

Good evening,

I have experienced a couple of times an error related with the head motors after reaching the hard stop when turning left. The camera does not respond after turning left or right (it only responds to up/down commands) and the preset views for the “Drive” “Arm L” and “Arm H” also miss their reference. The camera attempts to move to each preset but adding some incremental value and it ends up looking exactly the opposite way.

I will try to duplicate this tomorrow and get pictures and the corresponding log files, but I just wanted to post in case anyone has experienced this as well.

Hi. Can you tell us what serial number your robot has? You can find the tag in the ‘trunk’.

We recently found a production issue with a few of the earlier robots where the calibration offset on the head pan encoder is off. This causes the actuator to hit its joint hardstop and for the Dynamixel servo then to have an overload error.

Fortunately there is a software fix that we’ll post tomorrow. Assuming this is the issue with your robot this fix will resolve your issue.

It is stretch.re1.1008

Thanks. We’ve confirmed that your robot has this production issue. We will have a fix posted by EOD.

Hi. we’ve posted a fix for this issue. Please follow the instructions here:

Let us know how it goes. We’d be happy to walk you through it offline as well if you need help. Just emails us at support@hello-robot.com.

I was following your instructions, after adding the bit of code to the YAML files. And when I tried to run the stretch_head_jog.py I got this message:

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

Traceback (most recent call last):
File “/home/hello-robot/.local/bin/stretch_head_jog.py”, line 12, in
h=head.Head()
File “/home/hello-robot/.local/lib/python2.7/site-packages/stretch_body/head.py”, line 15, in init
self.add_motor(DynamixelHelloXL430(j, self))
File “/home/hello-robot/.local/lib/python2.7/site-packages/stretch_body/dynamixel_hello_XL430.py”, line 24, in init
self.motor = DynamixelXL430(dxl_id=self.params[‘id’], usb=self.params[‘usb_name’], port_handler=chain.port_handler, pt_lock=chain.pt_lock)
KeyError: ‘id’

I tried the system check and the dynamixel device passed the test. But then when it’s gonna check the calibration shows the same error.

hello-robot@stretch-re1-1008:~$ 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 = 12.94921875
[Pass] Current = 2.58509341408
[Pass] Temperature = 33.0328525641
[Fail] Cliff-0 = 46.2876586914 out of range -50 to 20
[Fail] Cliff-1 = 23.6959228516 out of range -50 to 20
[Fail] Cliff-2 = 36.5352172852 out of range -50 to 20
[Fail] Cliff-3 = 43.7071533203 out of range -50 to 20
[Pass] IMU AZ = -9.74048423767
[Pass] IMU Pitch = -2.75486373901
[Pass] IMU Roll = 1.55169677734

---- Checking EndOfArm ----
[Dynamixel ID:013] ping Succeeded. Dynamixel model number : 1060
[Pass] Ping of: wrist_yaw
[Fail] Not Calibrated: wrist_yaw

[Dynamixel ID:014] ping Succeeded. Dynamixel model number : 1060
[Pass] Ping of: stretch_gripper
[Fail] Not Calibrated: stretch_gripper

---- Checking Head ----
Traceback (most recent call last):
File “/home/hello-robot/.local/bin/stretch_robot_system_check.py”, line 91, in
h = head.Head()
File “/home/hello-robot/.local/lib/python2.7/site-packages/stretch_body/head.py”, line 15, in init
self.add_motor(DynamixelHelloXL430(j, self))
File “/home/hello-robot/.local/lib/python2.7/site-packages/stretch_body/dynamixel_hello_XL430.py”, line 24, in init
self.motor = DynamixelXL430(dxl_id=self.params[‘id’], usb=self.params[‘usb_name’], port_handler=chain.port_handler, pt_lock=chain.pt_lock)
KeyError: ‘id’

Perhaps something is incorrect in your YAML? If you remove the added entries to your user YAML, does stretch_head_jog.py work again?

Also try

$ RE1_dynamixel_id_scan.py /dev/hello-dynamixel-head

, just to double check that the servos are actually on the bus

When I remove the added entries head_jog works again

And I tried running the dynamixel_id_scan and two of the IDs show the model number and say ping succeeded

Can you post what you added to your YAML? Unfortunately its syntax can be very sensitive to tab / spaces / etc.

I pasted this:

head_pan: #Fix for gear offset
  range_t:
  - 0
  - 3820
  req_calibration: 1
  use_multiturn: 1
  zero_t: 1155
  pwm_homing:
    - -300
    - 300

no extra enters, spaces or tabs.

That looks correct. Can you email your stretch_re1_factory_params.yaml and also stretch_re1_user_params.yaml to support@hello-robot.com? Thanks!

I got it to work. The stretch_re1_factory_params.yaml already had a section called
head_pan:

In there, there was an id value, so maybe the second appearance was just creating a new instance and leaving id blank. So I just used your bit of code and modified the corresponding values accordingly and just added the pwm_homing that wasn’t there.

I ran stretch_head_jog.py and when I pressed x for home, the head went left and returned to the front, f made it look backwards and e brought it back facing forward.

I did add your extra bit of code to the user_params.yaml in the home folder and /etc folder

Excellent. Nice work! When you have time you’ll want to redo the URDF calibration. This will be necessary to do visually guided grasping, etc. For teleoperation it shouldn’t matter.

Thank you for all your help! And your quick responses on a Friday night

Sorry to be such a pest.

But I continued with your procedures from here. And I got another weird traceback call when trying to do the head calibration.

Here’s the entire console printout. The robot moved the arm down and it gave an error after the camera looked completely down and rotated about 200 degrees to the right from its initial home position.

hello-robot@stretch-re1-1008:~$ roslaunch stretch_calibration collect_head_calibration_data.launch
… logging to /home/hello-robot/.ros/log/1f35a482-0524-11eb-8d7b-38002587e8f3/roslaunch-stretch-re1-1008-4598.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://forky.hcrlab.cs.washington.edu:37005/

SUMMARY

PARAMETERS

  • /aruco_marker_info/10/length_mm: 24
  • /aruco_marker_info/10/link: None
  • /aruco_marker_info/10/name: target_object
  • /aruco_marker_info/10/use_rgb_only: False
  • /aruco_marker_info/130/length_mm: 47
  • /aruco_marker_info/130/link: link_aruco_left_base
  • /aruco_marker_info/130/name: base_left
  • /aruco_marker_info/130/use_rgb_only: False
  • /aruco_marker_info/131/length_mm: 47
  • /aruco_marker_info/131/link: link_aruco_right_…
  • /aruco_marker_info/131/name: base_right
  • /aruco_marker_info/131/use_rgb_only: False
  • /aruco_marker_info/132/length_mm: 23.5
  • /aruco_marker_info/132/link: link_aruco_inner_…
  • /aruco_marker_info/132/name: wrist_inside
  • /aruco_marker_info/132/use_rgb_only: False
  • /aruco_marker_info/133/length_mm: 23.5
  • /aruco_marker_info/133/link: link_aruco_top_wrist
  • /aruco_marker_info/133/name: wrist_top
  • /aruco_marker_info/133/use_rgb_only: False
  • /aruco_marker_info/134/length_mm: 31.4
  • /aruco_marker_info/134/link: link_aruco_shoulder
  • /aruco_marker_info/134/name: shoulder_top
  • /aruco_marker_info/134/use_rgb_only: False
  • /aruco_marker_info/21/length_mm: 86
  • /aruco_marker_info/21/link: None
  • /aruco_marker_info/21/name: user_pointer
  • /aruco_marker_info/21/use_rgb_only: False
  • /aruco_marker_info/246/length_mm: 179.0
  • /aruco_marker_info/246/link: None
  • /aruco_marker_info/246/name: floor_0
  • /aruco_marker_info/246/use_rgb_only: False
  • /aruco_marker_info/247/length_mm: 179.0
  • /aruco_marker_info/247/link: None
  • /aruco_marker_info/247/name: floor_1
  • /aruco_marker_info/247/use_rgb_only: False
  • /aruco_marker_info/248/length_mm: 179.0
  • /aruco_marker_info/248/link: None
  • /aruco_marker_info/248/name: floor_2
  • /aruco_marker_info/248/use_rgb_only: False
  • /aruco_marker_info/249/length_mm: 179.0
  • /aruco_marker_info/249/link: None
  • /aruco_marker_info/249/name: floor_3
  • /aruco_marker_info/249/use_rgb_only: False
  • /aruco_marker_info/default/length_mm: 24
  • /aruco_marker_info/default/link: None
  • /aruco_marker_info/default/name: unknown
  • /aruco_marker_info/default/use_rgb_only: False
  • /camera/realsense2_camera/accel_fps: 63
  • /camera/realsense2_camera/accel_frame_id: camera_accel_frame
  • /camera/realsense2_camera/accel_optical_frame_id: camera_accel_opti…
  • /camera/realsense2_camera/align_depth: True
  • /camera/realsense2_camera/aligned_depth_to_color_frame_id: camera_aligned_de…
  • /camera/realsense2_camera/aligned_depth_to_fisheye1_frame_id: camera_aligned_de…
  • /camera/realsense2_camera/aligned_depth_to_fisheye2_frame_id: camera_aligned_de…
  • /camera/realsense2_camera/aligned_depth_to_fisheye_frame_id: camera_aligned_de…
  • /camera/realsense2_camera/aligned_depth_to_infra1_frame_id: camera_aligned_de…
  • /camera/realsense2_camera/aligned_depth_to_infra2_frame_id: camera_aligned_de…
  • /camera/realsense2_camera/allow_no_texture_points: True
  • /camera/realsense2_camera/base_frame_id: camera_link
  • /camera/realsense2_camera/calib_odom_file:
  • /camera/realsense2_camera/clip_distance: -2.0
  • /camera/realsense2_camera/color_fps: 15
  • /camera/realsense2_camera/color_frame_id: camera_color_frame
  • /camera/realsense2_camera/color_height: 720
  • /camera/realsense2_camera/color_optical_frame_id: camera_color_opti…
  • /camera/realsense2_camera/color_width: 1280
  • /camera/realsense2_camera/depth_fps: 15
  • /camera/realsense2_camera/depth_frame_id: camera_depth_frame
  • /camera/realsense2_camera/depth_height: 720
  • /camera/realsense2_camera/depth_optical_frame_id: camera_depth_opti…
  • /camera/realsense2_camera/depth_width: 1280
  • /camera/realsense2_camera/device_type:
  • /camera/realsense2_camera/enable_accel: True
  • /camera/realsense2_camera/enable_color: True
  • /camera/realsense2_camera/enable_depth: True
  • /camera/realsense2_camera/enable_fisheye1: False
  • /camera/realsense2_camera/enable_fisheye2: False
  • /camera/realsense2_camera/enable_fisheye: False
  • /camera/realsense2_camera/enable_gyro: False
  • /camera/realsense2_camera/enable_infra1: False
  • /camera/realsense2_camera/enable_infra2: False
  • /camera/realsense2_camera/enable_infra: False
  • /camera/realsense2_camera/enable_pointcloud: False
  • /camera/realsense2_camera/enable_pose: False
  • /camera/realsense2_camera/enable_sync: True
  • /camera/realsense2_camera/filters: pointcloud
  • /camera/realsense2_camera/fisheye1_frame_id: camera_fisheye1_f…
  • /camera/realsense2_camera/fisheye1_optical_frame_id: camera_fisheye1_o…
  • /camera/realsense2_camera/fisheye2_frame_id: camera_fisheye2_f…
  • /camera/realsense2_camera/fisheye2_optical_frame_id: camera_fisheye2_o…
  • /camera/realsense2_camera/fisheye_fps: 30
  • /camera/realsense2_camera/fisheye_frame_id: camera_fisheye_frame
  • /camera/realsense2_camera/fisheye_height: 480
  • /camera/realsense2_camera/fisheye_optical_frame_id: camera_fisheye_op…
  • /camera/realsense2_camera/fisheye_width: 640
  • /camera/realsense2_camera/gyro_fps: 200
  • /camera/realsense2_camera/gyro_frame_id: camera_gyro_frame
  • /camera/realsense2_camera/gyro_optical_frame_id: camera_gyro_optic…
  • /camera/realsense2_camera/imu_optical_frame_id: camera_imu_optica…
  • /camera/realsense2_camera/infra1_frame_id: camera_infra1_frame
  • /camera/realsense2_camera/infra1_optical_frame_id: camera_infra1_opt…
  • /camera/realsense2_camera/infra2_frame_id: camera_infra2_frame
  • /camera/realsense2_camera/infra2_optical_frame_id: camera_infra2_opt…
  • /camera/realsense2_camera/infra_fps: 30
  • /camera/realsense2_camera/infra_height: 480
  • /camera/realsense2_camera/infra_width: 640
  • /camera/realsense2_camera/initial_reset: False
  • /camera/realsense2_camera/json_file_path:
  • /camera/realsense2_camera/linear_accel_cov: 0.01
  • /camera/realsense2_camera/odom_frame_id: camera_odom_frame
  • /camera/realsense2_camera/pointcloud_texture_index: 0
  • /camera/realsense2_camera/pointcloud_texture_stream: RS2_STREAM_COLOR
  • /camera/realsense2_camera/pose_frame_id: camera_pose_frame
  • /camera/realsense2_camera/pose_optical_frame_id: camera_pose_optic…
  • /camera/realsense2_camera/publish_odom_tf: True
  • /camera/realsense2_camera/publish_tf: True
  • /camera/realsense2_camera/rosbag_filename:
  • /camera/realsense2_camera/serial_no:
  • /camera/realsense2_camera/tf_publish_rate: 0.0
  • /camera/realsense2_camera/topic_odom_in: odom_in
  • /camera/realsense2_camera/unite_imu_method:
  • /camera/realsense2_camera/usb_port_id:
  • /collect_head_calibration_data/calibration_directory: /home/hello-robot…
  • /collect_head_calibration_data/controller_calibration_file: /home/hello-robot…
  • /d435i_configure/initial_mode: High Accuracy
  • /joint_state_publisher/rate: 15.0
  • /joint_state_publisher/source_list: ['/stretch/joint_…
  • /robot_description: <?xml version="1…
  • /robot_state_publisher/publish_frequency: 15.0
  • /rosdistro: melodic
  • /rosversion: 1.14.9
  • /stretch_driver/broadcast_odom_tf: False
  • /stretch_driver/controller_calibration_file: /home/hello-robot…
  • /stretch_driver/rate: 25.0
  • /stretch_driver/timeout: 0.5

NODES
/
collect_head_calibration_data (stretch_calibration/collect_head_calibration_data)
d435i_accel_correction (stretch_core/d435i_accel_correction)
d435i_configure (stretch_core/d435i_configure)
detect_aruco_markers (stretch_core/detect_aruco_markers)
joint_state_publisher (joint_state_publisher/joint_state_publisher)
robot_state_publisher (robot_state_publisher/robot_state_publisher)
stretch_driver (stretch_core/stretch_driver)
/camera/
realsense2_camera (nodelet/nodelet)
realsense2_camera_manager (nodelet/nodelet)

auto-starting new master
process[master]: started with pid [4608]
ROS_MASTER_URI=http://172.28.7.135:11311

setting /run_id to 1f35a482-0524-11eb-8d7b-38002587e8f3
process[rosout-1]: started with pid [4620]
started core service [/rosout]
process[d435i_accel_correction-2]: started with pid [4627]
process[camera/realsense2_camera_manager-3]: started with pid [4628]
process[camera/realsense2_camera-4]: started with pid [4629]
process[d435i_configure-5]: started with pid [4630]
process[joint_state_publisher-6]: started with pid [4631]
process[robot_state_publisher-7]: started with pid [4637]
[ INFO] [1601693827.134814252]: Initializing nodelet with 8 worker threads.
process[stretch_driver-8]: started with pid [4638]
process[detect_aruco_markers-9]: started with pid [4654]
[ WARN] [1601693827.153892940]: The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF.
process[collect_head_calibration_data-10]: started with pid [4660]
[ INFO] [1601693827.343668269]: RealSense ROS v2.2.16
[ INFO] [1601693827.343802598]: Built with LibRealSense v2.37.0
[ INFO] [1601693827.343902611]: Running with LibRealSense v2.37.0
[ INFO] [1601693827.394331218]:
[INFO] [1601693827.556266]: /d435i_accel_correction started
[ INFO] [1601693827.879042965]: Device with serial number 944122073257 was found.

[ INFO] [1601693827.879115372]: Device with physical ID 2-2-2 was found.
[ INFO] [1601693827.879138027]: Device with name Intel RealSense D435I was found.
[ INFO] [1601693827.879775905]: Device with port number 2-2 was found.
[ INFO] [1601693827.881549539]: getParameters…
[INFO] [1601693827.920109]: /d435i_configure started
[ INFO] [1601693827.925997628]: setupDevice…
[ INFO] [1601693827.926031063]: JSON file is not provided
[ INFO] [1601693827.926046071]: ROS Node Namespace: camera
[ INFO] [1601693827.926067903]: Device Name: Intel RealSense D435I
[ INFO] [1601693827.926081062]: Device Serial No: 944122073257
[ INFO] [1601693827.926096132]: Device physical port: 2-2-2
[ INFO] [1601693827.926110480]: Device FW version: 05.12.03.00
[ INFO] [1601693827.926126098]: Device Product ID: 0x0B3A
[ INFO] [1601693827.926140003]: Enable PointCloud: On
[ INFO] [1601693827.926154407]: Align Depth: On
[ INFO] [1601693827.926168855]: Sync Mode: On
[ INFO] [1601693827.926219927]: Device Sensors:
[ INFO] [1601693827.971298433]: Stereo Module was found.
[ INFO] [1601693828.012970157]: RGB Camera was found.
[ INFO] [1601693828.013242018]: Motion Module was found.
[ INFO] [1601693828.013288606]: Add Filter: pointcloud
[ INFO] [1601693828.013927711]: num_filters: 1
[ INFO] [1601693828.013960174]: Setting Dynamic reconfig parameters.
[INFO] [1601693828.075600]: /detect_aruco_markers started
[INFO] [1601693828.255971]: /collect_head_calibration_data started
[INFO] [1601693828.265748]: Loading factory default tilt backlash transition angle from the YAML file named /home/hello-robot/catkin_ws/src/stretch_ros/stretch_core/config/controller_calibration_head_factory_default.yaml
/home/hello-robot/catkin_ws/src/stretch_ros/stretch_calibration/nodes/collect_head_calibration_data:551: YAMLLoadWarning: calling yaml.load() without Loader=… is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details.
controller_parameters = yaml.load(fid)
[INFO] [1601693828.271836]: self.tilt_angle_backlash_transition_rad in degrees = -22.9183118052
[INFO] [1601693828.275894]: Using the following directory for calibration files: /home/hello-robot/stretch_user/stretch-re1-1008/calibration_ros/
[INFO] [1601693828.359226]: For use with S T R E T C H ™ RESEARCH EDITION from Hello Robot Inc.
[INFO] [1601693828.362188]: /stretch_driver started
[INFO] [1601693828.366598]: mode = position
[INFO] [1601693828.370632]: broadcast_odom_tf = False
[INFO] [1601693828.374933]: Loading controller calibration parameters for the head from YAML file named /home/hello-robot/catkin_ws/src/stretch_ros/stretch_core/config/controller_calibration_head_factory_default.yaml
[INFO] [1601693828.380506]: controller parameters loaded = {‘tilt_looking_up_offset’: 0.0, ‘arm_retracted_offset’: 0.0, ‘tilt_angle_backlash_transition’: -0.4, ‘tilt_angle_offset’: 0.0, ‘pan_angle_offset’: 0.0, ‘pan_looked_left_offset’: 0.0}
[INFO] [1601693828.383529]: self.head_tilt_calibrated_offset_rad in degrees = 0.0
[INFO] [1601693828.389799]: self.head_pan_calibrated_offset_rad in degrees = 0.0
[INFO] [1601693828.392753]: self.head_pan_calibrated_looked_left_offset_rad in degrees = 0.0
[INFO] [1601693828.395566]: self.head_tilt_backlash_transition_angle_rad in degrees = -22.9183118052
[INFO] [1601693828.397798]: self.head_tilt_calibrated_looking_up_offset_rad in degrees = 0.0
[INFO] [1601693828.400286]: self.wrist_extension_calibrated_retracted_offset_m in meters = 0.0
[INFO] [1601693828.421062]: /stretch_driver rate = 25.0 Hz
[INFO] [1601693828.423844]: /stretch_driver timeout = 0.5 s
[INFO] [1601693828.428244]: /stretch_driver use_fake_mechaduinos = False
[INFO] [1601693828.430825]: /stretch_driver base_frame_id = base_link
[INFO] [1601693828.434989]: /stretch_driver odom_frame_id = odom
Waiting for service /camera/stereo_module/set_parameters…
[INFO] [1601693830.036339]: initial_mode = High Accuracy
[INFO] [1601693830.136524]: Set D435i to High Accuracy mode
[INFO] [1601693830.204033]: /stretch_driver: Changed to mode = position
[INFO] [1601693830.334093]: Move to the calibration start pose.
[INFO] [1601693830.361347]: /stretch_driver joint_traj action: New trajectory received with joint_names = [‘joint_lift’, ‘joint_head_pan’, ‘wrist_extension’, ‘joint_wrist_yaw’, ‘gripper_aperture’, ‘joint_head_tilt’]
[ INFO] [1601693833.246551089]: Done Setting Dynamic reconfig parameters.
[ INFO] [1601693833.247515789]: depth stream is enabled - width: 1280, height: 720, fps: 15, Format: Z16
[ INFO] [1601693833.248691045]: color stream is enabled - width: 1280, height: 720, fps: 15, Format: RGB8
[ INFO] [1601693833.251450424]: setupPublishers…
[ INFO] [1601693833.253537563]: Expected frequency for depth = 15.00000
[ INFO] [1601693833.275060588]: Expected frequency for color = 15.00000
[ INFO] [1601693833.288806748]: Expected frequency for aligned_depth_to_color = 15.00000
[ INFO] [1601693833.302724691]: setupStreams…
[ INFO] [1601693833.343905982]: insert Depth to Stereo Module
[ INFO] [1601693833.343994325]: insert Color to RGB Camera
[ INFO] [1601693833.344029448]: insert Accel to Motion Module
[INFO] [1601693833.519820]: /stretch_driver joint_traj action: Achieved all target points.
[INFO] [1601693833.540096]:
[INFO] [1601693833.541301]: *************************************
[INFO] [1601693833.542116]: COLLECT GLOBAL HEAD LOOKING DOWN DATA
[INFO] [1601693833.542875]: *************************************
[INFO] [1601693833.543568]:
[INFO] [1601693833.544394]: Move to a new arm pose.
[INFO] [1601693833.553741]: /stretch_driver joint_traj action: New trajectory received with joint_names = [‘wrist_extension’]
[ INFO] [1601693833.636526801]: SELECTED BASE:Depth, 0
[ INFO] [1601693833.644412365]: RealSense Node Is Up!
02/10 19:57:13,841 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:13,901 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:14,034 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:14,094 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 300, error: No data available, number: 3d
02/10 19:57:14,175 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 300, error: No data available, number: 3d
02/10 19:57:14,235 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 300, error: No data available, number: 3d
[ WARN] [1601693834.257057180]: Hardware Notification:Motion Module failure,1.60169e+12,Error,Hardware Error
02/10 19:57:14,416 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:14,476 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:14,657 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:14,837 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:15,018 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
02/10 19:57:15,078 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
[INFO] [1601693835.228175]: /stretch_driver joint_traj action: Achieved all target points.
02/10 19:57:15,260 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
[INFO] [1601693835.261782]: /stretch_driver joint_traj action: New trajectory received with joint_names = [‘joint_lift’]
[INFO] [1601693837.089303]: /stretch_driver joint_traj action: Achieved all target points.
[INFO] [1601693837.114399]: Wait 1.0 seconds for the robot to settle after motion of the arm.
[INFO] [1601693838.115801]: Starting to collect global head looking down data (expect to collect 15 samples).
[INFO] [1601693838.126070]: /stretch_driver joint_traj action: New trajectory received with joint_names = [‘joint_head_tilt’, ‘joint_head_pan’, ‘wrist_extension’]
02/10 19:57:18,864 WARNING [139723841615616] (messenger-libusb.cpp:42) control_transfer returned error, index: 768, error: No data available, number: 61
[INFO] [1601693839.301978]: /stretch_driver joint_traj action: Achieved all target points.
Joint name joint_head_tilt
Joint name joint_head_pan
Joint name wrist_extension
Joint name joint_lift
Traceback (most recent call last):
File “/home/hello-robot/catkin_ws/src/stretch_ros/stretch_calibration/nodes/collect_head_calibration_data”, line 589, in
node.main()
File “/home/hello-robot/catkin_ws/src/stretch_ros/stretch_calibration/nodes/collect_head_calibration_data”, line 582, in main
self.calibrate_pan_and_tilt()
File “/home/hello-robot/catkin_ws/src/stretch_ros/stretch_calibration/nodes/collect_head_calibration_data”, line 300, in calibrate_pan_and_tilt
observation = self.get_samples(pan_angle, tilt_angle, wrist_extension, number_of_samples_per_head_pose, first_move=first_pan_tilt)
File “/home/hello-robot/catkin_ws/src/stretch_ros/stretch_calibration/nodes/collect_head_calibration_data”, line 239, in get_samples
camera_measurements[‘base_left_marker_pose’] = ros_numpy.numpify(self.base_left_marker_pose).tolist()
AttributeError: ‘module’ object has no attribute ‘numpify’
[WARN] [1601693841.687377]: Inbound TCP/IP connection failed: connection from sender terminated before handshake header received. 0 bytes were received. Please check sender for additional details.
[WARN] [1601693841.687376]: Inbound TCP/IP connection failed: connection from sender terminated before handshake header received. 0 bytes were received. Please check sender for additional details.
[collect_head_calibration_data-10] process has died [pid 4660, exit code 1, cmd /home/hello-robot/catkin_ws/src/stretch_ros/stretch_calibration/nodes/collect_head_calibration_data __name:=collect_head_calibration_data __log:=/home/hello-robot/.ros/log/1f35a482-0524-11eb-8d7b-38002587e8f3/collect_head_calibration_data-10.log].
log file: /home/hello-robot/.ros/log/1f35a482-0524-11eb-8d7b-38002587e8f3/collect_head_calibration_data-10*.log

I can send that log file upon request

No worries. Seems to be a package issue perhaps. I’m going to hand this off to some teammates. Look for an update tomorrow!

Hi @csemecu!

Thank you for asking! Questions like yours are exactly why we have this forum. We’re really happy that you’re actively working with Stretch and using the forum! Please don’t hesitate to post!

@bshah is away from his robot until Monday. He’ll be able to help more once he’s back. In the mean time, I’ll see what I can do.

From your post, it looks like the problem relates to the ros_numpy package.

File “/home/hello-robot/catkin_ws/src/stretch_ros/stretch_calibration/nodes/collect_head_calibration_data”, line 239, in get_samples
camera_measurements[‘base_left_marker_pose’] = ros_numpy.numpify(self.base_left_marker_pose).tolist()
AttributeError: ‘module’ object has no attribute ‘numpify’

I’m not seeing this problem on my robot, but I have an early unit with an older installation. I suspect gathering the following information on your robot would help us diagnosis the issue. I’d appreciate it if you would let us know the results of the following actions.

The ros_numpy package can be installed in two main ways. On my robot, it’s installed from source. I can go to the source code directory using the command roscd ros_numpy

image

which takes me to the ~/catkin_ws/src directory

image .

The ros_numpy package can also be installed as a binary package through apt. Running apt-cache policy ros-melodic-ros-numpy will show if the standard ROS Melodic binary package has been installed on your robot. My robot only uses the source code version from GitHub. At some point, the factory installation for Stretch should start using this binary version.

image

You can also use ipython to test if you can import the ros_numpy module and access the numpify attribute as illustrated by the following screenshot from my robot. The light gray region shows the results of tab completion.

Besides gathering this information, it’s worth noting that there have been recent updates to the main stretch_ros repository on GitHub. It’s not clear to me how these updates or the lack of these updates would cause the issue you’re seeing, but it’s generally good practice to pull the most recent version of stretch_ros and then install it using catkin_make install.

image

image

Best wishes,
Charlie

Charles C. Kemp, PhD
Co-founder & CTO
Hello Robot Inc.
https://charliekemp.com

Thank you for your reply!

It was an issue with the ros_numpy package. At first glance, the folder in my stretch did not have the init.py
After solving that, the ipython test did import and auto-complete. However, it still doesn’t work with roscd ros_numpy (even though the folder is in catkin_ws/src)

Even with that, the launch file for the head calibration worked!