xArm-Developer / xarm_ros2

ROS2 developer packages for robotic products from UFACTORY
https://www.ufactory.cc/pages/xarm
BSD 3-Clause "New" or "Revised" License
128 stars 77 forks source link

xArm6 Impedance Control Issues #55

Open SyllogismRXS opened 1 year ago

SyllogismRXS commented 1 year ago

I am using an xArm6 with xArm's 6-axis force torque sensor. I followed the instructions from https://github.com/xArm-Developer/xarm_ros2/issues/41#issuecomment-1700311544 to do a sensor/load compensation (I used uFactory Studio to run the sensor/load calibration procedure three times and I averaged the results) before putting the xArm6 in impedance control mode via the /xarm/ft_sensor_cali_load, /xarm/set_impedance_config and /xarm/ft_sensor_app_set services. I verified that the impedance control mode was working properly by lightly pushing up and down on the gripper and I could feel the end-effector moving like a spring.

My task is to pick up a flat pencil like object with a robotiq gripper attached to the end of the xArm6. To be extra careful during testing, I placed the object on a layer of foam, so that if the robot tried to drive through the table, the foam would absorb the force. Here is the command sequence that I use to pick up the object:

  1. Hover the gripper just above the object with the gripper open.
  2. Put the xArm6 in impedance control mode.
  3. Using MoveIt2, command the end-effector to move the finger tips of the gripper just past the height of the foam.
  4. Close the gripper
  5. Using MoveIt2, command the end-effector to move up and away from the surface.
  6. Disable impedance control mode.

The impedance control mode does a good job of not pushing through the thick foam and I am able to pick up objects. Also, it doesn't appear that the xArm6 is working any of its joints too hard during this process. However, after testing this procedure about three times, the xArm6 threw an error: UFACTORY Error detected! Code C31 -> [ Collision Caused Abnormal Joint Current ]. However, the collision error was thrown when the robot was moving up (not in impedance control mode). Here is the full error from ROS:

[move_group-3] [INFO] [1699645753.573201688] [moveit.simple_controller_manager.follow_joint_trajectory_controller_handle]: xarm6_traj_controller started execution [move_group-3] [INFO] [1699645753.573211121] [moveit.simple_controller_manager.follow_joint_trajectory_controller_handle]: Goal request accepted! [ros2_control_node-2] [WARN] [1699645758.551577888] [UFACTORY.RobotHW]: [192.168.1.230] set_servo_angle_j, ret= 1 [ros2_control_node-2] [ERROR] [1699645758.630947838] [UFACTORY.RobotHW]: [192.168.1.230] Robot Mode detected! Mode: 0 [ros2_control_node-2] [ERROR] [1699645759.030304556] [UFACTORY.RobotHW]: [192.168.1.230] UFACTORY Error detected! Code C31 -> [ Collision Caused Abnormal Joint Current ] [ros2_control_node-2] [WARN] [1699645761.710926027] [xarm6_traj_controller]: Aborted due goal_time_tolerance exceeding by 0.517733 seconds [move_group-3] [WARN] [1699645761.773652915] [moveit.simple_controller_manager.follow_joint_trajectory_controller_handle]: Controller 'xarm6_traj_controller' failed with error GOAL_TOLERANCE_VIOLATED: [move_group-3] [WARN] [1699645761.773684209] [moveit_ros.trajectory_execution_manager]: Controller handle xarm6_traj_controller reports status ABORTED

I am worried that the xArm6's impedance control mode is causing the joint motors to work too hard even though the end-effector isn't pushing hard into the table (it's just pushing into some foam right now). Am I missing a step? Is there a different recommended procedure for picking up flat objects on tables?

Thanks!

penglongxiang commented 1 year ago

Hi @SyllogismRXS, thanks for the feedback. If collision sensitivity is not set to 0, it will still monitor the joint motor currents (for joint torque estimation) while deducting the contribution from the end-effector force and estimate the chance of collision. There are chances of false estimation since the joint friction and temperature is not accurately modeled. But the joints will not try too hard compared with normal position control.

Could you please provide the log package to us (downloadable from UFACTORY Studio) and specify the date & time when this C31 error occurs? In the mean time, you can try lowering the collision sensitivity (like 1 maybe) setting when doing impedance control and change it back after that.