สารบัญ:

หุ่นยนต์หมากรุกที่สร้างด้วย LEGO และ Raspberry Pi: 6 ขั้นตอน
หุ่นยนต์หมากรุกที่สร้างด้วย LEGO และ Raspberry Pi: 6 ขั้นตอน

วีดีโอ: หุ่นยนต์หมากรุกที่สร้างด้วย LEGO และ Raspberry Pi: 6 ขั้นตอน

วีดีโอ: หุ่นยนต์หมากรุกที่สร้างด้วย LEGO และ Raspberry Pi: 6 ขั้นตอน
วีดีโอ: TOP 10 Raspberry Pi Projects - Maker Tutor 2024, พฤศจิกายน
Anonim
Image
Image

ตะลึงพรึงเพริดเพื่อนของคุณด้วยหุ่นยนต์หมากรุกตัวนี้!

การสร้างหุ่นยนต์ LEGO มาก่อนนั้นไม่ยากเกินไป และหากคุณมีความรู้เบื้องต้นเกี่ยวกับการเขียนโปรแกรมคอมพิวเตอร์และ Linux

หุ่นยนต์ทำการเคลื่อนไหวของตัวเอง และใช้การจดจำภาพเพื่อกำหนดการเคลื่อนไหวของผู้เล่นที่เป็นมนุษย์

สิ่งแปลกใหม่อย่างหนึ่งในหุ่นยนต์นี้คือรหัสสำหรับการจดจำการเคลื่อนไหว รหัสวิชันซิสเต็มนี้ยังใช้ได้กับหุ่นยนต์หมากรุกที่สร้างขึ้นในรูปแบบอื่นๆ (เช่น ChessRobot ของฉันที่ใช้แขนหุ่นยนต์ Lynxmotion)

ไม่มีกระดานหมากรุกพิเศษ สวิตช์กก หรืออะไรก็ตามที่จำเป็น (เนื่องจากการเคลื่อนไหวของมนุษย์ถูกกำหนดโดยการจดจำภาพ)

รหัสของฉันสามารถใช้ได้สำหรับการใช้งานส่วนตัว

ขั้นตอนที่ 1: ข้อกำหนด

แสง กล้อง แอ็คชั่น!
แสง กล้อง แอ็คชั่น!

รหัสทั้งหมดเขียนด้วย Python ซึ่งจะทำงานบน Raspberry Pi เหนือสิ่งอื่นใด

Raspberry Pi คือคอมพิวเตอร์ขนาดเท่าบัตรเครดิตที่สามารถเสียบเข้ากับหน้าจอและคีย์บอร์ดได้ เป็นคอมพิวเตอร์ขนาดเล็กราคาไม่แพง (ประมาณ 40 เหรียญสหรัฐฯ) ซึ่งสามารถใช้ในโครงการอิเล็กทรอนิกส์และหุ่นยนต์ และสำหรับหลายๆ อย่างที่พีซีเดสก์ท็อปของคุณทำ

หุ่นยนต์ของฉันใช้ Raspberry Pi และ Lego อินเทอร์เฟซฮาร์ดแวร์ระหว่าง RPi กับมอเตอร์และเซ็นเซอร์ Lego Mindstorms EV3 จัดทำโดย BrickPi3 จาก Dexter Industries

ตัวต่อเลโก้มีพื้นฐานมาจาก "Charlie the Chess Robot" โดย Darrous Hadi ซึ่งฉันเป็นผู้ปรับแต่ง รวมถึงม็อดเพื่อใช้ RPi แทนที่จะเป็นตัวประมวลผล Lego Mindstorms ใช้มอเตอร์และเซ็นเซอร์ Lego Mindstorms EV3

คุณจะต้องมีโต๊ะ กล้อง ไฟส่องสว่าง แป้นพิมพ์ หน้าจอ และอุปกรณ์ชี้ตำแหน่ง (เช่น เมาส์)

และแน่นอนว่าตัวหมากรุกและกระดาน

ข้าพเจ้าจะอธิบายสิ่งเหล่านี้โดยละเอียดในขั้นตอนต่อไป

ขั้นตอนที่ 2: การสร้างฮาร์ดแวร์

Image
Image

ดังที่ฉันได้กล่าวไว้ก่อนหน้านี้ หัวใจของรหัสวิชันซิสเต็มจะทำงานกับบิลด์ที่หลากหลาย

ฉันใช้หุ่นยนต์ของฉันโดยใช้ "Charlie the Chess Robot" (เวอร์ชัน EV3) โดย Darrous Hadi ข้อมูลในหน้านั้นบอกว่าจะรับคำแนะนำในการสร้างได้อย่างไร รายการอะไหล่อยู่ที่นี่

ฉันดัดแปลงหุ่นยนต์ในสองสามวิธี

1. ตัวจับ สิ่งนี้ไม่ได้ผลสำหรับฉัน เกียร์ลื่น ดังนั้นฉันจึงเพิ่มชิ้นส่วนเลโก้เพิ่มเติมเพื่อป้องกันสิ่งนั้น และเมื่อเครนถูกลดระดับลง มันมักจะติดขัด ดังนั้นฉันจึงเพิ่มตัวเชื่อมโยงของวัตต์เพื่อป้องกันสิ่งนั้น

ด้านบนเป็นตัวจับที่ใช้งานจริงซึ่งแสดงการเชื่อมโยงที่แก้ไขแล้ว

2. บิลด์ดั้งเดิมใช้โปรเซสเซอร์ Lego Mindstorms EV3 แต่ฉันใช้ Raspberry Pi ซึ่งทำให้ง่ายต่อการใช้ Python

3. ฉันใช้ Raspberry Pi 3 Model B.

4. เพื่อเชื่อมต่อ RPi กับ Lego ฉันใช้ BrickPi3 จาก Dexter Industries BrickPi ยึดติดกับ Raspberry Pi และแทนที่ LEGO Mindstorms NXT หรือ EV3 Brick ร่วมกัน

เมื่อคุณมีไฟล์ Lego Digital Designer แล้ว มีคำถามเกี่ยวกับการรับชิ้นส่วน LEGO คุณสามารถรับอิฐได้โดยตรงจากร้าน LEGO และนี่เป็นวิธีที่ถูกที่สุดในการรับอิฐ อย่างไรก็ตาม อิฐจะไม่มีทุกสิ่งที่คุณต้องการ และอิฐอาจใช้เวลาสองสามสัปดาห์หรือมากกว่านั้นกว่าจะมาถึง

คุณยังสามารถใช้ Rebrickable: เปิดบัญชี อัปโหลดไฟล์ LDD และรับรายชื่อผู้ขายจากที่นั่น

อีกแหล่งที่ดีคือ Bricklink

ขั้นตอนที่ 3: ซอฟต์แวร์ที่ทำให้หุ่นยนต์เคลื่อนที่

รหัสทั้งหมดเขียนด้วย Python 2

  1. Dexter Industries จัดหารหัสเพื่อรองรับการเคลื่อนย้ายมอเตอร์ EV3 เป็นต้น ซึ่งมาพร้อมกับ BrickPi3
  2. ฉันให้รหัสเพื่อให้มอเตอร์เคลื่อนที่ในลักษณะที่จะขยับตัวหมากรุก!
  3. เครื่องมือหมากรุกคือ Stockfish - ซึ่งสามารถเอาชนะมนุษย์คนใดก็ได้! "Stockfish เป็นหนึ่งในเครื่องมือหมากรุกที่แข็งแกร่งที่สุดในโลก นอกจากนี้ยังแข็งแกร่งกว่าปรมาจารย์หมากรุกที่เก่งที่สุดของมนุษย์อีกด้วย"
  4. รหัสสำหรับขับเคลื่อนกลไกหมากรุก ตรวจสอบว่าการเคลื่อนไหวถูกต้อง และอื่นๆ คือ ChessBoard.py
  5. ฉันใช้รหัสจาก https://chess.fortherapy.co.uk เพื่อเชื่อมต่อกับสิ่งนั้น
  6. รหัสของฉัน (ใน 2 ด้านบน) จากนั้นเชื่อมต่อกับสิ่งนั้น!

ขั้นตอนที่ 4: ซอฟต์แวร์สำหรับการรับรู้การเคลื่อนไหวของมนุษย์

หลังจากที่ผู้เล่นเคลื่อนไหวแล้ว กล้องจะถ่ายภาพ รหัสจะครอบตัดและหมุนสิ่งนี้เพื่อให้กระดานหมากรุกพอดีกับรูปภาพถัดไป สี่เหลี่ยมกระดานหมากรุกต้องดูสี่เหลี่ยม!. ภาพมีความบิดเบี้ยวเนื่องจากขอบของกระดานอยู่ห่างจากกล้องมากกว่าศูนย์กลางของกระดาน อย่างไรก็ตาม กล้องอยู่ไกลพอที่หลังจากครอบตัดแล้ว การบิดเบือนนี้ไม่มีนัยสำคัญ เนื่องจากหุ่นยนต์รู้ว่าชิ้นส่วนทั้งหมดอยู่ที่ไหนหลังจากที่คอมพิวเตอร์เคลื่อนที่ ดังนั้นสิ่งที่ต้องทำหลังจากที่มนุษย์ทำการย้ายก็คือรหัสที่จะสามารถบอกความแตกต่างระหว่างสามกรณีต่อไปนี้:

  • สี่เหลี่ยมว่างเปล่า
  • ชิ้นส่วนสีดำใด ๆ
  • สีขาวชิ้นใด.

นี้ครอบคลุมทุกกรณี รวมถึงการโยนทิ้งและ en passant

หุ่นยนต์จะตรวจสอบว่าการเคลื่อนไหวของมนุษย์ถูกต้องหรือไม่ และแจ้งพวกเขาหากไม่ใช่! กรณีเดียวที่ไม่ครอบคลุมคือการที่ผู้เล่นที่เป็นมนุษย์ส่งเสริมการจำนำให้กลายเป็นตัวที่ไม่ใช่ราชินี ผู้เล่นจะต้องบอกหุ่นยนต์ว่าชิ้นส่วนที่ได้รับการเลื่อนตำแหน่งคืออะไร

ตอนนี้เราสามารถพิจารณาภาพในแง่ของสี่เหลี่ยมกระดานหมากรุก

ในการตั้งค่ากระดานเริ่มต้น เรารู้ว่าชิ้นส่วนสีขาวและสีดำทั้งหมดอยู่ที่ไหน และช่องสี่เหลี่ยมว่างอยู่ที่ไหน

สี่เหลี่ยมที่ว่างเปล่ามีสีที่แตกต่างกันน้อยกว่าสี่เหลี่ยมจัตุรัสที่ถูกครอบครอง เราคำนวณค่าเบี่ยงเบนมาตรฐานสำหรับสี RGB สามสีแต่ละสีสำหรับแต่ละช่องสี่เหลี่ยมตามพิกเซลทั้งหมด (นอกเหนือจากสีที่อยู่ใกล้เส้นขอบของสี่เหลี่ยมจัตุรัส) ค่าเบี่ยงเบนมาตรฐานสูงสุดสำหรับสี่เหลี่ยมจัตุรัสว่างใดๆ จะน้อยกว่าค่าเบี่ยงเบนมาตรฐานขั้นต่ำสำหรับสี่เหลี่ยมจัตุรัสใดๆ ที่ถูกครอบครอง และสิ่งนี้ช่วยให้เราพิจารณาว่าช่องใดว่างหลังจากผู้เล่นคนต่อมาย้าย

เมื่อกำหนดค่าเกณฑ์สำหรับช่องสี่เหลี่ยมว่างและช่องสี่เหลี่ยมว่าง ตอนนี้เราต้องกำหนดสีชิ้นส่วนสำหรับช่องสี่เหลี่ยมว่าง:

บนกระดานเริ่มต้น เราคำนวณสำหรับสี่เหลี่ยมสีขาวแต่ละอัน สำหรับแต่ละ R, G, B, ค่าเฉลี่ย (เฉลี่ย) ของพิกเซลของมัน (นอกเหนือจากที่ใกล้กับเส้นขอบของสี่เหลี่ยมจัตุรัส) ค่าต่ำสุดของค่าเฉลี่ยสำหรับสี่เหลี่ยมสีขาวใดๆ มากกว่าค่าสูงสุดของค่าเฉลี่ยในสี่เหลี่ยมสีดำใดๆ และเพื่อให้เราสามารถกำหนดสีของชิ้นส่วนสำหรับช่องสี่เหลี่ยมที่ถูกครอบครอง ตามที่ระบุไว้ก่อนหน้านี้ นี่คือทั้งหมดที่เราต้องทำเพื่อกำหนดว่าการเคลื่อนไหวของผู้เล่นที่เป็นมนุษย์คืออะไร

อัลกอริทึมจะทำงานได้ดีที่สุดหากกระดานหมากรุกมีสีที่ห่างไกลจากสีของหมาก ในหุ่นยนต์ของฉัน ชิ้นส่วนต่างๆ จะเป็นสีขาวนวลและสีน้ำตาล และกระดานหมากรุกเป็นการ์ดที่ทำด้วยมือ และเป็นสีเขียวอ่อนโดยมีความแตกต่างเล็กน้อยระหว่างช่องสี่เหลี่ยม "สีดำ" และ "สีขาว"

แก้ไข 17 ต.ค. 2561: ตอนนี้ฉันได้ทาสีชิ้นสีน้ำตาลเป็นสีดำด้าน ซึ่งทำให้อัลกอริทึมทำงานภายใต้สภาพแสงที่แปรปรวนมากขึ้น

ขั้นตอนที่ 5: แสง กล้อง แอ็คชั่น

ไฟ

คุณต้องมีแหล่งกำเนิดแสงที่สม่ำเสมอวางอยู่เหนือกระดาน ฉันใช้อันนี้ซึ่งถูกมากจาก amazon.co.uk - และไม่ต้องสงสัยเลยว่ามีสิ่งที่คล้ายกันใน amazon.com โดยที่ไฟในห้องดับลง

อัปเดต: ตอนนี้ฉันมีไฟสองดวง เพื่อให้แหล่งกำเนิดแสงที่สม่ำเสมอยิ่งขึ้น

กล้อง

ไม่ต้องสงสัยเลยว่าคุณสามารถใช้โมดูลกล้อง Raspberry Pi พิเศษ (พร้อมสายยาว) ได้ แต่ฉันใช้กล้อง USB - "Logitech 960-001064 C525 HD Webcam - Black" ซึ่งใช้งานได้กับ RPi คุณต้องตรวจสอบให้แน่ใจว่ากล้องไม่เคลื่อนที่โดยสัมพันธ์กับบอร์ด โดยการสร้างหอคอย หรือมีที่ไหนสักแห่งที่จะซ่อมให้แน่น กล้องต้องอยู่สูงเหนือกระดานพอสมควร เพื่อลดความผิดเพี้ยนทางเรขาคณิต ฉันมีกล้องอยู่เหนือกระดาน 58 ซม.

อัปเดต: ตอนนี้ฉันชอบ HP Webcam HD 2300 มากกว่า เนื่องจากฉันคิดว่าเชื่อถือได้มากกว่า

ตาราง

คุณต้องการหนึ่งที่แข็งแรง ฉันซื้ออันนี้ ยิ่งไปกว่านั้น คุณจะเห็นว่าผมมีแผ่น MDF สี่เหลี่ยม พร้อมบางสิ่งที่จะหยุดหุ่นยนต์กระโดดไปมาเมื่อรถเข็นเคลื่อนที่ เป็นความคิดที่ดีที่จะวางกล้องไว้ที่ตำแหน่งเดิมบนกระดาน!

แป้นพิมพ์

RPi ต้องใช้แป้นพิมพ์ USB สำหรับการตั้งค่าครั้งแรก และฉันใช้มันเพื่อพัฒนาโค้ด สิ่งเดียวที่หุ่นยนต์ต้องการแป้นพิมพ์คือการเริ่มโปรแกรมและจำลองการกดปุ่มนาฬิกาหมากรุก ฉันได้รับหนึ่งในเหล่านี้ แต่จริงๆ แล้ว คุณต้องใช้เมาส์หรือปุ่มที่เชื่อมต่อ GPIO กับ RPi. เท่านั้น

แสดง

ฉันใช้หน้าจอขนาดใหญ่เพื่อการพัฒนา แต่สิ่งเดียวที่หุ่นยนต์ต้องการคือการบอกคุณว่าการเคลื่อนไหวของคุณไม่ถูกต้อง ตรวจสอบ ฯลฯ ฉันได้รับหนึ่งในสิ่งเหล่านี้ มีจำหน่ายที่ amazon.com ด้วย

แต่แทนที่จะต้องแสดง หุ่นยนต์จะพูดวลีเหล่านี้! ฉันได้ทำเช่นนี้โดยการแปลงข้อความเป็นคำพูดโดยใช้โค้ดตามที่อธิบายไว้ที่นี่ และแนบลำโพงขนาดเล็ก (ฉันใช้ "ลำโพงมินิแฮมเบอร์เกอร์")

วลีที่หุ่นยนต์พูดว่า:

  • ตรวจสอบ!
  • รุกฆาต
  • ย้ายไม่ถูกต้อง
  • คุณได้รับรางวัล!
  • ทางตัน
  • วาดซ้ำสามเท่า
  • วาดโดยกฎ 50 การเคลื่อนไหว

กฎการเคลื่อนที่ห้าสิบครั้งในหมากรุกระบุว่าผู้เล่นสามารถเรียกร้องการเสมอกันได้หากไม่มีการยึดครองและไม่มีการจำนำในการเคลื่อนไหวห้าสิบครั้งสุดท้าย (เพื่อจุดประสงค์นี้ "การย้าย" ประกอบด้วยผู้เล่นที่จบเทิร์นแล้วตามด้วย ฝ่ายตรงข้ามจบเทิร์น)

คุณสามารถได้ยินหุ่นยนต์พูดในวิดีโอ "fool's mate" สั้นๆ ด้านบนนี้ (ถ้าคุณเปิดเสียงให้ดังขึ้น)!

ขั้นตอนที่ 6: วิธีรับซอฟต์แวร์

1. ปลาสต็อก

หากคุณเรียกใช้ Raspbian บน RPi คุณสามารถใช้เครื่องมือ Stockfish 7 ได้ฟรี เพียงแค่เรียกใช้:

sudo apt-get ติดตั้ง stockfish

2. ChessBoard.py

รับที่นี่

3. รหัสอ้างอิงจาก

มาพร้อมกับรหัสของฉัน

4. ไดรเวอร์ Python สำหรับ BrickPi3:

รับสิ่งเหล่านี้ที่นี่

5. รหัสของฉันที่เรียกใช้รหัสทั้งหมดข้างต้นและทำให้หุ่นยนต์เคลื่อนไหวและรหัสการมองเห็นของฉัน

รับสิ่งนี้จากฉันโดยโพสต์ความคิดเห็นแล้วฉันจะตอบกลับ

แนะนำ: