class Centauro_features:

    #Define the joints that will be controlled by the python script
    joint_name = [
        'j_arm1_1', 'j_arm1_2', 'j_arm1_3', 'j_arm1_4', 'j_arm1_5', 'j_arm1_6',
        'j_arm1_7', 'j_arm2_1', 'j_arm2_2', 'j_arm2_3', 'j_arm2_4', 'j_arm2_5',
        'j_arm2_6', 'j_arm2_7'
    ]

    #Define joint position lower bound
    joint_angle_lb = np.array([
        -3.312, 0.020, -2.552, -2.465, -2.569, -1.529, -2.565, -3.3458,
        -3.4258, -2.5614, -2.4794, -2.5394, -1.5154, -2.5554
    ])

    #Define joint position upper bound
    joint_angle_ub = np.array([
        1.615, 3.431, 2.566, 0.280, 2.562, 1.509, 2.569, 1.6012, -0.0138,
        2.5606, 0.2886, 2.5546, 1.5156, 2.5686
    ])

    #Define joint velocity limit
    joint_velocity_lim = np.array([
        3.86, 3.86, 6.06, 6.06, 11.72, 11.72, 20.35, 3.86, 3.86, 6.06, 6.06,
        11.72, 11.72, 20.35
    ])

    #Define torque limit
    joint_torque_lim = np.array([
        147.00, 147.00, 147.00, 147.00, 55.00, 55.00, 28.32, 147.00, 147.00,
        147.00, 147.00, 55.00, 55.00, 28.32
    ])

    # Compute forward kinematics
    fk_la = casadi.Function.deserialize(
        pin.generate_forward_kin(centauro, end_LA))
    fk_ra = casadi.Function.deserialize(
        pin.generate_forward_kin(centauro, end_RA))

    # Jacobians
    jac_la = casadi.Function.deserialize(
        pin.generate_jacobian(centauro, end_LA))
    jac_ra = casadi.Function.deserialize(
        pin.generate_jacobian(centauro, end_RA))

    # Inverse dynamics
    Idyn = casadi.Function.deserialize(pin.generate_inv_dyn(centauro))

###############################################################################
# ------------------------------ Functions -----------------------------------#
###############################################################################

if Check.Plot == True or Check.OCP == True:

    #----------------------------  Load the urdf  --------------------------------#
    pilzLR = rospy.get_param('/robot_description_1')
    pilzRR = rospy.get_param('/robot_description_2')
    end_point = 'end_effector'

    # Forward kinematics
    fk_LR = casadi.Function.deserialize(
        pin.generate_forward_kin(pilzLR, end_point))
    fk_RR = casadi.Function.deserialize(
        pin.generate_forward_kin(pilzRR, end_point))

    # Jacobians
    jac_LR = casadi.Function.deserialize(
        pin.generate_jacobian(pilzLR, end_point))
    jac_RR = casadi.Function.deserialize(
        pin.generate_jacobian(pilzRR, end_point))

    # Inverse dynamics
    Idyn_LR = casadi.Function.deserialize(pin.generate_inv_dyn(pilzLR))
    Idyn_RR = casadi.Function.deserialize(pin.generate_inv_dyn(pilzRR))

    ###############################################################################
    # --------------------------- Initial conditions -----------------------------#
import rospy
import mpc_fatigue.pynocchio_casadi as pin
import matplotlib.pyplot as plt
import numpy as np
import two_pilz_talker_inv_dyn_6DOF as ta
import two_pilz_talker_inv_kin_6DOF as ti


#----------------------------  Load the urdf  ---------------------------------
pilz_first = rospy.get_param('/robot_description_1')
pilz_second = rospy.get_param('/robot_description_2')


# ---------------------- Solve forward kinematics pilz 1  ---------------------
#Postion of link 5 in cartesian space (Solution to direct kinematics)
fk_first_string = pin.generate_forward_kin(pilz_first, 'prbt_link_5')
#Create casadi function
fk_first = casadi.Function.deserialize(fk_first_string)

# ---------------------- Solve forward kinematics pilz 2  ---------------------
#Postion of link 5 in cartesian space (Solution to direct kinematics)
fk_second_string = pin.generate_forward_kin(pilz_second, 'prbt_link_5')
#Create casadi function
fk_second = casadi.Function.deserialize(fk_second_string)

# ---------------------- Solve Jacobian of link_5  ----------------------------
#Jacobian for link_5 (Solution to direct kinematics)
jac_first_string = pin.generate_jacobian(pilz_first, 'prbt_link_5')
jac_second_string = pin.generate_jacobian(pilz_second, 'prbt_link_5')
#Create casadi function
jac_first = casadi.Function.deserialize(jac_first_string)
Beispiel #4
0

#PURPOSE --> SOLVE INVERSE KINEMATIC

# --------------------------- Load libraries ---------------------------------
from casadi import *
import rospy
import mpc_fatigue.pynocchio_casadi as pin
import talker_inv_kin_pilz_3DOF as ti

#----------------------------  Load the urdf  ---------------------------------
urdf = rospy.get_param('/robot_description')

# ---------------------- Solve forward kinematics  ----------------------------
#Postion of link 5 in cartesian space (Solution to direct kinematics)
fk_string = pin.generate_forward_kin(urdf, 'prbt_link_5')
#Create casadi function
fk = casadi.Function.deserialize(fk_string)
#Look inside the fk function
print(fk)

#Variable q
qc = SX.sym('qc', 3)

pos_link_5 = fk(q = qc)['ee_pos']
pos_des_link_5 = SX([10.0,0.1,0.3])


J = dot(pos_link_5 - pos_des_link_5, pos_link_5 - pos_des_link_5)

#Nlp problem
Beispiel #5
0
   RightConst = True
   Plot = True

###############################################################################
# ------------------------------ Functions -----------------------------------#
###############################################################################

if Check.Plot == True or Check.OCP == True:
    
#----------------------------  Load the urdf  --------------------------------#
    pilzLR = rospy.get_param('/robot_description_1')
    pilzRR = rospy.get_param('/robot_description_2')
    end_point = 'end_effector'
    
    # Forward kinematics
    fk_LR = casadi.Function.deserialize(pin.generate_forward_kin(pilzLR, end_point))
    fk_RR = casadi.Function.deserialize(pin.generate_forward_kin(pilzRR, end_point))

    # Jacobians
    jac_LR = casadi.Function.deserialize(pin.generate_jacobian(pilzLR, end_point))
    jac_RR = casadi.Function.deserialize(pin.generate_jacobian(pilzRR, end_point))
    
    # Inverse dynamics
    Idyn_LR = casadi.Function.deserialize(pin.generate_inv_dyn(pilzLR))
    Idyn_RR = casadi.Function.deserialize(pin.generate_inv_dyn(pilzRR))


###############################################################################
# --------------------------- Initial conditions -----------------------------#
###############################################################################

###############################################################################
# ------------------------------ Functions -----------------------------------#
###############################################################################

if Check.Plot == True or Check.OCP == True:

    #----------------------------  Load the urdf  --------------------------------#
    pilz_first = rospy.get_param('/robot_description_1')
    pilz_second = rospy.get_param('/robot_description_2')

    # ---------------------- Solve forward kinematics pilz 1  --------------------#
    end_point = 'prbt_link_5'  #prbt_link_5 #end_effector
    #Postion of link 5 in cartesian space (Solution to direct kinematics)
    fk_first_string = pin.generate_forward_kin(pilz_first, end_point)
    #Create casadi function
    fk_first = casadi.Function.deserialize(fk_first_string)
    # ---------------------- Solve forward kinematics pilz 2  --------------------#
    #Postion of link 5 in cartesian space (Solution to direct kinematics)
    fk_second_string = pin.generate_forward_kin(pilz_second, end_point)
    #Create casadi function
    fk_second = casadi.Function.deserialize(fk_second_string)

    # ---------------------- Solve Jacobian of link_5  ---------------------------#
    #Jacobian for link_5 (Solution to direct kinematics)
    jac_first_string = pin.generate_jacobian(pilz_first, end_point)
    jac_second_string = pin.generate_jacobian(pilz_second, end_point)
    #Create casadi function
    jac_first = casadi.Function.deserialize(jac_first_string)
    jac_second = casadi.Function.deserialize(jac_second_string)
def talker(q1, q2, F, box):

    #Load URDF
    pilz_first_urdf = rospy.get_param('/robot_description_1')
    pilz_second_urdf = rospy.get_param('/robot_description_2')

    # ---------------------- Solve forward kinematics pilz 1  ---------------------
    #Postion of link 5 in cartesian space (Solution to direct kinematics)
    fk_first_string = pin.generate_forward_kin(pilz_first_urdf, 'prbt_link_5')
    #Create casadi function
    fk_first = casadi.Function.deserialize(fk_first_string)

    # ---------------------- Solve forward kinematics pilz 2  ---------------------
    #Postion of link 5 in cartesian space (Solution to direct kinematics)
    fk_second_string = pin.generate_forward_kin(pilz_second_urdf,
                                                'prbt_link_5')
    #Create casadi function
    fk_second = casadi.Function.deserialize(fk_second_string)

    #Define the talker parameters
    if True:
        pub = rospy.Publisher(
            'topic_position_from_invkin', JointState,
            queue_size=100)  # This can be seen in rostopic list
        rospy.init_node(
            'node_position_from_invkin')  #This can be seen in rosnode list
        hello_str = JointState()
        hello_str.header = Header()
        hello_str.header.stamp = rospy.Time.now()
        hello_str.name = [
            'prbt_joint_1', 'prbt_joint_2', 'prbt_joint_3', 'prbt_joint_4',
            'prbt_joint_5', 'prbt_joint_6', 'sec_prbt_joint_1',
            'sec_prbt_joint_2', 'sec_prbt_joint_3', 'sec_prbt_joint_4',
            'sec_prbt_joint_5', 'sec_prbt_joint_6'
        ]
        hello_str.position = []
        hello_str.velocity = []
        hello_str.effort = []
        rate = rospy.Rate(10)  # 10hz
        i = 0
        qsize = np.size(q1[0])
        fsize = np.size(F[0])

    #Define the marker plotter
    if True:

        topic = 'visualization_marker_array'
        publisher_1 = rospy.Publisher(topic, MarkerArray, queue_size=100)
        publisher_2 = rospy.Publisher(topic, MarkerArray, queue_size=100)
        publisher_3 = rospy.Publisher(topic, MarkerArray, queue_size=100)
        #rospy.init_node('register')
        markerArray = MarkerArray()

        marker_f = Marker()
        marker_s = Marker()
        weight = Marker()
        marker_f.header.frame_id = "/prbt_base"
        marker_s.header.frame_id = "/prbt_base"
        weight.header.frame_id = "/prbt_base"
        marker_f.ns = "Fz_forces"
        marker_s.ns = "Fz_forces"
        weight.ns = "Fz_forces"
        marker_f.type = marker_f.ARROW
        marker_s.type = marker_s.ARROW
        weight.type = marker_s.ARROW
        marker_f.action = marker_f.ADD
        marker_s.action = marker_s.ADD
        weight.action = weight.ADD
        marker_f.id = 0
        marker_s.id = 1
        weight.id = 2
        #Scales
        marker_f.scale.x = 0.2
        marker_s.scale.x = 0.2
        weight.scale.x = 0.2

        marker_f.scale.y = 0.02
        marker_s.scale.y = 0.02
        weight.scale.y = 0.02

        marker_f.scale.z = 0.02
        marker_s.scale.z = 0.02
        weight.scale.z = 0.02

        marker_f.color.a = 1.0
        marker_f.color.r = 1.0
        marker_f.color.g = 1.0
        marker_f.color.b = 1.0

        marker_s.color.a = 1.0
        marker_s.color.r = 1.0
        marker_s.color.g = 1.0
        marker_s.color.b = 1.0

        weight.color.a = 1.0
        weight.color.r = 1.0
        weight.color.g = 1.0
        weight.color.b = 1.0

        marker_f.pose.orientation.x = 0.0
        marker_f.pose.orientation.y = 1.0
        marker_f.pose.orientation.z = 0.0
        marker_f.pose.orientation.w = -1.0

        marker_s.pose.orientation.x = 0.0
        marker_s.pose.orientation.y = 1.0
        marker_s.pose.orientation.z = 0.0
        marker_s.pose.orientation.w = -1.0

        weight.pose.orientation.x = 0.0
        weight.pose.orientation.y = 1.0
        weight.pose.orientation.z = 0.0
        weight.pose.orientation.w = 1.0

    while not rospy.is_shutdown():
        if i < qsize:

            if i < fsize:
                qf = [
                    q1[0][i], q1[1][i], q1[2][i], q1[3][i], q1[4][i], q1[5][i]
                ]
                qs = [
                    q2[0][i], q2[1][i], q2[2][i], q2[3][i], q2[4][i], q2[5][i]
                ]
                pos_Fzf = fk_first(q=qf)['ee_pos']
                pos_Fzs = fk_second(q=qs)['ee_pos']
                #Marker scales
                marker_f.scale.x = 0.2 * F[0][i] / F[2]
                marker_s.scale.x = 0.2 * F[1][i] / F[2]
                weight.scale.x = 0.2 * (F[1][i] + F[0][i]) / F[2]

                # Marker f position
                marker_f.pose.position.x = pos_Fzf[0] + 0.1
                marker_f.pose.position.y = pos_Fzf[1]
                marker_f.pose.position.z = pos_Fzf[2]

                marker_s.pose.position.x = pos_Fzs[0] - 0.1
                marker_s.pose.position.y = pos_Fzs[1]
                marker_s.pose.position.z = pos_Fzs[2]

                weight.pose.position.x = box[0][i]
                weight.pose.position.y = box[1][i]
                weight.pose.position.z = box[2][i]

            pub.publish(hello_str)
            publisher_1.publish([marker_f])
            publisher_2.publish([marker_s])
            publisher_3.publish([weight])
            rate.sleep()
            hello_str.header.stamp = rospy.Time.now()
            hello_str.position = [
                q1[0][i], q1[1][i], q1[2][i], q1[3][i], q1[4][i], q1[5][i],
                q2[0][i], q2[1][i], q2[2][i], q2[3][i], q2[4][i], q2[5][i]
            ]

        else:
            marker_f.action = marker_f.DELETE
            marker_s.action = marker_s.DELETE
            weight.action = weight.DELETE
            publisher_1.publish([marker_f])
            publisher_2.publish([marker_s])
            publisher_3.publish([weight])
            break
        i += 1