산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

웨어하우스 유통

1. 소개

전자 상거래의 출현으로 제품에 대한 수요가 증가하고 기업은 많은 재고를 필요로 하고 매일 많은 양을 처리해야 합니다. 여기에는 보관, 이동, 스캔, 검사, 배달 등과 같은 많은 노동 집약적인 작업이 포함됩니다. 더 나은 효율성을 위해 점점 더 많은 창고 및 유통 센터가 수요에 따라 반자율에서 완전 자율 시스템에 이르기까지 다양한 수준의 자동화로 이동하고 있습니다.

로봇 처리 시스템은 다양한 수요 요구 사항을 관리할 수 있는 유연성을 제공하고 연중무휴로 작동할 수 있기 때문에 창고 및 유통 센터에서 점점 더 많이 사용되고 있습니다.

이 프로젝트에서는 로봇 팔을 사용하여 컨베이어에서 패키지를 옮기고 재고를 위해 사내 운송 봇에 로드합니다.

Ⅱ. 작업 중

이것은 자동 픽업 및 운송 시스템으로, 2 DOF 로봇 팔(그림 참조)

2 ) z축 및 x축을 중심으로 회전할 수 있으며 그리퍼가 있습니다. 운송 봇(

에 표시됨)

그림 1 )에는 도킹 스테이션과의 거리를 감지하기 위해 초음파 센서가 장착되어 있습니다. 역 근처에 도착하면 차량이 180도 회전하면서 팔에 도착을 알리는 알림을 보냅니다. 접수 시 초기에 z축과 정렬된 암이 컨베이어를 향해 90도 회전하여 그리퍼의 도움으로 화물을 픽업합니다. 화물을 픽업하면 암이 -90도 회전하여 z축에 맞춰 정렬됩니다(그리퍼가 위쪽을 향함). 그런 다음 암은 OpenCV 및 PiCamera를 사용하여 운송 차량을 검색할 때 z축을 중심으로 회전하기 시작합니다. 컨베이어 반대편에 배치된 운송 로봇을 발견하면 암은 픽업 로봇 상단에 그리퍼를 배치하는 x만큼 암을 봇을 향해 -90도 더 회전합니다. 나중에 그리퍼를 열어 봇에 화물을 싣고 다시 초기 위치로 이동할 때 적재함을 나타내는 (Bluetooth) 신호를 봇에 보냅니다. 운송 차량은 이 알림을 받으면 도킹 스테이션에서 원하는 적재 위치로 이동하기 시작합니다.

Ⅲ. 로우 패스 필터

카메라 판독 x-y-z 데이터의 고주파수 변화를 필터링하기 위해 저역 통과 버터워스 필터를 사용했습니다. x-y-z 값을 출력하는 벡터를 만들고 이 필터를 적용합니다. 필터를 적용한 후 노이즈를 줄이고 그래프를 매끄럽게 하기 위해 벡터의 마지막 20개 요소의 평균값을 취하여 PiCam에서 볼의 더 정확한 위치를 얻습니다.

그림 3에서 , 주황색 선은 원시 데이터(매우 시끄럽고 변동이 많음)이고 파란색 선은 필터링된 바타 부드러운 것입니다.

IV. 전자공학

서보: 프로젝트에는 총 5개의 서보 모터가 사용됩니다. 2 운송 차량을 운전하기 위한 것입니다(차동 구동). 3개는 로봇 팔의 관절을 제어하는 ​​데 사용됩니다.

초음파 센서: 초음파 센서는 초음파를 사용하여 물체까지의 거리를 측정합니다. 센서의 송신기는 일정한 간격으로 짧은 고주파수 사운드 펄스를 방출하여 공기 중에 전파되고 물체에 부딪힐 때 에코 신호로 수신기에 다시 반사됩니다. 거리는 신호 방출과 에코 수신 사이의 시간 범위(비행 시간이라고 함)를 측정하여 계산됩니다. 모바일 로봇에 탑재되어 경로 계획 및 감지에 사용됩니다. 블루투스:아두이노에 탑재된 HC06은 라즈베리파이에 내장된 블루투스 모듈과 직렬로 통신하는 데 사용됩니다.

Pi-Camera:로봇 팔의 관절 중 하나에 장착된 카메라는 도킹 스테이션 어딘가에 정박한 운송 차량을 추적하는 데 사용됩니다.

V. 회로

그림 에서 볼 수 있듯이 4 우리는 raspberry pi에서 세 개의 서보를 사용했습니다.

Raspberry pi에는 두 개의 PWM 핀만 있으므로 세 개의 서보를 실행하기 위해 자체 PWM 서보 코드를 작성했습니다.

위와 같이 라즈베리파이에 파이캠이 부착되어 있습니다. 카메라는 OpenCV를 사용하여 공을 찾고 팔의 위치를 ​​잠급니다.

아두이노에는 위 그림과 같이 총 4개의 부품이 부착되어 있습니다. 2개의 서보, 1개의 초음파 센서 및 1개의 HC-06 Bluetooth 모듈. 화물 봇을 실행하는 데 사용되는 것은 무엇입니까?

V. 코드

VI.I. Arduino 코드:

#include <서보.h>

서보 왼쪽;

서보 오른쪽;

상수 정수 GNND =4; 상수 정수 GNDD =35; 상수 정수 에코 =37; 상수 정수 삼각 =39; 상수 정수 VCCC =41;

float invcmCost =(2*1000000)/(100*344.8); //cmDist=rawTime/invcmCosnt 무효 설정() {

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

left.attach(3); // 9번 핀의 서보를 서보 객체에 연결 right.attach(5);

핀모드(트리거, 출력); 핀모드(에코, 입력); 핀모드(GNND, 출력); 핀모드(GNDD, 출력); 핀모드(VCCC, 출력);

디지털 쓰기(VCCC, 높음); 디지털 쓰기(GNND, LOW); 디지털 쓰기(GNDD, LOW); 핀모드(LED_BUILTIN, 출력);

왼쪽.쓰기(114); right.write(74);

}

무효 루프() {

float rawTime, cmDist; digitalWrite(트리거, LOW); 지연 마이크로초(2); digitalWrite(trig, HIGH); 지연 마이크로초(5); digitalWrite(트리거, LOW); rawTime =pulseIn(에코, 높음); cmDist =100;

while(cmDist> 4){ digitalWrite(trig, LOW); 지연 마이크로초(2); digitalWrite(trig, HIGH); 지연 마이크로초(5); digitalWrite(트리거, LOW); rawTime =pulseIn(에코, 높음); cmDist =rawTime/invcmCosnt; Serial.println(cmDist);

}

Serial.println("출력"); Serial3.println("들"); 왼쪽.쓰기(94); right.write(94); 지연(1000); 왼쪽.쓰기(114); right.write(114); 지연(1700); Serial.println("변경됨"); 왼쪽.쓰기(94); right.write(94); Serial.println("중지됨"); 동안(1){

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

}

}

왼쪽.쓰기(114); right.write(74); 지연(2500); 왼쪽.쓰기(94); right.write(94); 동안(1){

}

}

VI.II. 라즈베리

Raspberry 끝에서 먼저 다음 명령을 사용하여 Raspberry Pi를 HC-06 Bluetooth 모듈에 연결해야 합니다.

$ hcitool scan # 블루투스의 MAC ID를 알고 있고 사용 가능한 경우 건너뛸 수 있음

그런 다음 올바른 MAC ID를 사용하여 필요한 Bluetooth에 연결하십시오.

$ sudo rfcomm connect hci0 xx:xx:xx:xx:xx:xx

성공적으로 실행되면 블루투스가 연결된 것입니다.

컬렉션 import deque에서 필요한 패키지 가져오기

imutils.video에서 가져오기 VideoStream 가져오기 numpy를 np로 가져오기
argparse 가져오기 cv2 가져오기 imutils 가져오기 시간 가져오기 timeit
scipy에서 가져오기 신호 가져오기 matplotlib.pyplot을 plt로 가져오기

GPIO로 RPi.GPIO 가져오기

시리얼 가져오기

GPIO.setmode(GPIO.BCM) GPIO.setup(12, GPIO.OUT) # 그리퍼 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)

blue =serial.Serial("/dev/rfcomm0", baudrate=9600) print("블루투스 연결됨")

def duty(각도):
반환 각도 * 5 / 90 + 2.5

def search(각도=90, 추가=1):서보_pwm(rotz, duty(각도), 50) ap =argparse.ArgumentParser() ap.add_argument(“-v”, “–비디오”,
help="(선택) 비디오 파일의 경로") ap.add_argument("-b", "–buffer", type=int, default=64,
help="최대 버퍼 크기") 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[“버퍼”])

비디오 경로가 제공되지 않은 경우 웹캠에 대한 참조 번호를 가져옵니다.

args.get(“비디오”, False)가 아닌 경우:
vs =VideoStream(src=0).start()

그렇지 않으면 비디오 파일에 대한 참조를 가져옵니다.

대 =cv2.VideoCapture(args[“비디오”])

카메라 또는 비디오 파일이 예열되도록 허용합니다. time.sleep(2.0)

while True:
각도 ==125인 경우:
추가 =-5
elif 각도 ==35:
추가 =5 각도 +=추가
servo_pwm(rotz, 듀티(각도), 10) time.sleep(0.01)

현재 프레임 프레임 잡기 =vs.read()

VideoCapture 또는 VideoStream에서 프레임을 처리합니다. frame =frame[1] if args.get(“video”, False) else frame

비디오를 보고 있는데 프레임을 잡지 않았다면 # 비디오의 끝에 도달한 것입니다.

프레임이 None인 경우:
break

프레임 크기를 조정하고 흐리게 처리한 다음 HSV # 색상 공간으로 변환합니다.

프레임 =imutils.resize(프레임, 너비=600) 흐리게 =cv2.GaussianBlur(프레임, (11, 11), 0)
hsv =cv2.cvtColor(흐리게, cv2.COLOR_BGR2HSV)

"녹색" 색상에 대한 마스크를 구성한 다음 # 일련의 팽창 및 침식을 수행하여 마스크에 남아 있는 # 작은 얼룩을 제거합니다.

마스크 =cv2.inRange(hsv, greenLower, greenUpper) 마스크 =cv2.erode(mask, None, iterations=2)
mask =cv2.dilate(mask, None, iterations=2)

마스크에서 윤곽선을 찾고 공의 현재 # (x, y) 중심을 초기화합니다.

cnts =cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts =imutils.grab_contours(cnts) 센터 =없음

len(cnts)> 0:

인 경우 하나 이상의 윤곽선이 발견된 경우에만 진행합니다.

마스크에서 가장 큰 윤곽선을 찾은 다음 사용

최소 둘러싸는 원과 # 중심을 계산하기 위해

c =max(cnts, key=cv2.contourArea)
((x, y), 반지름) =cv2.minEnclosingCircle(c) M =cv2.moments(c)
center =(int(M ["m10"] / M["m00"]), int(M["m01"] / M["m00"])) # 반경이 최소 크기를 충족하는 경우에만 진행
반경> 10:

프레임에 원과 중심을 그린 다음 # 추적된 점 목록을 업데이트합니다. cv2.circle(frame, (int(x), int(y)), int(radius),

(0, 255, 255), 2)
cv2.circle(프레임, 중앙, 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 =signal.butter(5, w, '낮음') 출력 =signal.filtfilt(b, a, xn) x =np.average(xn[480:500]) print(x, x_old)
xm =np.append(xm, x) if abs(x – 300) <20:
나누기

포인트 대기열 업데이트 pts.appendleft(center)

for i in range(1, len(pts)):

추적된 지점 중 하나가 없음인 경우 # 무시합니다.

pts[i – 1]이 None이거나 pts[i]가 None인 경우:
계속

그렇지 않으면 선의 굵기를 계산하고 # 연결선을 그립니다.

두께 =int(np.sqrt(args["버퍼"] / float(i + 1)) * 2.5) cv2.line(frame, pts[i – 1], pts[i], (0, 0, 255) , 두께)

화면에 프레임을 표시합니다. cv2.imshow("Frame", frame) key =cv2.waitKey(1) &0xFF

'q' 키를 누르면 루프를 중지합니다. if key ==ord("q"):

print(xn) print(xn.shape) plt.plot(xm, label='x') plt.show()
중단

args.get("video", False)이 아닌 경우:vs.stop()

그렇지 않으면 카메라를 놓으십시오.

vs.release()

모든 창 닫기 cv2.destroyAllWindows() return x, 추가

def 서보_pwm(핀, 듀티, 펄스):on =20 * duty / 100000
off =-on + 20 / 1000 for i in range(pulse):
GPIO.output(pin, GPIO.HIGH ) time.sleep(on) GPIO.output(pin, GPIO.LOW) time.sleep(off)

def 그립(각도=90):
servo_pwm(rotz, duty(각도), 100) rotx.start(duty(90)) gr.start(duty(100))
time.sleep(1 ) rotx.ChangeDutyCycle(duty(0)) time.sleep(1) gr.ChangeDutyCycle(duty(180)) time.sleep(0.5) rotx.ChangeDutyCycle(duty(90)) time.sleep(0.5)

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

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

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

시도:
true 동안:
data =blue.readline() # 데이터 =data.decode()

print(type(data), data) # if data !=“s”:

print("하지 않았습니다") # 계속

else:print("found s") 그립(80)

x, 추가 =search(80, 5) drop()
done()

KeyboardInterrupt 제외:GPIO.cleanup() print("종료")

Ⅶ. 결론

이 프로젝트에서는 창고 자동화를 위한 화물 처리 시스템을 구현했습니다. 로봇 팔은 컨베이어 벨트에서 품목을 픽업하고, 장착된 카메라를 사용하여 운송 차량을 검색하고, 주문을 차량에 적재한 후 운송 차량이 추가 처리를 위해 필요한 위치로 상품을 가져갑니다. 창고 자동화는 고객의 수요 증가와 전자 상거래의 성장으로 인해 대기업과 중소기업 모두에서 점점 더 보편화되고 있습니다. GTP(Goods to People)는 작업자가 항목으로 이동하는 것이 아니라 상품이 작업자에게 이동하는 새로운 신흥 트렌드입니다. Bastian Solutions Inc.의 컨설팅 엔지니어인 Nathan Busch에 따르면 “GTP 시스템의 처리율은 일반적으로 기존 수동 작업보다 훨씬 높습니다. 이를 통해 기업은 처리량과 서비스 수준을 향상시키면서 전체 운영 및 주문 이행 비용을 절감할 수 있습니다.” 모바일 로봇 공학은 이제 품목을 검색하고 픽업한 다음 해당 처리 현장으로 가져갈 때 이 분야에서 중요한 부분이 되었습니다. 이 프로젝트의 미래 범위는 재고될 품목이 다른 시스템으로 분리될 수 있고 위에 제시된 시스템이 상품을 컨베이어에서 스타킹 봇으로 이송할 수 있는 완전 자율 창고 시스템에 대해 광범위하게 고려되었습니다. 원하는 입고위치까지 최적의 경로로 상품을 입고합니다. 이 데모는 언급된 시스템이 소규모 기업의 이익을 위해 부분적으로 구현될 수 있음을 나타냅니다. 따라서 처리량 증가와 성능 향상을 위해 수동 작업과 로봇 작업을 결합합니다.

출처:창고 배포


제조공정

  1. 스포크
  2. 티타늄
  3. 바이오세라믹
  4. 캐스터네츠
  5. 크레인
  6. 접착제
  7. 모래시계
  8. 스레드
  9. 아세틸렌
  10. 주석