Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

inverse kinematics in ur_driver is not accurate

I am trying to use the inverse kinematics (IK) solver in ur_driver for my UR5 robot. My goal is to move the robot to a target joint position given a set of robot TCP pose/end-effector pose. However, there is always a small error (about 1mm) in each x/y/z axis after positioning. So I did this quick test for the ur_driver as follows.

1 First, position robot using movegroup.

map<string, double=""> jointPose;

jointPos["shoulder_pan_joint"] = -0.9217;

jointPos["shoulder_lift_joint"] = -1.5935;

jointPos["elbow_joint"] = 2.236;

jointPos["wrist_1_joint"] = -0.4291;

jointPos["wrist_2_joint"] = 0.2916;

jointPos["wrist_3_joint"] = 0.7746;

move_group.setPoseTarget(another_pose);

move_group.move();

2. Second, record robot tool0 pose as shown in RViz, result as follows.

[position(m),orientation(quaternion)] = [0.33561, -0.13135, 0.1815, 0.64684, 0.33476, 0.68078, 0.077926].

3. Third, position robot with URScript movej() command, record robot tool pose as shown on the polyscope. [position(m),orientation(rxryrz)] = [0.33667,-0.13125,0.18217,0.7471,-1.4515,-0.1768]

As I can see, there is a slight position difference in each x/y/z direction. So my assumption is the IK solution given by ur_driver is not precise.

I have compared the DH parameters in the driver to that given by [1]. They seem to be the same.

Does anyone know how to compute the accurate IK solution for UR robot? I appreciate any help and insight that could potentially solve the problem.

[1] https://www.universal-robots.com/how-tos-and-faqs/faq/ur-faq/parameters-for-calculations-of-kinematics-and-dynamics-45257/

inverse kinematics in ur_driver is not accurate

I am trying to use the inverse kinematics (IK) solver in ur_driver for my UR5 robot. My goal is to move the robot to a target joint position given a set of robot TCP pose/end-effector pose. However, there is always a small error (about 1mm) in each x/y/z axis after positioning. So I did this quick test for the ur_driver as follows.

1 First, position robot using movegroup.

map<string, double=""> jointPose;

double> jointPose; jointPos["shoulder_pan_joint"] = -0.9217;

-0.9217; jointPos["shoulder_lift_joint"] = -1.5935;

-1.5935; jointPos["elbow_joint"] = 2.236;

2.236; jointPos["wrist_1_joint"] = -0.4291;

-0.4291; jointPos["wrist_2_joint"] = 0.2916;

0.2916; jointPos["wrist_3_joint"] = 0.7746;

move_group.setPoseTarget(another_pose);

move_group.move();

0.7746; move_group.setPoseTarget(another_pose); move_group.move();

2. Second, record robot tool0 pose as shown in RViz, result as follows.

[position(m),orientation(quaternion)] = [0.33561, -0.13135, 0.1815, 0.64684, 0.33476, 0.68078, 0.077926].

0.077926].

3. Third, position robot with URScript movej() command, record robot tool pose as shown on the polyscope. polyscope.

[position(m),orientation(rxryrz)] = [0.33667,-0.13125,0.18217,0.7471,-1.4515,-0.1768]

[0.33667,-0.13125,0.18217,0.7471,-1.4515,-0.1768]

As I can see, there is a slight position difference in each x/y/z direction. So my assumption is the IK solution given by ur_driver is not precise.

I have compared the DH parameters in the driver to that given by [1]. They seem to be the same.

Does anyone know how to compute the accurate IK solution for UR robot? I appreciate any help and insight that could potentially solve the problem.

[1] https://www.universal-robots.com/how-tos-and-faqs/faq/ur-faq/parameters-for-calculations-of-kinematics-and-dynamics-45257/