Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python
- import numpy as np
- from numpy import array
- from sympy import symbols, cos, sin, pi, simplify
- from sympy.matrices import Matrix
- import rospy
- import tf
- #from kuka_aoutput.srv import *
- from trajectory_msgs.msg import JointTrajectory, JointTrajectoryPoint
- from geometry_msgs.msg import Pose
- from mpmath import *
- from sympy import *
- ### symbols for DH params
- ### Create symbols for joint variables
- #roll,pitch,yaw = symbols('roll pitch yaw')
- q1, q2, q3, q4, q5, q6, q7 = symbols('q1:8')
- d1, d2, d3, d4, d5, d6, d7 = symbols('d1:8')
- a0, a1, a2, a3, a4, a5, a6 = symbols('a0:7')
- alpha0, alpha1, alpha2, alpha3, alpha4, alpha5, alpha6 = symbols('alpha0:7')
- # DH Parameters
- s = {alpha0: 0, a0:0, d1: 0.75,
- alpha1: -pi/2, a1: 0.35, d2: 0, q2:q2 -pi/2,
- alpha2: 0, a2: 1.25, d3: 0,
- alpha3: -pi/2, a3: -0.054, d4: 1.5,
- alpha4: pi/2, a4:0, d5: 0,
- alpha5: -pi/2, a5: 0, d6: 0,
- alpha6: 0, a6: 0, d7: 0.303, q7:0}
- #### Homogeneous Transfooutputs
- T0_1 = Matrix([[ cos(q1), -sin(q1), 0, a0],
- [ sin(q1)*cos(alpha0), cos(q1)*cos(alpha0), -sin(alpha0), -sin(alpha0)*d1],
- [ sin(q1)*sin(alpha0), cos(q1)*sin(alpha0), cos(alpha0), cos(alpha0)*d1],
- [ 0, 0, 0, 1]])
- T0_1 = T0_1.subs(s)
- T1_2 = Matrix([[ cos(q2), -sin(q2), 0, a1],
- [ sin(q2)*cos(alpha1), cos(q2)*cos(alpha1), -sin(alpha1), -sin(alpha1)*d2],
- [ sin(q2)*sin(alpha1), cos(q2)*sin(alpha1), cos(alpha1), cos(alpha1)*d2],
- [ 0, 0, 0, 1]])
- T1_2 = T1_2.subs(s)
- T2_3 = Matrix([[ cos(q3), -sin(q3), 0, a2],
- [ sin(q3)*cos(alpha2), cos(q3)*cos(alpha2), -sin(alpha2), -sin(alpha2)*d3],
- [ sin(q3)*sin(alpha2), cos(q3)*sin(alpha2), cos(alpha2), cos(alpha2)*d3],
- [ 0, 0, 0, 1]])
- T2_3 = T2_3.subs(s)
- T3_4 = Matrix([[ cos(q4), -sin(q4), 0, a3],
- [ sin(q4)*cos(alpha3), cos(q4)*cos(alpha3), -sin(alpha3), -sin(alpha3)*d4],
- [ sin(q4)*sin(alpha3), cos(q4)*sin(alpha3), cos(alpha3), cos(alpha3)*d4],
- [ 0, 0, 0, 1]])
- T3_4 = T3_4.subs(s)
- T4_5 = Matrix([[ cos(q5), -sin(q5), 0, a4],
- [ sin(q5)*cos(alpha4), cos(q5)*cos(alpha4), -sin(alpha4), -sin(alpha4)*d5],
- [ sin(q5)*sin(alpha4), cos(q5)*sin(alpha4), cos(alpha4), cos(alpha4)*d5],
- [ 0, 0, 0, 1]])
- T4_5 = T4_5.subs(s)
- T5_6 = Matrix([[ cos(q6), -sin(q6), 0, a5],
- [ sin(q6)*cos(alpha5), cos(q6)*cos(alpha5), -sin(alpha5), -sin(alpha5)*d6],
- [ sin(q6)*sin(alpha5), cos(q6)*sin(alpha5), cos(alpha5), cos(alpha5)*d6],
- [ 0, 0, 0, 1]])
- T5_6 = T5_6.subs(s)
- T6_7 = Matrix([[ cos(q7), -sin(q7), 0, a6],
- [ sin(q7)*cos(alpha6), cos(q7)*cos(alpha6), -sin(alpha6), -sin(alpha6)*d7],
- [ sin(q7)*sin(alpha6), cos(q7)*sin(alpha6), cos(alpha6), cos(alpha6)*d7],
- [ 0, 0, 0, 1]])
- T6_7 = T6_7.subs(s)
- #transfooutputs
- T0_3 = simplify(T0_1*T1_2*T2_3)
- #print("T0_3")
- #print(T0_3)
- T3_7 = simplify(T3_4*T4_5*T5_6)#*T6_7
- #print("T3_7")
- #print(T3_7)
- #T0_5 = simplify(T0_4*T4_5)
- #T0_6 = simplify(T0_5*T5_6)
- #T0_7 = simplify(T0_6*T6_7)
- px, py, pz = -0.366, -0.238, 3.226
- roll,pitch,yaw = -1.108, -0.511, -1.741
- #--------------Rrpy----------------
- R_z_y = Matrix([[cos(yaw), -sin(yaw), 0, 0],
- [ sin(yaw), cos(yaw), 0, 0],
- [ 0, 0, 1, 0],
- [ 0, 0, 0, 1]])
- R_y_p = Matrix([[cos(pitch), 0, sin(pitch), 0],
- [ 0, 1, 0, 0],
- [ -sin(pitch), 0, cos(pitch), 0],
- [ 0, 0, 0, 1]])
- R_x_r = Matrix([[ 1, 0, 0, 0],
- [ 0, cos(roll), -sin(roll), 0],
- [ 0, sin(roll), cos(roll), 0],
- [ 0, 0, 0, 1]])
- R_z = Matrix([[cos(np.pi), -sin(np.pi), 0, 0],
- [ sin(np.pi), cos(np.pi), 0, 0],
- [ 0, 0, 1, 0],
- [ 0, 0, 0, 1]])
- R_y = Matrix([[cos(-np.pi/2), 0, sin(-np.pi/2), 0],
- [ 0, 1, 0, 0],
- [ -sin(-np.pi/2), 0, cos(-np.pi/2), 0],
- [ 0, 0, 0, 1]])
- Rrpy = R_z_y*R_y_p*R_x_r
- #----------------------------------------------------------------------------------------------------------
- R_corr = R_z * R_y
- R_corrI = R_corr.inv()
- R_gripper = Rrpy*R_corrI
- #print(R_gripper)
- #T_total = simplify(T0_7*R_corr)
- #Rrpy = simplify(R_z*R_y*R_x)
- #print(Rrpy)
- l = 0.303
- nx = R_gripper[0,2]
- ny = R_gripper[1,2]
- nz = R_gripper[2,2]
- wx = px - l*nx #should be the centre of joint#5
- wy = py - l*ny
- wz = pz - l*nz
- #print("link 5 xpos", wx)
- #print("link 5 ypos", wy)
- #print("link 5 zpos", wz)
- theta1 = atan2(wy,wx)
- wx_corr = wx - 0.35*cos(theta1)
- wy_corr = wy - 0.35*sin(theta1)
- wz_corr = wz - 0.75
- a = 1.25
- c = (wx_corr**2 + wy_corr**2 + wz_corr**2)**0.5
- b_corr = (1.5**2+0.054**2)**0.5
- #theta 3
- s_theta3 = -(c**2 - a**2 - b_corr**2)/(2*a*b_corr)
- c_theta3 = (1 - s_theta3**2)**0.5
- theta3 = atan2(s_theta3,c_theta3)
- #theta 2
- s_beta = wz_corr
- c_beta = (wy_corr**2 + wx_corr**2)**0.5
- alpha = -theta3 -3.14159265359/2
- s_psi = b_corr*sin(alpha)
- c_psi = a + b_corr*cos(alpha)
- theta2 = -atan2(s_beta,c_beta) + atan2(s_psi,c_psi) + 3.14159265359/2
- print("jointangle1: " ,theta1.evalf())
- print("jointangle2: " ,theta2.evalf())
- print("jointangle3: " ,theta3.evalf())
- q1 , q2, q3 = theta1, theta2, theta3
- R03 = Matrix([
- [sin(q2 + q3)*cos(q1), cos(q1)*cos(q2 + q3), -sin(q1)],
- [sin(q1)*sin(q2 + q3), sin(q1)*cos(q2 + q3), cos(q1)],
- [ cos(q2 + q3), -sin(q2 + q3), 0]])
- #print(Rrpy)
- Rrpy.col_del(3)
- Rrpy.row_del(3)
- R_corrI.col_del(3)
- R_corrI.row_del(3)
- R37 = (R03.T)*Rrpy*R_corrI
- q6= atan2(-R37[1,1],R37[1,0])
- q4= atan2(R37[2,2],-R37[0,2])
- q5= atan2(-R37[0,2]/cos(q4),R37[1,2])
- print("inverse orientation")
- print("jointangle4: " ,(q4-pi).evalf())
- print("jointangle5: " ,-q5.evalf())
- print("jointangle6: " ,(q6+pi).evalf())
- '''
- print(T_total.evalf(subs={q1: 1.8, q2: -0.32, q3: -1.93, q4: 3.76, q5: -2.13, q6: -1.99}, chop = True))
- a = 1.25
- c = (wx_corr**2 + wy_corr**2 + wz_corr**2)**0.5
- b_corr = (1.5**2+0.054**2)**0.5
- #theta 3
- s_theta3 = -(c**2 - a**2 - b_corr**2)/(2*a*b_corr)
- c_theta3 = (1 - s_theta3**2)**0.5
- theta3 = atan2(s_theta3, c_theta3)
- alpha = -theta3 - np.pi/2
- #theta 2
- s_beta = wz_corr
- c_beta = (wy_corr**2 + wx_corr**2)**0.5
- s_psi = b_corr*sin(alpha)
- c_psi = a + b_corr*cos(alpha)
- theta2 = -atan2(s_beta,c_beta) + atan2(s_psi,c_psi) + np.pi/2
- rtd = 1#80/3.1415926535
- print(theta1*rtd, theta2*rtd, theta3*rtd)
- '''
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement