Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

DISTRIBUCIÓN DE LA CASA DE USO

1. INTRODUCCIÓN

Con la llegada del comercio electrónico, la demanda de productos ha aumentado y las empresas necesitan un gran inventario y requieren manejar grandes volúmenes a diario. Esto incluye muchas tareas que requieren mucha mano de obra, como almacenar, mover, escanear, inspeccionar, entregar y muchas más. Para una mayor eficiencia, un número cada vez mayor de centros de almacenamiento y distribución se está moviendo hacia la automatización en diversos grados, desde sistemas semiautónomos hasta completamente autónomos, según la demanda.

Los sistemas de manipulación robótica se utilizan cada vez más en almacenes y centros de distribución, ya que proporcionan flexibilidad para gestionar los distintos requisitos de demanda y pueden funcionar las 24 horas del día, los 7 días de la semana.

En este proyecto, se utiliza un brazo robótico para transferir paquetes desde un transportador y cargarlos en un robot de transporte interno para almacenarlos.

II. TRABAJANDO

Se trata de un sistema de recogida y transporte automatizado, donde el brazo robótico de 2 DOF (que se muestra en la Figura

2 ) puede girar sobre el eje zy el eje x y tiene una pinza. El robot de transporte (mostrado en

Figura 1 ) tiene un sensor ultrasónico montado para detectar su distancia desde la estación de acoplamiento. Una vez que está cerca de la estación, el vehículo gira 180 grados mientras envía una notificación al brazo informando la llegada. En la recepción, el brazo inicialmente alineado con el eje z, gira 90 grados hacia el transportador, para recoger la carga de este con la ayuda de una pinza. Una vez que recoge la carga, el brazo gira -90 grados y se alinea hacia atrás con el eje z (la pinza apunta hacia arriba). Luego, el brazo comienza a girar sobre el eje z mientras busca el vehículo de transporte, utilizando OpenCV y PiCamera. Una vez que descubre el robot de transporte que está estacionado frente al transportador, el brazo gira aún más el brazo -90 grados, hacia el robot, alrededor de la x colocando la pinza en la parte superior del robot de recogida. Posteriormente, la pinza se abre para colocar la carga en el bot, y luego le da una señal (Bluetooth) al mismo indicando la carga, mientras se mueve de regreso a la posición inicial. Una vez que el vehículo de transporte recibe esta notificación, comienza a alejarse de la estación de acoplamiento hacia la ubicación de almacenamiento deseada.

III. FILTRO DE PASO BAJO

Usamos un filtro Butterworth de paso bajo para filtrar los cambios de alta frecuencia en los datos de lectura x-y-z de la cámara. Estamos creando un vector de valores x-y-z y le aplicamos este filtro. Después de aplicar el filtro, estamos tomando los valores promedio de los últimos 20 elementos del vector para reducir el ruido y suavizar el gráfico, obteniendo así una posición más precisa de la bola desde la PiCam.

En la Figura 3 , la línea naranja son datos sin procesar (que son muy ruidosos y fluctúan mucho) y la línea azul es bata filtrada, que es suave.

IV. ELECTRÓNICA

Servo: En el proyecto se utilizan un total de 5 servomotores. 2 para la conducción del vehículo de transporte (accionamiento diferencial). 3 se utilizan para controlar las articulaciones del brazo robótico.

Sensor ultrasónico: Un sensor ultrasónico mide la distancia a un objeto mediante ondas ultrasónicas. El transmisor del sensor emite pulsos de sonido cortos de alta frecuencia a intervalos regulares que se propagan en el aire y se reflejan como señales de eco en el receptor cuando golpean un objeto. La distancia se calcula midiendo el lapso de tiempo entre la emisión de la señal y la recepción del eco (llamado Tiempo de vuelo). Se monta en el robot móvil y se utiliza para la planificación y detección de rutas. Bluetooth:el HC06 montado en Arduino se utiliza para comunicarse en serie con el módulo Bluetooth incorporado de la Raspberry pi.

Pi-Camera:una cámara montada en una de las articulaciones del brazo robótico se usa para rastrear el vehículo de transporte estacionado en algún lugar de la estación de acoplamiento.

V. CIRCUITO

Como podemos ver en la Figura 4 hemos usado tres servos en el raspberry pi.

Raspberry pi solo tiene dos pines PWM, por lo que hemos escrito nuestro propio código de servo PWM para hacer que se ejecuten tres servos,

La cámara Pi está conectada a la Raspberry Pi como se muestra arriba. La cámara encuentra la pelota usando OpenCV y bloquea la posición del brazo.

Arduino tiene un total de cuatro componentes conectados como se muestra en la figura anterior. Dos servos, un sensor ultrasónico y un módulo Bluetooth HC-06. ¿Cuál se usa para ejecutar el robot de carga?

V. CÓDIGO

VI.I. Código Arduino:

#include

Servo a la izquierda;

Servo derecho;

const int GNND =4; const int GNDD =35; const int echo =37; const int trig =39; const int VCCC =41;

flotante invcmCosnt =(2 * 1000000) / (100 * 344.8); // cmDist =rawTime / invcmCosnt void setup () {

Serial.begin (9600); Serial3.begin (9600);

adjuntar.izquierda (3); // conecta el servo en el pin 9 al objeto servo right.attach (5);

pinMode (trig, SALIDA); pinMode (eco, ENTRADA); pinMode (GNND, SALIDA); pinMode (GNDD, SALIDA); pinMode (VCCC, SALIDA);

escritura digital (VCCC, ALTA); escritura digital (GNND, BAJA); escritura digital (GNDD, BAJA); pinMode (LED_BUILTIN, SALIDA);

escribir a la izquierda (114); escribir a la derecha (74);

}

bucle vacío () {

float rawTime, cmDist; digitalWrite (trig, LOW); delayMicroseconds (2); digitalWrite (trig, HIGH); delayMicroseconds (5); digitalWrite (trig, LOW); rawTime =pulseIn (eco, ALTO); cmDist =100;

while (cmDist> 4) {digitalWrite (trig, LOW); delayMicroseconds (2); digitalWrite (trig, HIGH); delayMicroseconds (5); digitalWrite (trig, LOW); rawTime =pulseIn (eco, ALTO); cmDist =rawTime / invcmCosnt; Serial.println (cmDist);

}

Serial.println ("Salida"); Serial3.println ("s"); escribir a la izquierda (94); escribir a la derecha (94); retraso (1000); escribir a la izquierda (114); escribir a la derecha (114); retraso (1700); Serial.println ("Convertido"); escribir a la izquierda (94); escribir a la derecha (94); Serial.println ("Detenido"); while (1) {

if (Serial3.read () ==’f’) {break;

}

}

escribir a la izquierda (114); escribir a la derecha (74); retraso (2500); escribir a la izquierda (94); escribir a la derecha (94); while (1) {

}

}

VI.II. Frambuesa

En el extremo de la Raspberry, es necesario conectar la Raspberry Pi al Módulo Bluetooth HC-06 usando los siguientes comandos para buscar primero,

$ Hcitool scan # Se puede omitir si se conoce y está disponible el MAC ID del Bluetooth

Y luego conéctese al Bluetooth requerido usando la ID de MAC correcta:

$ Sudo rfcomm connect hci0 xx:xx:xx:xx:xx:xx

Si esto se ejecuta con éxito, entonces el Bluetooth está conectado.

importar los paquetes necesarios de las colecciones import deque

desde imutils.video import VideoStream import numpy as np
import argparse import cv2 import imutils import time import timeit
from scipy import signal import matplotlib.pyplot as plt

importar RPi.GPIO como GPIO

importar serial

GPIO.setmode (GPIO.BCM) GPIO.setup (12, GPIO.OUT) # Pinza GPIO.setup (13, GPIO.OUT) # Rot_x GPIO.setup (16, GPIO.OUT) # Rot_z

rotz =16
rotx =GPIO.PWM (13, 50) gr =GPIO.PWM (12, 50)

azul =serial.Serial ("/ dev / rfcomm0", velocidad en baudios =9600) imprimir ("Bluetooth conectado")

def duty (ángulo):
ángulo de retorno * 5/90 + 2.5

def búsqueda (ángulo =90, agregar =1):servo_pwm (rotz, deber (ángulo), 50) ap =argparse.ArgumentParser () ap.add_argument (“- v”, “–video”,
ayuda =”Ruta al archivo de video (opcional)”) ap.add_argument (“- b”, “–buffer”, type =int, default =64,
help =”max buffer size”) args =vars (ap .parse_args ())
xn =np.zeros ([500]) xm =np.zeros ([1])
greenLower =(20, 20, 53)
greenUpper =(64 , 255, 255)
pts =deque (maxlen =args ["búfer"])

si no se proporcionó una ruta de video, tome el número de referencia a la cámara web

si no es args.get ("video", False):
vs =VideoStream (src =0) .start ()

de lo contrario, tome una referencia al archivo de video de lo contrario:

vs =cv2.VideoCapture (args ["video"])

permita que la cámara o el archivo de video se calienten time.sleep (2.0)

while True:
if angle ==125:
add =-5
elif angle ==35:
add =5 angle + =add
servo_pwm (rotz, deber (ángulo), 10) tiempo.sueño (0.01)

tomar el fotograma actual frame =vsread ()

manejar el fotograma de VideoCapture o VideoStream frame =frame [1] if args.get ("video", False) else frame

si estamos viendo un video y no tomamos un fotograma, # entonces hemos llegado al final del video

si el marco es Ninguno:
romper

cambiar el tamaño del marco, difuminarlo y convertirlo al espacio de color HSV #

frame =imutils.resize (frame, width =600) blur =cv2.GaussianBlur (frame, (11, 11), 0)
hsv =cv2.cvtColor (borroso, cv2.COLOR_BGR2HSV)

construya una máscara para el color "verde", luego realice # una serie de dilataciones y erosiones para eliminar las pequeñas manchas # que quedan en la máscara

mask =cv2.inRange (hsv, greenLower, greenUpper) mask =cv2.erode (máscara, Ninguna, iteraciones =2)
máscara =cv2.dilate (máscara, Ninguna, iteraciones =2)

encontrar contornos en la máscara e inicializar el centro actual # (x, y) de la bola

cnts =cv2.findContours (mask.copy (), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts =imutils.grab_contours (cnts) center =Ninguno

solo proceda si se encontró al menos un contorno si len (cnts)> 0:

encuentre el contorno más grande en la máscara, luego use

para calcular el círculo circundante mínimo y el # centroide

c =max (cnts, key =cv2.contourArea)
((x, y), radio) =cv2.minEnclosingCircle (c) M =cv2.moments (c)
centro =(int (M [“M10”] / M [“m00”]), int (M [“m01”] / M [“m00”])) # solo proceda si el radio cumple con un tamaño mínimo
si radio> 10:

dibuje el círculo y el centroide en el marco, # luego actualice la lista de puntos rastreados cv2.circle (frame, (int (x), int (y)), int (radius),

(0, 255, 255), 2)
cv2.circle (marco, centro, 5, (0, 0, 255), -1)

xn =np.delete (xn, 0) xn =np.append (xn, x) fs =300
fc =1 x_old =x
w =fc / (fs / 2)
b, a =señal.butter (5, w, 'bajo') salida =señal.filtfilt (b, a, xn) x =np.average (xn [480:500]) print (x, x_old)
xm =np.append (xm, x) if abs (x - 300) <20:
break

actualizar la cola de puntos pts.appendleft (center)

para i en el rango (1, len (pts)):

si alguno de los puntos rastreados es Ninguno, ignórelos # ellos

si pts [i - 1] es Ninguno o pts [i] es Ninguno:
continuar

de lo contrario, calcule el grosor de la línea y # dibuje las líneas de conexión

grosor =int (np.sqrt (args ["buffer"] / float (i + 1)) * 2.5) cv2.line (frame, pts [i - 1], pts [i], (0, 0, 255) , espesor)

mostrar el marco a nuestra pantalla cv2.imshow ("Marco", marco) key =cv2.waitKey (1) &0xFF

si se presiona la tecla "q", detenga el ciclo si la tecla ==ord ("q"):

print (xn) print (xn.shape) plt.plot (xm, label =’x’) plt.show ()
break

si no es args.get ("video", False):vs.stop ()

de lo contrario, suelte la cámara de lo contrario:

versus versión ()

cerrar todas las ventanas cv2.destroyAllWindows () return x, agregar

def servo_pwm (pin, duty, pulse):on =20 * duty / 100000
off =-on + 20/1000 para i en rango (pulso):
Salida GPIO (pin, GPIO.HIGH ) time.sleep (activado) GPIO.output (pin, GPIO.LOW) time.sleep (desactivado)

def grip (ángulo =90):
servo_pwm (rotz, duty (angle), 100) rotx.start (duty (90)) gr.start (duty (100))
time.sleep (1 ) rotx.ChangeDutyCycle (deber (0)) time.sleep (1) gr.ChangeDutyCycle (deber (180)) time.sleep (0.5) rotx.ChangeDutyCycle (deber (90)) time.sleep (0.5)

def drop ():rotx.ChangeDutyCycle (deber (180))

time.sleep (1) gr.ChangeDutyCycle (deber (100)) time.sleep (1) rotx.ChangeDutyCycle (deber (90)) time.sleep (0.5)

def done ():
done ="f"
done =done.encode () blue.write (done)

intente:
while True:
data =blue.readline () # data =data.decode ()

imprimir (tipo (datos), datos) # si datos! ="s":

imprimir ("no") # continuar

else:print ("encontrado s") grip (80)

x, agregar =buscar (80, 5) soltar ()
hecho ()

excepto KeyboardInterrupt:GPIO.cleanup () print ("Salir")

VII. CONCLUSIÓN

En este proyecto, implementamos un sistema de manejo de carga para la automatización de almacenes. Un brazo robótico recoge artículos de una cinta transportadora, busca el vehículo de transporte usando una cámara montada en él, carga el pedido en el vehículo, después de lo cual el vehículo de transporte lleva las mercancías a la ubicación requerida para su posterior procesamiento. La automatización de almacenes se está volviendo cada vez más común en empresas grandes y pequeñas debido a las crecientes demandas de los clientes y al crecimiento del comercio electrónico. Goods to People (GTP) es una tendencia emergente más reciente en la que los bienes se mueven a los trabajadores, en lugar de los trabajadores a los artículos. Según Nathan Busch, ingeniero consultor asociado de Bastian Solutions Inc., “Las tasas de rendimiento de los sistemas GTP suelen ser bastante más altas que las operaciones manuales tradicionales. Esto permite a las empresas reducir sus costos operativos generales y de cumplimiento de pedidos al tiempo que mejoran el rendimiento y los niveles de servicio ". La robótica móvil se ha convertido ahora en una parte crucial de esto, ya que los artículos se buscan, se recogen y luego se llevan a sus respectivos sitios de procesamiento. El alcance futuro de este proyecto se consideró ampliamente para un sistema de almacén totalmente autónomo, donde los artículos que se almacenarán pueden separarse mediante otro sistema y el sistema presentado anteriormente puede transferir las mercancías desde el transportador al bot de almacenamiento, que además encuentra un ruta óptima a la ubicación de almacenamiento deseada y almacena la mercancía. Esta demostración presenta que el sistema mencionado se puede implementar en partes para beneficio de las empresas más pequeñas; por lo tanto, combina la operación manual y robótica para un mayor rendimiento y un rendimiento mejorado.

Fuente:DISTRIBUCIÓN DE WEARHOUSE


Proceso de manufactura

  1. Spork
  2. Titanio
  3. Biocerámicas
  4. Castañuelas
  5. Grúa
  6. Pegamento
  7. Reloj de arena
  8. Hilo
  9. Acetileno
  10. Amianto
  11. Estaño