Example #1
0
def compute_Jacobian_speed(params):
    robot=params['robot']
    linkindex=params['linkindex']
    linkindex2=params['linkindex2']
    euler=HRP4.mat2euler(robot.GetLinks()[0].GetTransform()[0:3,0:3])
    link2=robot.GetLinks()[linkindex2]
    p_link2=link2.GetGlobalCOM()
    return FollowTrajectory.Jacobian(euler,linkindex,p_link2,params)
Example #2
0
def Reach(linkindex,linkindex2,p_end,n_steps,params):
    robot=params['robot']
    Q0=params['Q0']
    Q0inv=params['Q0inv']
    lower_lim=params['lower_lim']
    upper_lim=params['upper_lim']
    K_v=params['K_v']
    K_p=params['K_p']
    K_li=params['K_li']
    K_sr=params['K_sr']

    n_dof=robot.GetDOF()
    n_var=n_dof+6
    
    baselink=robot.GetLinks()[0]

    res=[]
    res.append(HRP4.GetConfig(robot))
    cur_config=res[0]

    link2=robot.GetLinks()[linkindex2]

    with robot:

        for step in range(n_steps):
            T=baselink.GetTransform()
            euler=HRP4.mat2euler(T[0:3,0:3])

            # Compute the Jacobians and desired velocities of the markers to follow
            p_cur=link2.GetGlobalCOM()
            J_marker=FollowTrajectory.Jacobian(euler,linkindex,p_cur,params)

            v_desired=(p_end-p_cur)/(n_steps-step)

            # Find the out-of-range DOFs
            lower_list=[]
            upper_list=[]
            DOFvalues=robot.GetDOFValues()       
            for j in range(n_dof):
                if DOFvalues[j]<lower_lim[j]:
                    lower_list.append(j)
                elif DOFvalues[j]>upper_lim[j]:
                    upper_list.append(j)

            # Compute the Jacobians and the desired velocities for the out-of-range DOFs
            J_lower=zeros((n_var,n_var))
            v_lower=zeros(n_var)
            J_upper=zeros((n_var,n_var))
            v_upper=zeros(n_var)
            for i in lower_list:            
                J_lower[6+i,6+i]=1
                v_lower[6+i]=K_li*(lower_lim[i]-DOFvalues[i])
            for i in upper_list:
                J_upper[6+i,6+i]=1
                v_upper[6+i]=K_li*(upper_lim[i]-DOFvalues[i])
            J_limits=FollowTrajectory.concat([J_lower,J_upper])
            v_limits=FollowTrajectory.concat([v_lower,v_upper])


            J_main=FollowTrajectory.concat([J_marker,J_limits])
            v_main=FollowTrajectory.concat([v_desired,v_limits])

            J_main_star=dot(J_main,Q0inv)
            J_main_star_dash=linalg.pinv(J_main_star)
            J_weighted_pinv=dot(Q0inv,J_main_star_dash)
            thetad_0=dot(J_weighted_pinv,v_main)

            thetad=thetad_0

            cur_config=cur_config+thetad
            res.append(cur_config)
            HRP4.SetConfig(robot,cur_config)

    return cur_config
Example #3
0
config=array([  3.33897e-01,   3.60542e-01,   8.00304e-01,   8.35608e-08,
         3.31824e-08,  -3.13480e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   0.00000e+00,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   2.83020e-01,  -1.16476e-01,
         0.00000e+00,  -6.88414e-01,   0.00000e+00,   0.00000e+00,
         0.00000e+00,  -1.48802e-09,   0.00000e+00,   2.95042e-01,
         1.05355e-01,   0.00000e+00,  -6.89127e-01,   0.00000e+00,
         0.00000e+00,   0.00000e+00,   7.01535e-09,   0.00000e+00])
HRP4.SetConfig(robot,config)
FollowTrajectory.compute_local_positions(robot,q,100,1,FollowTrajectory.markers_list)

Q0=eye(n+6)
Q0[0,0]=3
Q0[1,11]=3
Q0[2,2]=3
Q0[3,3]=2
Q0[4,4]=2
Q0[5,5]=2
params={'x':1}
params['robot']=robot
params['exclude_list']=exclude_list
params['dt']=0.1
params['Q0']=Q0
params['Q0inv']=linalg.inv(Q0)
params['lower_lim']=lower_lim