diff --git a/python/IK_manipulator3D.py b/python/IK_manipulator3D.py index ed85b97e0fce91279f06c16592633c1e989bc48a..c5bf862c405e07a4e3d0f835dab77d93d4b16b24 100644 --- a/python/IK_manipulator3D.py +++ b/python/IK_manipulator3D.py @@ -125,7 +125,7 @@ def R2q(R): [R[1,2]-R[2,1], R[2,0]-R[0,2], R[0,1]-R[1,0], R[0,0]+R[1,1]+R[2,2]], ]) / 3.0 - e_val, e_vec = np.linalg.eig(K) + e_val, e_vec = np.linalg.eig(K) # unsorted eigenvalues q = np.real([e_vec[3, np.argmax(e_val)], *e_vec[0:3, np.argmax(e_val)]]) # for quaternions as [w,x,y,z] return q diff --git a/python/iLQR_manipulator3D.py b/python/iLQR_manipulator3D.py index fb8638491ec8324a98e219d22aa0c563cd350621..3c4dbcdeb06cc36fb58cf880f171bd4b5e194f19 100644 --- a/python/iLQR_manipulator3D.py +++ b/python/iLQR_manipulator3D.py @@ -120,9 +120,7 @@ def R2q(R): [R[2,0]+R[0,2], R[2,1]+R[1,2], R[2,2]-R[0,0]-R[1,1], R[0,1]-R[1,0]], [R[1,2]-R[2,1], R[2,0]-R[0,2], R[0,1]-R[1,0], R[0,0]+R[1,1]+R[2,2]], ]) / 3.0 - - e_val, e_vec = np.linalg.eig(K) - # /!\ With numpy eigenvalues are not sorted! + e_val, e_vec = np.linalg.eig(K) # unsorted eigenvalues q = np.real([e_vec[3, np.argmax(e_val)], *e_vec[0:3, np.argmax(e_val)]]) # for quaternions as [w,x,y,z] return q @@ -172,7 +170,7 @@ param.dh.r = [0, 0, 0, 0.0825, -0.0825, 0, 0.088, 0] # Length of the common norm # Precision matrix # Q = np.identity((param.nbVarF-1) * param.nbPoints) # Full precision matrix -Qr = np.diag( [1.0,1.0,1.0,1.0,1.0,0.0] * param.nbPoints) # Precision matrix in relative coordinate frame (tool frame) (by removing orientation constraint on 3rd axis) +Qr = np.diag([1.0,1.0,1.0,1.0,1.0,0.0] * param.nbPoints) # Precision matrix in relative coordinate frame (tool frame) (by removing orientation constraint on 3rd axis) # Control weight matrix (at trajectory level) R = np.eye((param.nbData-1) * param.nbVarU) * param.r @@ -218,10 +216,10 @@ for i in range(param.nbIter): Q = Ra @ Qr @ Ra.T # Precision matrix in absolute coordinate frame (base frame) - #du = np.linalg.pinv(Su.T @ J.T @ Q @ J @ Su + R) @ (-Su.T @ J.T @ Q @ f - u * param.r) # Gauss-Newton update + #du = np.linalg.inv(Su.T @ J.T @ Q @ J @ Su + R) @ (-Su.T @ J.T @ Q @ f - u * param.r) # Gauss-Newton update du = np.linalg.lstsq( Su.T @ J.T @ Q @ J @ Su + R, - -Su.T @ J.T @ Q @ f - u * param.r , + -Su.T @ J.T @ Q @ f - u * param.r, rcond=-1 )[0] # Gauss-Newton update