Beispiel #1
0
hello_str.name = ['One_joint', 'Two_joint', 'Three_joint', 'Four_joint'\
    ,'Five_joint','Six_joint','Seven_joint','L_F_joint','R_F_joint']
hello_str.position = [0, 0, 0, 0, 0, 0, 0, 0, 0]
hello_str.velocity = []
hello_str.effort = []

#variaveis do método
#passo maximo entre atualizacoes das juntas
qmax = 0.1
K = 1000  #número máximo de iterações
#valor maximo que a junta pode assumir
qlim = [2.6179, 1.5358, 2.6179, 1.6144, 2.6179, 1.8413, 1.7889]

#Objetivos
[posicaod, orientd] = random_pose()
rpyd = orientacao(orientd)
#vetores colunas do sistema de coordenadas global
z = np.array([[0, 0, 1, 1]]).T
o = np.array([[0, 0, 0, 1]]).T  #origem

#Inicialização dos angulos de juntas
q = np.zeros([7, 1])
for a in range(np.size(q)):
    q[a] = random.uniform(-qlim[a], qlim[a])

#Parâmetros Físicos do manipulador [m]
base = 0.05  #5 cm
L = 0.075  #distância da ultima junta a extremidade do efetuador

#parametros de DH constantes
d1 = 0.075 + base
Beispiel #2
0
hello_str.effort = []

n = 7 #numero de juntas
x  = vetor([1,0,0])
y  = vetor([0,1,0])
z  = vetor([0,0,1])

repeticoes = 1000
convergencia = 0
excedeu = 0
ktotal = 0
for rep in range(repeticoes):
    #Gera uma pose aleatória desejada (posição + orientação)
    posicaod, orientd = random_pose()
    destino = posicaod
    orientd2 = orientacao(orientd)
    #tamanho dos elos
    b = np.array([0.05,0.075,0.075,0.0725,0.0725,0.075,0.075]) 
    #modulo dos limites de juntas 
    qlim = [2.6179,1.5358,2.6179,1.6144,2.6179,1.8413,1.7889] 
    #Confifuração do robô nula
    q = np.zeros([7,1])

    #Gera uma configuração aleatória
    for i in range(np.size(q)):
        q[i] = random.uniform(-qlim[i],qlim[i])

    #Calcula os pontos e os vetores de atuação do robô atuais
    p,D = Cinematica_Direta2(q)

    #No Backward a junta 1 é sempre iniciada no mesmo lugar 
Beispiel #3
0
    def update_fuction(self, o,
                       o2):  #Calcula a função de custo/fitness da particula
        #(posição,orientacao) da pose desejada
        #Parâmetros Físicos do manipulador [m]
        base = 0.05  #5 cm
        L = 0.075  #distância da ultima junta a extremidade do efetuador

        #centro do efetuador em relação ao ultimo sistema de coordenada
        p = np.array([0, 0, L, 1]).T

        #Parâmetros de Denavit-Hartenberg do manipulado
        d1 = 0.075 + base
        d2 = 0
        d3 = 0.15
        d4 = 0
        d5 = 0.145
        d6 = 0
        d7 = 0
        a1 = 0
        a2 = 0
        a3 = 0
        a4 = 0
        a5 = 0
        a6 = 0.075
        a7 = 0
        alpha1 = pi / 2
        alpha2 = -pi / 2
        alpha3 = pi / 2
        alpha4 = -pi / 2
        alpha5 = pi / 2
        alpha6 = pi / 2
        alpha7 = pi / 2
        theta1 = pi / 2 + self.p[0]
        theta2 = self.p[1]
        theta3 = self.p[2]
        theta4 = self.p[3]
        theta5 = self.p[4]
        theta6 = pi / 2 + self.p[5]
        theta7 = pi / 2 + self.p[6]

        #Calculo das matrizes homogeneas
        A1 = matriz_homogenea(d1, a1, alpha1, theta1)
        A2 = matriz_homogenea(d2, a2, alpha2, theta2)
        A3 = matriz_homogenea(d3, a3, alpha3, theta3)
        A4 = matriz_homogenea(d4, a4, alpha4, theta4)
        A5 = matriz_homogenea(d5, a5, alpha5, theta5)
        A6 = matriz_homogenea(d6, a6, alpha6, theta6)
        A7 = matriz_homogenea(d7, a7, alpha7, theta7)
        A = A1 @ (A2 @ (A3 @ (A4 @ (A5 @ (A6 @ A7)))))

        #posição do efetuador em relação ao sistema de coordenadas global
        p = A @ p

        #calculo do erro em módulo da orientacao desejada e da particula
        self.o = distancia(orientacao(A), o2, 3)

        #calculo da distancia euclidiana da posição do efetuador em relação ao objetivo
        self.d = distancia(p.T, o, 3)

        #Calculo da função de custo
        k1 = 0.1  #orientacao
        k2 = 0.9  #posição
        self.f = (k1 * self.o) + (k2 * self.d)
        if (self.f < self.bf):
            self.bf = self.f
            self.bp = self.p.copy()
Beispiel #4
0
#variaveis do método
#passo maximo entre atualizacoes das juntas
qmax = 0.1
#Constante alpha para melhorar  a aproximação
alfa = 0.1
#Constante de amortecimento
lbd = 0.005
I = np.eye(6)
K = 1000  #número máximo de iterações
#valor maximo que a junta pode assumir
qlim = [2.6179, 1.5358, 2.6179, 1.6144, 2.6179, 1.8413, 1.7889]

#Objetivos
[posicaod, orientd] = random_pose()
rpyd = orientacao(orientd)  #angulos de Roll Pitch Yaw desejados

#vetores colunas do sistema de coordenadas global
z = np.array([[0, 0, 1, 1]]).T
o = np.array([[0, 0, 0, 1]]).T  #origem

#Inicialização dos angulos de juntas
q = np.zeros([7, 1])
for a in range(np.size(q)):
    q[a] = random.uniform(-qlim[a], qlim[a])

#Parâmetros Físicos do manipulador [m]
base = 0.05  #5 cm
L = 0.075  #distância da ultima junta a extremidade do efetuador

#parametros de DH constantes
Beispiel #5
0
    print(f)
    return qbest


#Main
#configurando o Rviz
pub = rospy.Publisher('joint_states', JointState, queue_size=10)
rospy.init_node('joint_state_publisher')
rate = rospy.Rate(100)  # 10hz
hello_str = JointState()
hello_str.header = Header()
hello_str.header.stamp = rospy.Time.now()
hello_str.name = ['One_joint', 'Two_joint', 'Three_joint', 'Four_joint'\
    ,'Five_joint','Six_joint','Seven_joint','L_F_joint','R_F_joint']
hello_str.position = [0, 0, 0, 0, 0, 0, 0, 0, 0]
hello_str.velocity = []
hello_str.effort = []

#objetivo
[posicaod, orientd] = random_pose()
orientd = orientacao(orientd)
numero_particulas = 200
dimensao = 7  #dimensão do robô

#restrições de cada ângulo
L = [2.6179, 1.5358, 2.6179, 1.6144, 2.6179, 1.8413, 1.7889]
while not rospy.is_shutdown():
    solucao = PSO(posicaod, orientd, numero_particulas, dimensao, L)
    print('Solução q = ', solucao)
    break