본문 바로가기

KAIROS 2기

[카이로스2기] 딥러닝 심화 교육2 : YOLO v8 with myCobot

딥러닝 심화 두번째 교육에서는 YOLO 모델을 이어서 사용하되, 6축 로봇 myCobot을 함께 활용한 실습을 진행하였다.
지난 아두이노때에 서보모터 3개를 이용한 3축 로봇암을 간단하게 사용해보았었는데, 확실히 잘 만들어진 6축 로봇을 다뤄보니 매우 신기했다.😮
이번주 블로그 내용은 아래와 같이 4가지 항목에 대해 작성해보았다.

1. myCobot 설치 & 설정
2. myblockly 활용하기
3. cobot 카메라 설치, 물체 라벨링, 학습
4. cobot Gripper 연결 & 동작

 

1. myCobot 설치 & 설정

신기한 생김새의 myCobot을 만나보았다. 카이로스 2기 교육과정에서 시작 전부터 많이 강조되었던 협동로봇인 myCobot은 6개의 관절을 각각 다르게 움직일 수 있는 로봇암이다.
생각보다 무거운데 얘도 함께하다보니 금방 정들었다..ㅎ😅 (대상(大象) 코끼리 사의 제품인데 elephant사라고 적힌것도 귀여웠다..)


우선 cobot의 움직임에도 버틸 수 있도록 하단을 책상에 잘 고정하는 작업을 하고, 모든 관절의 각도가 0도인 기본 자세를 인식시킬 수 있도록 Calibration 작업을 진행하였다.
1번부터 6번까지 관절들을 표시된 홈에 맞추고 테스트해보면 차례대로 잘 움직이는 것을 확인할 수 있다.
cobot에는 비상 정지 버튼이 있는데, 동작이 잘못되어 급박한 상황이(?) 되면 비상 버튼으로 강제 종료를 시킬 수 있다.
이 경우 cobot이 허물어지니 조심해서 잘 받아주고, calibration부터 다시 진행해주어야 한다.😂


2. myBlockly

cobot을 움직이는 과정을 처음 배우기 위해,강사님께서 더 쉬운 블록코딩으로 접근해주셨다.
myBlockly는 mycobot과 같은 elephant사에서 제공하는 소프트웨어로, 쉽게 호환되어 사용할 수 있다.
연결하기 위해서는 장치관리자에서 USB포트와 연결된 COM 번호를 확인하고, myBlockly 첫 줄에도 해당 포트로 연결해주어야 코드를 넣을 수 있다.

🎀 Tip : myBlockly에서 코드를 넣고 Run을 했는데도 cobot이 동작하지 않는다면?
- cobot의 화면이 : Transponder > USB UART > atom ok 상태로 되어있는지 확인합니다.
- 그래도 안된다면 메모리 충돌일 수 있으니, Flash 메뉴에서 메모리를 flash 해주고 재시도합니다.
- 모든 방법이 안된다면 강제종료 후 calibration하는 것이 빠를 수 있습니다.😅

 
Set angle을 통해서 10씩 늘려가며 모든 관절에 각도를 주는 프로그램을 만들어보았다.
제일 아래 관절인 1번부터 10도씩 점점 트는 것을 볼 수 있었다.
2중 for문 형식으로 구성해봤는데, 상수, 변수를 모두 끌어와야해서 그저 파이썬으로 짜는것이 간절하긴 했던..

 
블록코딩으로 짰던 내용을 Python 탭을 통해서 python 코드로 바로 확인할 수 있는 점이 매우 편했다!
MyCobot 클래스의 인스턴스를 만들어 사용하며, Set Angle J1의 경우, send_angles 메서드를 통해 각 관절에 대한 각도를 list 하나로 받고, speed를 따로 받고 있는 것을 볼 수 있다.🐱
이를 통해 추후 코드 상으로 조정할때 list 하나만 가지고 쉽게 각도를 조절할 수 있어 유용했다.


다음 과제는 그리퍼가 있다고 생각하고, cobot을 예상 경로로 움직여보는 작업이었다.
이를 위해서는 cobot이 굉장히 낮은 자세로 이동해야했는데, 축이 6개나 있다보니 우리가 값을 넣어가면서 확인하기에는 원하는대로 움직여지지 않고 너무 복잡했다.😇
다행히! myCobot은 수동 조정 값 읽어오기(Read Angles)를 지원하고 있어서, cobot을 우리가 원하는 자세로 잡아두고, 해당 각도 값들을 불러올 수 있었다.

 

Read Angles 기능을 사용해서, cobot을 구렁이 자세처럼 말아보았다ㅎ
먼저 자세를 잡은 값을 읽어오고, 기본값인 [0,0,0,0,0,0]에서 해당 좌표값으로 이동을 하고, 반드시 적절한 Time.sleep() 값을 주어야 원하는 값까지 충분히 이동할 수 있다.
귀엽지 않나요..?🐍

 
3. cobot 카메라 연결 & 모델

다음으로는 cobot 가장 윗부분에 카메라를 연결하여 활용해보았다.
🚨 목표는 블록들을 테이프 유무로 정상품/불량품을 분류하는 것!
우리가 배웠던 YOLO의 object detection을 cobot 카메라로 진행하였는데, 이를 위한 학습도 실제 cobot이 보게될 환경과 맞추어 정확도를 올리기 위해, 학습 데이터를 촬영하였다.📷

 
촬영된 이미지는 이전시간에 배운 roboflow를 통해 라벨링을 진행하였다.
각 블록들별로 영역을 지정해주며 테이프가 없는 제품은 정상품, 테이프가 있는 블록들은 불량품으로 라벨을 주었다.
라벨링이 완료되면 해당 데이터로 colab에서 모델을 학습시켜 best.pt 파일을 저장해두었다.

 
모델이 준비되었으면, cobot 카메라로 블록을 확인해서 분류할 차례이다.
이 파트에서는 카메라를 cobot 카메라를 쓰고 있을 뿐, 이전에 배운 딥러닝 모델 활용법과 동일하다.
화면을 보면 실시간으로 테이프가 없는 제품은 정상(Normal) 테이프가 있는 제품은 불량(Defective)로 판별하고 있는 것을 볼 수 있다. 👌
다만 그 외 영역에 대해서도 인식이 되는 등 아무래도 학습 데이터 양이 많지 않았다보니 조금 아쉬운 성능을 보였다 ㅠ.ㅠ

 
 
4. Gripper

카메라에 이어, cobot에 그리퍼를 설치하였다! 이제 cobot은 로봇팔로 동작할 수 있는 손을 얻었다.🖐
처음 cobot과 같이 Calibration을 간단히 진행해주면 아래 사진과 같이 그리퍼의 열린 모습과 닫힌 모습을 볼 수 있다.
🚨 이번에 진행할 실습은 위 과정에서 모델이 분류한 정상/불량품에 따라 cobot과 Gripper를 동작시키는 것이다!


1) 초기 설정
vscode 환경에서 myCobot을 사용하기 위해서, pip install pymycobot을 진행해주고, import를 통해 MyCobot 클래스를 사용한다.
초기 설정을 위해서는 MyCobot 인스턴스 mc를 만들어주고, 포트인 COM3과 buad rate 115200을 인자로 준다.
각도를 조정하는 send_angles 함수에 리스트 형식인 관절별 각도 값 cobot_angle을 주고, speed는 20으로 준다.그리퍼를 사용하기 위해 set_gripper_mode와 init_electric_gripper도 실행시켜주었다.

 
2) 그리퍼 중심 이동
이후 이전 vscode 상 YOLO 사용 예제처럼, cv2 frame을 while 문으로 지속 받아오면서 모델의 result 값을 사용하였다.
그리퍼가 여닫는 동작을 하기 전, 그리퍼 위치를 물체의 가운데로 조정하기 위하여 center 값을 계산하고, center 값이 카메라 화면의 중심과 멀 경우, 가까워지도록 이동시키는 코드를 추가하였다.
주의사항은 카메라 위치가 그리퍼보다 아래인 점! 그래서 카메라 기준으로는 한가운데라고 할지라도, 상하를 보는 관점에서는 그보다 위에 위치해야 그리퍼가 잡을 수 있었다.🐾  

 
3) 그리퍼 작동
그리퍼 위치가 적절하다고 판단되면(flag 사용) 그리퍼를 작동시켰다.
그리퍼를 여닫는 것은 set_gripper_value 메서드에서 1 (그리퍼 닫기), 2 (그리퍼 열기) 값으로 조정할 수 있다.

 
완성본으로는 우리반에서 가장 완벽한 그리퍼 동작까지 보여주신 반장님의 성공 영상이다.🌟
진짜 동작이 환상이니 꼭 영상 보고 가세요😎 

이로써 딥러닝과 myCobot 과정도 끝!

 

 

딥러닝 심화 최종 후기👀

- 그 유명한 YOLO 모델을 많이 다뤄볼 수 있어서 너무 좋았다. 아직은 모델의 원리까지 깊게 알지는 못하지만, 모델을 학습시키기 위한 준비를 하고, 적절한 하이퍼파라미터를 설정하여 학습을 진행하고, classification report와 confusion matrix 등을 통해 평가하고, 가장 잘 학습된 모델을 가지고 실제 적용을 하는 사이클을 모두 다뤄볼 수 있었다. 확실히 적용이라는 건 한번 하기 시작하면 이런 건? 이런 것도? 하는 재미가 있다.😍

- 6축 협동로봇 myCobot을 사용해보았는데, 재밌고 신기했지만, 원하는대로 동작시키는 어려움도 꽤 컸다. 직관적으로 축 2-3개가 아니라 6개나 되다보니 단순히 앞으로 옆으로 가게 하고싶은데도 그 위치에 도달시키려면 어디의 각도를 움직여야하는지 두뇌 풀가동 😹 그래도 프로젝트에 쓰려면.. 더 트라이해봐야겠다.

- cv2 카메라, YOLO 모델과 로봇을 모두 같이 동작시키려니 버벅이거나 멈추는 현상이 조금 있었다. 실제 현업이나, 애초에 프로젝트에서부터도 이런 물리적인 한계가 있을 수도 있을텐데, 이런 부분을 어떻게 해쳐나가야할지도 고민이 든다.

 


🌱 카이로스 2기에서 배운 딥러닝 심화 1차가 궁금하다면?
https://bagjo2884.tistory.com/24

 

[카이로스2기] 딥러닝 심화 교육1 : 전이학습, YOLO v8 with CV2

이번주는 딥러닝의 마지막 강의, 딥러닝 심화 교육을 진행하였다.PLC 이전에 진행했던 딥러닝 기초 강의에 대한 간단한 복습과 이어서, 아래와 같이 전이학습과 YOLO를 메인으로 심화 과정을 배웠

bagjo2884.tistory.com

 

다음주에는 시스템 프로그래밍(Linux & C++) 후기로 만나요~ 👩‍💻