- Yêu cầu phần cứng:
- Yêu cầu lập trình:
- Thiết lập Xử lý trên Raspberry Pi:
- Sơ đồ mạch:
- Chương trình theo dõi Raspberry Pi Ball:
- Hoạt động của Robot theo dõi bóng Raspberry Pi:
Lĩnh vực Robot, Trí tuệ nhân tạo và Máy học đang phát triển nhanh chóng và chắc chắn sẽ thay đổi lối sống của nhân loại trong tương lai gần. Robot được cho là có thể hiểu và tương tác với thế giới thực thông qua cảm biến và xử lý máy học. Nhận dạng hình ảnh là một trong những cách phổ biến trong đó người máy được cho là hiểu các vật thể bằng cách nhìn vào thế giới thực qua camera giống như chúng ta. Trong dự án này, hãy sử dụng sức mạnh của Raspberry Pi để chế tạo một Robot có thể theo dõi quả bóng và theo dõi nó giống như các robot chơi bóng đá.
OpenCV là một công cụ mã nguồn mở rất nổi tiếng được sử dụng để xử lý Hình ảnh, nhưng trong hướng dẫn này để đơn giản hóa mọi thứ, chúng tôi sử dụng IDE Xử lý. Vì quá trình xử lý cho ARM cũng đã phát hành thư viện GPIO để xử lý, chúng tôi sẽ không phải chuyển đổi giữa python và xử lý nữa để làm việc với Raspberry Pi. Nghe hấp dẫn phải không? Vì vậy, chúng ta hãy bắt đầu.
Yêu cầu phần cứng:
- Raspberry Pi
- Mô-đun máy ảnh với cáp ruy băng
- Khung gầm robot
- Động cơ bánh răng có bánh xe
- Trình điều khiển động cơ L293D
- Ngân hàng điện hoặc bất kỳ nguồn điện di động nào khác
Yêu cầu lập trình:
- Màn hình hoặc màn hình khác cho Raspberry pi
- Bàn phím hoặc chuột cho Pi
- Xử lý phần mềm ARM
Lưu ý: Bắt buộc phải có màn hình kết nối với Pi thông qua dây trong quá trình lập trình vì chỉ khi đó video của camera mới có thể xem được
Thiết lập Xử lý trên Raspberry Pi:
Như đã nói trước đó, chúng tôi sẽ sử dụng môi trường xử lý để lập trình Raspberry Pi chứ không phải cách sử dụng python mặc định. Vì vậy, hãy làm theo các bước dưới đây:
Bước 1: - Kết nối Raspberry Pi với màn hình, bàn phím và chuột của bạn và bật nó lên.
Bước 2: - Đảm bảo rằng bạn Pi được kết nối với kết nối internet đang hoạt động vì chúng tôi sắp tải xuống một số thứ.
Bước 3: - Nhấp vào Xử lý ARM, để tải xuống IDE xử lý cho Raspberry Pi. Bản tải xuống sẽ ở dạng tệp ZIP.
Bước 4: - Sau khi tải xuống, giải nén các tệp trong thư mục ZIP của bạn trong thư mục ưa thích của bạn. Tôi vừa giải nén nó trên máy tính để bàn của mình.
Bước 5: - Bây giờ, mở thư mục đã giải nén và nhấp vào tệp có tên xử lý. Nó sẽ mở ra một cửa sổ như hình dưới đây.
Bước 6: - Đây là môi trường mà chúng ta sẽ nhập mã của mình. Đối với những người đã quen thuộc với Arduino, đừng ngạc nhiên CÓ IDE trông giống với Arduino và chương trình cũng vậy.
Bước 7: - Chúng ta cần 2 thư viện để chương trình ball following hoạt động, để cài đặt thì bạn chỉ cần click vào Sketch -> Import Library -> Add Library . Hộp thoại sau sẽ mở ra.
Bước 8: - Sử dụng hộp văn bản trên cùng bên trái để tìm kiếm Raspberry Pi và nhấn Enter, kết quả tìm kiếm sẽ như thế này.
Bước 9: - Tìm kiếm các thư viện có tên “GL Video” và “I / O phần cứng” và nhấp vào cài đặt để cài đặt chúng. Đảm bảo rằng bạn cài đặt cả hai thư viện.
Bước 10: - Dựa trên internet của bạn, quá trình cài đặt sẽ mất vài phút. Sau khi hoàn thành, chúng tôi đã sẵn sàng cho phần mềm xử lý.
Sơ đồ mạch:
Sơ đồ mạch của dự án theo dõi bóng Raspberry Pi này được hiển thị bên dưới.
Như bạn có thể thấy, mạch liên quan đến camera PI, mô-đun Trình điều khiển động cơ và một cặp động cơ được kết nối với Raspberry pi. Mạch hoàn chỉnh được cung cấp bởi nguồn điện di động (đại diện là pin AAA trong mạch trên).
Vì chi tiết chân không được đề cập trên Raspberry Pi, chúng tôi cần xác minh các chân bằng cách sử dụng hình ảnh bên dưới
Để điều khiển Động cơ, chúng ta cần bốn chân (A, B, A, B). Bốn chân này được kết nối từ GPIO14,4,17 và 18 tương ứng. Dây màu cam và màu trắng cùng nhau tạo thành kết nối cho một động cơ. Vì vậy, chúng tôi có hai cặp như vậy cho hai động cơ.
Các động cơ được kết nối với mô-đun Trình điều khiển động cơ L293D như trong hình và mô-đun trình điều khiển được cung cấp năng lượng bởi nguồn điện. Đảm bảo rằng mặt đất của pin dự phòng được kết nối với mặt đất của Raspberry Pi, chỉ khi đó kết nối của bạn mới hoạt động.
Vậy là xong với kết nối Phần cứng, chúng ta hãy quay lại môi trường xử lý và bắt đầu lập trình để dạy cho robot của chúng ta cách theo dõi một quả bóng.
Chương trình theo dõi Raspberry Pi Ball:
Các chương trình xử lý hoàn chỉnh của dự án này được đưa ra ở cuối trang này, mà bạn trực tiếp sử dụng. Hơn nữa, ngay bên dưới, tôi đã giải thích hoạt động của mã để bạn có thể sử dụng nó cho các dự án tương tự khác.
Các khái niệm chương trình rất đơn giản. Mặc dù mục đích của dự án là theo dõi một quả bóng, nhưng chúng tôi thực sự sẽ không làm điều đó. Chúng tôi sẽ xác định quả bóng bằng cách sử dụng màu sắc của nó. Như chúng ta đã biết video không là gì ngoài những khung hình liên tục. Vì vậy, chúng tôi chụp từng bức ảnh và chia nó thành các pixel. Sau đó, chúng tôi so sánh từng màu pixel với màu của quả bóng; nếu một trận đấu được tìm thấy thì chúng ta có thể nói rằng chúng ta đã tìm thấy quả bóng. Với thông tin này chúng ta cũng có thể xác định được vị trí của bóng (màu pixel) trên màn hình. Nếu vị trí xa bên trái chúng ta di chuyển robot sang phải, nếu vị trí xa bên phải chúng ta di chuyển robot sang trái để vị trí pixel luôn ở giữa màn hình. Bạn có thể xem video Computer Vision của Daniel shiffman để có hình ảnh rõ nét.
Như mọi khi, chúng tôi bắt đầu bằng cách nhập hai thư viện mà chúng tôi tải xuống. Điều này có thể được thực hiện bằng hai dòng sau. Thư viện I / O phần cứng được sử dụng để truy cập các chân GPIO của PI trực tiếp từ môi trường xử lý, thư viện glvideo được sử dụng để truy cập mô-đun máy ảnh Raspberry Pi.
nhập xử lý.io. *; nhập gohai.glvideo. *;
Bên trong chức năng thiết lập, chúng tôi khởi tạo các chân đầu ra để điều khiển động cơ và cũng lấy video từ camera pi và kích thước nó trong một cửa sổ có kích thước 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); }
Các khoảng trống bốc thăm cũng giống như vòng lặp vô hạn các mã bên trong vòng lặp này sẽ được thực hiện miễn là chương trình được chấm dứt. Nếu có sẵn nguồn camera, chúng tôi sẽ đọc video từ nguồn đó
void draw () {background (0); if (video.available ()) {video.read (); }}
Sau đó, chúng tôi bắt đầu chia khung video thành các pixel. Mỗi pixel có một giá trị đỏ, lục và lam. Các giá trị này được lưu trữ trong biến r1, g1 và b1
for (int x = 0; x <video.width; x ++) {for (int y = 0; y <video.height; y ++) {int loc = x + y * video.width; // Màu hiện tại là gì currentColor = video.pixels; float r1 = red (currentColor); float g1 = green (currentColor); float b1 = blue (currentColor);
Để phát hiện màu sắc của quả bóng ban đầu, chúng ta phải nhấp vào màu sắc. Sau khi nhấp vào, màu của quả bóng sẽ được lưu trữ trong biến có tên là trackColour .
void mousePressed () {// Lưu màu nơi con chuột được nhấp vào trong biến trackColor int loc = mouseX + mouseY * video.width; trackColor = video.pixels; }
Khi chúng ta có màu đường đua và màu hiện tại, chúng ta phải so sánh chúng. So sánh này đang sử dụng hàm dist. Nó kiểm tra độ gần của màu hiện tại với màu theo dõi.
float d = dist (r1, g1, b1, r2, g2, b2);
Các giá trị của quận sẽ không cho một kết hợp chính xác. Vì vậy, nếu giá trị của dist nhỏ hơn một giá trị được chỉ định (Kỷ lục thế giới) thì chúng ta giả sử rằng chúng ta đã tìm thấy màu bản nhạc. Sau đó, chúng ta lấy vị trí của pixel đó và lưu nó vào biến gần X và gần Y nhất để tìm vị trí của quả bóng
if (d <worldRecord) {worldRecord = d; gần nhấtX = x; gần nhấtY = y; }
Chúng tôi cũng vẽ một hình elip xung quanh màu được tìm thấy để cho biết rằng màu đã được tìm thấy. Giá trị của vị trí cũng được in trên bàn điều khiển, điều này sẽ giúp ích rất nhiều trong khi gỡ lỗi.
if (worldRecord <10) {// Vẽ một vòng tròn tại chỗ tô pixel được theo dõi (trackColor); strokeWeight (4.0); nét (0); ellipse (gần nhấtX, gần nhấtY, 16, 16); println (gần nhấtX, gần nhấtY);
Cuối cùng, chúng ta có thể so sánh vị trí của X gần nhất và Y gần nhất và điều chỉnh các động cơ sao cho màu sắc nằm ở giữa màn hình. Đoạn mã dưới đây được sử dụng để quay robot sang phải vì vị trí X của màu được tìm thấy ở bên trái màn hình (<140)
if (nearX <140) {GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.LOW); chậm trễ (10); GPIO.digitalWrite (4, GPIO.HIGH); GPIO.digitalWrite (14, GPIO.HIGH); GPIO.digitalWrite (17, GPIO.HIGH); GPIO.digitalWrite (18, GPIO.HIGH); println ("Rẽ Phải"); }
Tương tự, chúng ta có thể kiểm tra vị trí của X và Y để điều khiển động cơ theo hướng yêu cầu. Như mọi khi, bạn có thể tham khảo ở cuối trang để biết chương trình hoàn chỉnh.
Hoạt động của Robot theo dõi bóng Raspberry Pi:
Một khi bạn đã sẵn sàng với phần cứng và chương trình, đã đến lúc để vui chơi. Trước khi chúng tôi kiểm tra bot của mình trên mặt đất, chúng tôi nên đảm bảo rằng mọi thứ đều hoạt động tốt. Kết nối Pi của bạn để theo dõi và khởi chạy mã xử lý. Bạn sẽ thấy nguồn cấp dữ liệu video trên một cửa sổ nhỏ. Bây giờ, đưa quả bóng vào bên trong khung và nhấp vào quả bóng để dạy cho robot biết rằng nó sẽ theo dõi màu cụ thể này. Bây giờ di chuyển quả bóng xung quanh màn hình và bạn sẽ thấy các bánh xe quay.
Nếu mọi thứ hoạt động như mong đợi, hãy thả bot xuống đất và bắt đầu chơi với nó. Đảm bảo căn phòng được chiếu sáng đồng đều để có kết quả tốt nhất. Toàn bộ hoạt động của dự án được hiển thị trong video dưới đây. Hy vọng bạn hiểu dự án và thích xây dựng một cái gì đó tương tự. Nếu bạn có bất kỳ vấn đề nào hãy đăng chúng vào phần bình luận bên dưới hoặc giúp đỡ.