Mục lục:

Robot cờ vua được làm bằng LEGO và Raspberry Pi: 6 bước
Robot cờ vua được làm bằng LEGO và Raspberry Pi: 6 bước

Video: Robot cờ vua được làm bằng LEGO và Raspberry Pi: 6 bước

Video: Robot cờ vua được làm bằng LEGO và Raspberry Pi: 6 bước
Video: Quảng cáo đáng sợ...| KTSnew 2024, Tháng bảy
Anonim
Image
Image

Làm kinh ngạc bạn bè của bạn với robot cờ vua này!

Việc chế tạo không quá khó nếu bạn đã từng chế tạo robot LEGO và nếu bạn có ít nhất kiến thức sơ cấp về lập trình máy tính và Linux.

Robot tự di chuyển và sử dụng nhận dạng trực quan để xác định bước di chuyển của người chơi.

Một trong những điều mới lạ ở robot này là mã nhận dạng chuyển động. Mã tầm nhìn này cũng có thể sử dụng được cho rô bốt cờ vua được xây dựng theo nhiều cách khác (chẳng hạn như ChessRobot của tôi sử dụng cánh tay rô bốt Lynxmotion).

Không cần bàn cờ đặc biệt, công tắc sậy hoặc bất cứ thứ gì (vì nước đi của con người được xác định bằng nhận dạng trực quan).

Mã của tôi có sẵn để sử dụng cá nhân.

Bước 1: Yêu cầu

Ánh sáng, máy quay, diễn!
Ánh sáng, máy quay, diễn!

Tất cả mã được viết bằng Python, sẽ chạy trên Raspberry Pi, trong số những thứ khác, một Raspberry Pi.

Raspberry Pi là một máy tính có kích thước bằng thẻ tín dụng có thể được cắm vào màn hình và bàn phím. Đây là một chiếc máy tính nhỏ có khả năng hoạt động tốt, rẻ tiền (khoảng 40 đô la), có thể được sử dụng trong các dự án điện tử và chế tạo người máy, cũng như cho nhiều thứ mà máy tính để bàn của bạn thực hiện.

Robot của tôi sử dụng Raspberry Pi và Lego. Giao diện phần cứng giữa động cơ và cảm biến RPi và Lego Mindstorms EV3 được cung cấp bởi BrickPi3 từ Dexter Industries.

Bản dựng Lego dựa trên "Charlie the Chess Robot" của Darrous Hadi, do tôi sửa đổi, bao gồm các bản mod để sử dụng RPi, thay vì bộ xử lý Lego Mindstorms. Các động cơ và cảm biến Lego Mindstorms EV3 được sử dụng.

Bạn cũng sẽ cần bàn, máy ảnh, ánh sáng, bàn phím, màn hình và thiết bị trỏ (ví dụ: chuột).

Và tất nhiên, các quân cờ và một bàn cờ.

Tôi mô tả tất cả những điều này chi tiết hơn trong các bước tiếp theo.

Bước 2: Xây dựng phần cứng

Image
Image

Như tôi đã chỉ ra trước đây, trung tâm của mã tầm nhìn sẽ hoạt động với nhiều bản dựng khác nhau.

Tôi dựa trên robot của mình dựa trên "Charlie the Chess Robot" (phiên bản EV3) của Darrous Hadi, thông tin trên trang đó cho biết cách nhận hướng dẫn chế tạo. Danh sách các bộ phận ở đây.

Tôi đã sửa đổi robot theo một vài cách.

1. Người gắp. Điều này đã không làm việc cho tôi. Các bánh răng bị trượt, vì vậy tôi đã thêm các miếng Lego bổ sung để ngăn chặn điều đó. Và sau đó khi cần cẩu được hạ xuống, nó sẽ thường bị kẹt, vì vậy tôi đã thêm một liên kết Watt để ngăn điều đó.

Phía trên là grabber đang hoạt động, hiển thị liên kết đã được sửa đổi.

2. Bản dựng ban đầu sử dụng bộ xử lý Lego Mindstorms EV3, nhưng tôi sử dụng Raspberry Pi, giúp dễ dàng sử dụng Python.

3. Tôi sử dụng Raspberry Pi 3 Model B.

4. Để giao diện RPi với Lego, tôi sử dụng BrickPi3 từ Dexter Industries. BrickPi gắn vào Raspberry Pi và chúng cùng nhau thay thế LEGO Mindstorms NXT hoặc EV3 Brick.

Khi bạn có tệp Lego Digital Designer, bạn sẽ có câu hỏi về việc lấy các mảnh LEGO. Bạn có thể lấy gạch trực tiếp từ cửa hàng LEGO và đây là cách rẻ nhất để có được chúng. Tuy nhiên, họ sẽ không có mọi thứ bạn cần và có thể mất một vài tuần hoặc hơn để đến nơi.

Bạn cũng có thể sử dụng Rebrickable: mở tài khoản, tải lên tệp LDD và từ đó nhận danh sách người bán.

Một nguồn tốt khác là Bricklink.

Bước 3: Phần mềm khiến robot di chuyển

Tất cả mã được viết bằng Python 2.

  1. Dexter Industries cung cấp mã để hỗ trợ di chuyển động cơ EV3, v.v. Điều này đi kèm với BrickPi3.
  2. Tôi cung cấp mã để làm cho các động cơ di chuyển theo cách để di chuyển các quân cờ!
  3. Công cụ cờ vua là Stockfish - có thể đánh bại bất kỳ con người nào! "Stockfish là một trong những công cụ cờ vua mạnh nhất trên thế giới. Nó cũng mạnh hơn nhiều so với những kiện tướng cờ vua giỏi nhất của con người."
  4. Mã để điều khiển động cơ cờ vua, xác nhận rằng một nước đi là hợp lệ, v.v. là ChessBoard.py
  5. Tôi sử dụng một số mã từ https://chess.fortherapy.co.uk để giao tiếp với điều đó.
  6. Mã của tôi (trong 2 ở trên) sau đó giao diện với đó!

Bước 4: Phần mềm nhận biết sự di chuyển của con người

Sau khi người chơi di chuyển, máy ảnh sẽ chụp ảnh. Mã cắt và xoay điều này để bàn cờ hoàn toàn khớp với hình ảnh tiếp theo. Các ô vuông bàn cờ cần phải trông vuông vắn !. Có sự biến dạng trong hình ảnh vì các cạnh của bảng ở xa máy ảnh hơn so với trung tâm của bảng. Tuy nhiên, camera ở khoảng cách đủ xa để sau khi cắt ảnh, sự biến dạng này không đáng kể. Bởi vì robot biết vị trí của tất cả các mảnh sau khi máy tính di chuyển, vì vậy tất cả những gì phải làm sau khi con người di chuyển là để mã có thể phân biệt sự khác biệt giữa ba trường hợp sau:

  • Một hình vuông trống
  • Một mảnh màu đen của bất kỳ loại nào
  • Một mảnh màu trắng của bất kỳ loại nào.

Điều này bao gồm tất cả các trường hợp, bao gồm nhập thành và vượt qua.

Robot sẽ kiểm tra xem hành động của con người có đúng hay không và thông báo cho họ nếu không đúng! Trường hợp duy nhất không được đề cập là khi người chơi thăng cấp một con tốt thành một con không phải là quân hậu. Sau đó, người chơi phải nói cho rô bốt biết quân cờ được thăng là gì.

Bây giờ chúng ta có thể xem xét hình ảnh dưới dạng hình vuông bàn cờ.

Trên bảng thiết lập ban đầu, chúng ta biết vị trí của tất cả các miếng màu trắng và màu đen và vị trí của các ô trống.

Hình vuông trống có ít sự thay đổi về màu sắc hơn nhiều so với các hình vuông đã chiếm dụng. Chúng tôi tính toán độ lệch chuẩn cho từng màu trong số ba màu RGB cho mỗi hình vuông trên tất cả các pixel của nó (trừ các pixel gần đường viền của hình vuông). Độ lệch chuẩn tối đa cho bất kỳ ô trống nào nhỏ hơn nhiều so với độ lệch chuẩn tối thiểu cho bất kỳ ô vuông nào bị chiếm dụng và điều này cho phép chúng tôi, sau khi người chơi di chuyển tiếp theo, xác định ô nào trống.

Sau khi xác định giá trị ngưỡng cho ô trống so với ô bị chiếm, bây giờ chúng ta cần xác định màu mảnh cho ô vuông bị chiếm:

Trên bảng ban đầu, chúng tôi tính toán cho mỗi hình vuông màu trắng, cho mỗi R, G, B, giá trị trung bình (trung bình) của các pixel của nó (trừ những pixel gần đường viền của hình vuông). Mức tối thiểu của các phương tiện này đối với bất kỳ hình vuông màu trắng nào lớn hơn mức tối đa của các phương tiện trên bất kỳ hình vuông màu đen nào, và do đó chúng tôi có thể xác định màu mảnh cho các hình vuông bị chiếm dụng. Như đã nói trước đây, đây là tất cả những gì chúng ta cần làm để xác định động thái của người chơi là con người.

Các thuật toán hoạt động tốt nhất nếu bàn cờ có màu sắc khác xa màu của các quân cờ! Trong rô bốt của tôi, các quân cờ có màu trắng và nâu, và bàn cờ được làm bằng tay bằng quân bài và có màu xanh lá cây nhạt với sự khác biệt nhỏ giữa các ô vuông "đen" và "trắng".

Chỉnh sửa ngày 17 tháng 10 năm 2018: Bây giờ tôi đã sơn các mảnh màu nâu mờ, điều này làm cho thuật toán hoạt động trong các điều kiện ánh sáng thay đổi hơn.

Bước 5: Đèn, Máy ảnh, Hành động

Đèn chiếu sáng

Bạn cần một nguồn ánh sáng đồng đều đặt trên bảng. Tôi sử dụng cái này, thực sự rất rẻ, từ amazon.co.uk - và không nghi ngờ gì nữa, có một cái gì đó tương tự trên amazon.com. Khi đèn phòng đã tắt.

Cập nhật: Tôi hiện có hai đèn, để cung cấp nguồn ánh sáng đồng đều hơn

Máy ảnh

Không nghi ngờ gì khi bạn có thể sử dụng mô-đun máy ảnh Raspberry Pi đặc biệt (với cáp dài), nhưng tôi sử dụng máy ảnh USB - "Logitech 960-001064 C525 HD Webcam - Đen" - hoạt động với RPi. Bạn cần đảm bảo rằng máy ảnh không di chuyển đối với bảng, bằng cách xây dựng một tháp hoặc có một nơi nào đó để cố định nó một cách chắc chắn. Máy ảnh cần đặt khá cao so với bảng để giảm biến dạng hình học. Tôi có máy ảnh của tôi 58 cm trên bảng.

Cập nhật: Bây giờ tôi thích HP Webcam HD 2300 hơn, vì tôi thấy nó đáng tin cậy hơn.

Bàn

Bạn cần một cái chắc chắn. Tôi đã mua cái này. Trên hết, bạn có thể thấy tôi có một hình vuông bằng gỗ MDF, với một số thứ để ngăn robot nhảy xung quanh khi xe đẩy di chuyển. Bạn nên giữ máy ảnh ở vị trí cũ trên bảng!

Bàn phím

RPi cần bàn phím USB cho lần thiết lập đầu tiên. Và tôi sử dụng nó để phát triển mã. Điều duy nhất robot cần bàn phím là khởi động chương trình và mô phỏng việc đánh đồng hồ cờ vua. Tôi có một trong số này. Nhưng thực sự, bạn chỉ cần một con chuột hoặc một nút GPIO được kết nối với RPi

Trưng bày

Tôi sử dụng một màn hình lớn để phát triển, nhưng điều duy nhất mà robot cần là cho bạn biết nước đi của bạn không hợp lệ, hãy kiểm tra, v.v. Tôi có một trong số những thứ này, cũng có sẵn tại amazon.com.

Nhưng thay vì yêu cầu màn hình hiển thị, robot sẽ nói những cụm từ này! Tôi đã thực hiện việc này bằng cách chuyển văn bản thành giọng nói bằng cách sử dụng mã như được mô tả ở đây và gắn một loa nhỏ. (Tôi sử dụng một "loa Hamburger mini").

Các cụm từ robot nói:

  • Đánh dấu!
  • Người kiểm tra
  • Nước đi không hợp lệ
  • Bạn đã thắng!
  • Bế tắc
  • Vẽ bằng cách lặp lại ba lần
  • Quy tắc vẽ theo 50 bước di chuyển

Quy tắc năm mươi nước đi trong cờ vua quy định rằng một người chơi có thể yêu cầu hòa nếu không có lệnh bắt nào được thực hiện và không có con tốt nào được di chuyển trong năm mươi nước đi cuối cùng (vì mục đích này, "nước đi" bao gồm một người chơi hoàn thành lượt của họ, sau đó là đối thủ hoàn thành lượt của họ).

Bạn có thể nghe thấy tiếng rô-bốt nói trong đoạn video ngắn "người bạn đời của kẻ ngốc" ở trên (nếu bạn vặn âm thanh lên khá cao)!

Bước 6: Cách lấy phần mềm

1. Cá kho

Nếu bạn chạy Raspbian trên RPi của mình, bạn có thể sử dụng công cụ Stockfish 7 - hoàn toàn miễn phí. Chỉ cần chạy:

sudo apt-get install stockfish

2. ChessBoard.py

Lấy cái này ở đây.

3. Mã dựa trên

Đi kèm với mã của tôi.

4. Trình điều khiển Python cho BrickPi3:

Lấy những thứ này ở đây.

5. Mã của tôi gọi tất cả mã ở trên và mã này giúp rô bốt thực hiện các bước di chuyển và mã tầm nhìn của tôi.

Nhận điều này từ tôi bằng cách đăng một bình luận, và tôi sẽ trả lời.

Đề xuất: