- 필요한 하드웨어 :
- 프로그래밍 요구 사항 :
- Raspberry Pi에서 처리 설정 :
- 회로도 :
- Raspberry Pi Ball 추적 프로그램 :
- Raspberry Pi 볼 추적 로봇의 작동 :
로봇 공학, 인공 지능 및 기계 학습 분야는 빠르게 진화하고 있으며 가까운 장래에 인류의 생활 방식을 바꿀 것입니다. 로봇은 센서와 기계 학습 처리를 통해 현실 세계를 이해하고 상호 작용하는 것으로 생각됩니다. 이미지 인식은 로봇이 우리처럼 카메라를 통해 현실 세계를 바라 보면서 사물을 이해한다고 생각하는 인기있는 방법 중 하나입니다. 이 프로젝트에서 Raspberry Pi 의 힘을 사용하여 축구를하는 로봇처럼 공을 추적하고 따라갈 수있는 로봇을 구축해 보겠습니다.
OpenCV는 이미지 처리에 사용되는 매우 유명한 오픈 소스 도구이지만이 자습서에서는 작업을 간단하게 유지하기 위해 Processing IDE를 사용하고 있습니다. ARM 처리는 처리를 위해 GPIO 라이브러리도 출시했기 때문에 Raspberry Pi를 사용하기 위해 더 이상 Python과 처리 사이를 전환 할 필요가 없습니다. 멋지죠? 그럼 시작하겠습니다.
필요한 하드웨어:
- 라즈베리 파이
- 리본 케이블이있는 카메라 모듈
- 로봇 섀시
- 휠이있는 기어 모터
- L293D 모터 드라이버
- 보조 배터리 또는 기타 휴대용 전원
프로그래밍 요구 사항:
- Raspberry pi 용 모니터 또는 기타 디스플레이
- Pi 용 키보드 또는 마우스
- ARM 소프트웨어 처리
참고: 프로그래밍 중에 와이어를 통해 Pi에 디스플레이를 연결해야합니다. 그래야만 카메라의 비디오를 볼 수 있습니다.
Raspberry Pi에서 처리 설정:
앞서 말했듯이 우리는 처리 환경을 사용하여 Python을 사용하는 기본 방법이 아닌 Raspberry Pi를 프로그래밍 할 것입니다. 따라서 아래 단계를 따르십시오.
1 단계: -Raspberry Pi를 모니터, 키보드 및 마우스에 연결하고 전원을 켭니다.
2 단계: 다운로드 할 항목이 거의 없으므로 Pi가 활성 인터넷 연결에 연결되어 있는지 확인합니다.
3 단계: Processing ARM을 클릭하여 Raspberry Pi 용 처리 IDE를 다운로드합니다. 다운로드는 ZIP 파일 형식입니다.
4 단계: 다운로드가 완료되면 원하는 디렉토리의 ZIP 폴더에 파일 압축을 풉니 다. 내 데스크톱에서 방금 추출했습니다.
단계 5:- 이제 추출 된 폴더를 열고 processing이라는 파일을 클릭하십시오. 아래와 같이 창이 열립니다.
6 단계: 코드를 입력 할 환경입니다. Arduino에 익숙한 사람들에게는 놀라지 마십시오. 예, IDE는 Arduino와 비슷해 보이며 프로그램도 마찬가지입니다.
7 단계: 볼 추종 프로그램이 작동하려면 두 개의 라이브러리가 필요합니다. 설치하려면 Sketch-> Import Library-> Add Library를 클릭하십시오. 다음 대화 상자가 열립니다.
8 단계:- 왼쪽 상단 텍스트 상자를 사용하여 Raspberry Pi를 검색하고 Enter 키를 누르면 검색 결과가 다음과 같이 표시됩니다.
9 단계: "GL Video"및 "Hardware I / O"라는 라이브러리를 검색하고 설치를 클릭하여 설치합니다. 두 라이브러리를 모두 설치했는지 확인하십시오.
10 단계:- 인터넷에 따라 설치하는 데 몇 분 정도 걸립니다. 완료되면 소프트웨어를 처리 할 준비가되었습니다.
회로도:
이 Raspberry Pi Ball Tracking 프로젝트 의 회로 다이어그램 은 다음과 같습니다.
보시다시피 회로에는 PI 카메라, 모터 드라이버 모듈 및 Raspberry pi에 연결된 한 쌍의 모터가 포함됩니다. 전체 회로는 모바일 파워 뱅크 (위 회로에서 AAA 배터리로 표시됨)에 의해 전원이 공급됩니다.
핀 세부 정보는 라즈베리 파이에 언급되어 있지 않으므로 아래 그림을 사용하여 핀을 확인해야합니다.
모터를 구동하려면 4 개의 핀 (A, B, A, B)이 필요합니다. 이 4 개의 핀은 각각 GPIO14,4,17 및 18에서 연결됩니다. 주황색과 흰색 와이어는 함께 하나의 모터에 대한 연결을 형성합니다. 그래서 우리는 두 개의 모터에 대해 두 쌍을 가지고 있습니다.
모터는 그림과 같이 L293D 모터 드라이버 모듈에 연결되며 드라이버 모듈은 파워 뱅크에 의해 전원 이 공급됩니다. 파워 뱅크의 접지가 Raspberry Pi의 접지에 연결되어 있는지 확인해야 연결이 작동합니다.
이제 하드웨어 연결을 마쳤습니다. 처리 환경으로 돌아가서 로봇에게 공을 추적하는 방법을 가르치는 프로그래밍을 시작하겠습니다.
Raspberry Pi Ball 추적 프로그램:
이 프로젝트 의 전체 처리 프로그램 은이 페이지 끝에 제공되며 직접 사용합니다. 바로 아래에서 다른 유사한 프로젝트에 사용할 수 있도록 코드 작업에 대해 설명했습니다.
프로그램의 개념은 매우 간단합니다. 프로젝트의 의도는 공을 추적하는 것이지만 실제로는 그렇게하지 않을 것입니다. 색상을 사용하여 공을 식별 할 것입니다. 우리 모두 알고 있듯이 비디오는 연속적인 사진 프레임 일뿐입니다. 그래서 우리는 각 사진을 찍고 픽셀로 나눕니다. 그런 다음 각 픽셀 색상을 공의 색상과 비교합니다. 일치하는 것이 있으면 공을 찾았다 고 말할 수 있습니다. 이 정보를 사용하여 화면에서 공의 위치 (픽셀 색상)를 식별 할 수도 있습니다. 위치가 맨 왼쪽이면 로봇을 오른쪽으로 이동하고, 위치가 맨 오른쪽이면 로봇을 왼쪽으로 이동하여 픽셀 위치가 항상 화면 중앙에 유지되도록합니다. Daniel shiffman의 Computer Vision 비디오를 시청하여 명확한 그림을 얻을 수 있습니다.
항상 그렇듯이 다운로드 한 두 라이브러리 를 가져 오는 것으로 시작합니다. 이것은 다음 두 줄로 수행 할 수 있습니다. 하드웨어 I / O 라이브러리는 처리 환경에서 PI의 GPIO 핀에 직접 액세스하는 데 사용되며 glvideo 라이브러리는 Raspberry Pi 카메라 모듈에 액세스하는 데 사용됩니다.
import processing.io. *; import gohai.glvideo. *;
설정 기능 내에서 출력 핀을 초기화하여 모터를 제어하고 파이 카메라에서 비디오를 가져와 320 * 240 크기의 창에서 크기를 조정합니다.
void setup () {size (320, 240, P2D); video = new GLCapture (this); video.start (); trackColor = color (255, 0, 0); GPIO.pinMode (4, GPIO.OUTPUT); GPIO.pinMode (14, GPIO.OUTPUT); GPIO.pinMode (17, GPIO.OUTPUT); GPIO.pinMode (18, GPIO.OUTPUT); }
공극 추첨 이 루프 내부 코드를 한 프로그램이 종료 될 때 수행 될 무한 루프 같다. 카메라 소스를 사용할 수있는 경우 여기에서 나오는 비디오를 읽습니다.
void draw () {background (0); if (video.available ()) {video.read (); }}
그런 다음 비디오 프레임을 픽셀 로 분할 하기 시작합니다. 각 픽셀에는 빨강, 녹색 및 파랑 값이 있습니다. 이 값은 변수 r1, g1 및 b1에 저장됩니다.
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // 현재 색상은 무엇입니까? currentColor = video.pixels; float r1 = red (currentColor); float g1 = green (currentColor); float b1 = blue (currentColor);
처음 에 공의 색상 을 감지하려면 색상 을 클릭해야합니다. 클릭하면 공의 색상이 trackColour 라는 변수에 저장됩니다.
void mousePressed () {// trackColor 변수에 마우스가 클릭 된 위치의 색상을 저장합니다. int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
트랙 색상과 현재 색상이 있으면이를 비교해야합니다. 이 비교는 dist 함수를 사용하고 있습니다. 현재 색상이 트랙 색상에 얼마나 가까운 지 확인합니다.
float d = dist (r1, g1, b1, r2, g2, b2);
DIST의 값이 정확히 일치하는 0이됩니다. 따라서 dist 값이 지정된 값 (월드 레코드)보다 작 으면 트랙 색상을 찾았다 고 가정합니다. 그런 다음 해당 픽셀의 위치를 가져와 가장 가까운 X와 가장 가까운 Y 변수에 저장하여 공의 위치를 찾습니다.
if (d <worldRecord) {worldRecord = d; 가장 가까운 X = x; 가장 가까운 Y = y; }
또한 발견 된 색상 주위에 타원 을 그려 해당 색상이 발견되었음을 나타냅니다. 위치 값도 콘솔에 인쇄되어 디버깅하는 동안 많은 도움이됩니다.
if (worldRecord <10) {// 추적 된 픽셀에 원을 그립니다. fill (trackColor); strokeWeight (4.0); 스트로크 (0); ellipse (closestX, 가장 가까운 Y, 16, 16); println (closestX, closestY);
마지막으로 가장 가까운 X와 가장 가까운 Y의 위치를 비교하고 색상이 화면 중앙에 오도록 모터 를 조정할 수 있습니다. 아래 코드는 색상의 X 위치가 화면 왼쪽 (<140)에있는 것으로 확인되었으므로 로봇을 오른쪽으로 돌리는 데 사용됩니다.
if (closestX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); 지연 (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("오른쪽으로 돌리기"); }
마찬가지로 X와 Y의 위치를 확인하여 필요한 방향으로 모터를 제어 할 수 있습니다. 항상 그렇듯이 전체 프로그램은 페이지 하단을 참조하십시오.
Raspberry Pi 볼 추적 로봇의 작동:
하드웨어와 프로그램을 준비했으면 이제 재미있을 시간입니다. 지상에서 봇을 테스트하기 전에 모든 것이 제대로 작동하는지 확인해야합니다. Pi를 연결하여 처리 코드를 모니터링하고 시작합니다. 작은 창에 비디오 피드가 표시되어야합니다. 이제 프레임 안으로 공을 가져 와서 공을 클릭하여 로봇에게이 특정 색상을 추적해야한다고 알려줍니다. 이제 화면에서 공을 움직이면 바퀴가 회전하는 것을 볼 수 있습니다.
모든 것이 예상대로 작동하면 봇을 바닥에 놓고 플레이하기 시작합니다. 최상의 결과를 얻으 려면 실내를 고르게 조명해야합니다. 프로젝트의 전체 작업은 아래 비디오에 나와 있습니다. 프로젝트를 이해하고 비슷한 것을 만드는 것을 즐겼기를 바랍니다. 문제가 있으면 아래 댓글 섹션에 게시하거나 도움을 받으십시오.