Universal Robots+

Get_inverse_kin - qnear is not always updated

Summary

get_inverse_kin() is not always updating the qnear if it is called several time with the same x (Tool pose)

Versions

  • Affected Robot Software Version(s): 5.8.2
  • Affected Robot Hardware Version(s): Simulator
  • Robot Serial Number: Simulator
  • UR+ product(s) installed:-
  • URCaps Software version(s): -

Impact

The returned joint angles will, in some cases, be different than expected

Issue details

The issue was found during looking into the functionality of qnear. The investigations is made on the simulator and with the TCP set to p[0,0,0,0,0,0]. The script to trig the issue

set_tcp(p[0,0,0,0,0,0])
qn1 = [-1.6007 ,2.51106 ,2.203,-3.16898 ,1.5951,-0.031]
qn2 = [-1.6007 ,2.61264 ,1.63712 ,0.436917,-1.5951 ,3.11059]
p = get_forward_kin(qn1)
p_mod = p
p_mod[0] = 0     
s1 = get_inverse_kin(p,qn1)
s2 = get_inverse_kin(p,qn2)
#s1 and is s2 is expected to be different due to the q_near -> t1 should be True 
global t1 = s1!=s2

get_inverse_kin(p_mod)    #other pose as argument is "refreshing get_inverse_kin()s memory" 
s1 = get_inverse_kin(p,qn1)
get_inverse_kin(p_mod) #other pose as argument is "refreshing get_inverse_kin()s memory"
s2 = get_inverse_kin(p,qn2)
global t2 = s1!=s2

assert(t1==t2)

Use Case and Setup

The simulator with an empty program, add a single script node and insert the script.

Project status at point of discovered

in every use

Steps to Reproduce

Run the program described in the Setup

Expected Behavior

The assert should not trig an exception

Actual Behavior

The assert is triggering an exception

Workaround Suggestion

As shown in the sample. The issue can be avoided by making another get_inverse_kin() call with a different tool pose in between the calls where the returned value is used.