สารบัญ:

หุ่นยนต์ Chaotic ที่เรียนรู้ด้วยตนเอง: 3 ขั้นตอน
หุ่นยนต์ Chaotic ที่เรียนรู้ด้วยตนเอง: 3 ขั้นตอน

วีดีโอ: หุ่นยนต์ Chaotic ที่เรียนรู้ด้วยตนเอง: 3 ขั้นตอน

วีดีโอ: หุ่นยนต์ Chaotic ที่เรียนรู้ด้วยตนเอง: 3 ขั้นตอน
วีดีโอ: สร้างตึกเอาชีวิตรอดจากหุ่นยนต์ระเบิด 24 ชม. | Build to Survive the Robots Roblox 2024, กรกฎาคม
Anonim
หุ่นยนต์ Chaotic ที่เรียนรู้ด้วยตนเอง
หุ่นยนต์ Chaotic ที่เรียนรู้ด้วยตนเอง

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

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

ขั้นตอนที่ 1: ฮาร์ดแวร์ AKA the Robot

ฮาร์ดแวร์ AKA หุ่นยนต์
ฮาร์ดแวร์ AKA หุ่นยนต์
ฮาร์ดแวร์ AKA หุ่นยนต์
ฮาร์ดแวร์ AKA หุ่นยนต์
ฮาร์ดแวร์ AKA หุ่นยนต์
ฮาร์ดแวร์ AKA หุ่นยนต์

คุณต้องการ:

- 1 Arduino Due

- 8 ไมโครเซอร์โว

- เมาส์ PS/2 1 ตัว

- ตัวเลื่อนระดับ 1 ตัว

- เซนเซอร์ชิลด์บางรุ่นหรือคล้ายกัน ฉันเบื่อแผงเซ็นเซอร์และเชื่อมตัวเอง

-สายไฟ

- แหล่งจ่ายไฟ 5V ภายนอกสำหรับเซอร์โว

- เศษเหล็กบางส่วน กาวบางส่วน และด้ายเหล็กบางส่วน และเทป!

เลยวาง Due ไว้บนพื้น ใส่เซอร์โวในวงแหวนรอบ ๆ ประกอบเข้ากับเศษเหล็ก กาว และด้าย นี่คือส่วนที่วุ่นวาย! เนื่องจากการออกแบบนั้นไม่เป็นระเบียบ จึงคาดเดาไม่ได้ว่าจะเคลื่อนไหวอย่างไรเพื่อให้คลานได้ นี่คือเหตุผลที่รหัสการเรียนรู้ด้วยตนเองเป็นวิธีที่จะไป!

เคล็ดลับ: ใช้ชิ้นส่วนโลหะที่ค่อนข้างหนักบางชิ้นเพื่อให้หุ่นยนต์เคลื่อนที่ได้ง่ายขึ้น

เชื่อมต่อเซอร์โวกับครบกำหนดในกรณีของฉันเชื่อมต่อกับ D39, 41, 43, 45, 47, 49, 51, 53

เชื่อมต่อเซอร์โวกับแหล่งจ่ายไฟ 5V ภายนอก สำหรับสิ่งนี้ ให้สร้างเกราะป้องกันบางชนิด หรือใช้แผงป้องกันเซ็นเซอร์หรือสิ่งที่คล้ายกัน อย่าป้อนเซอร์โวจากขา 5V เนื่องจากไม่เพียงพอ เนื่องจากจะไหม้ ฉันใช้บอร์ดต้นแบบขนาดเล็กเพื่อแจกจ่าย 5 V ไปยังเซอร์โวทั้งหมด บอร์ดนี้ยังมีตัวเลื่อนระดับสำหรับนาฬิกาเมาส์ PS/2 และสายข้อมูล บอร์ดยังป้อนเมาส์ด้วย 5V อย่าลืมเชื่อมต่อกราวด์จากพลังงานภายนอกไปยัง Arduino เนื่องจากกราวด์! แผนผังแสดงวิธีเชื่อมต่อทั้งหมด

ต่อ PS/2 เข้ากับแหล่งจ่ายไฟ (5V) และกราวด์ เชื่อมต่อนาฬิกาและสายข้อมูลของ PS/2 กับ Due ผ่านตัวเลื่อนระดับ (เนื่องจากไป 3.3V, PS/2 เป็น 5V) เชื่อมต่อนาฬิกาบน D12 และข้อมูลบน D13

สำหรับรายละเอียดเกี่ยวกับโปรโตคอล PS/2 นี่เป็นคำแนะนำที่ดีมาก:

www.instructables.com/id/Optical-Mouse-Od…

ห้องสมุด PS/2 โดย jazzycamel ที่ฉันใช้:

ขั้นตอนที่ 2: รหัส

รหัส
รหัส

ตอนแรกให้ฉันพูดว่า: ฉันไม่ใช่โปรแกรมเมอร์ บางส่วนมีความกว้างขวางมาก แน่นอนว่าโปรแกรมเมอร์ที่มีทักษะสามารถย่อให้สั้นลงได้ เป็นต้น

รหัสคือการเรียนรู้ด้วยตนเองและนี่คือแกนหลักของโครงการ นี่คือส่วนที่สนุกของมัน! หมายความว่าหุ่นยนต์มีวิวัฒนาการและดีขึ้นเรื่อยๆ ในกรณีนี้ หุ่นยนต์จะคลานได้ดีขึ้น สิ่งที่น่าทึ่งเกี่ยวกับสิ่งนี้คือหุ่นยนต์จะพัฒนาไปเป็นสิ่งที่คุณป้อนกลับเข้าไป ในกรณีนี้ มันจะลากเมาส์ PS/2 และยิ่งลากเมาส์นานเท่าไหร่ แต้มก็จะยิ่งสูงขึ้นเท่านั้น

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

ดังที่คุณเห็นในภาพ เมาส์ถูกลากบนสายเส้นเล็ก ตอนแรกมันถูกลากในสายเมาส์ อย่างไรก็ตาม สายเคเบิลค่อนข้างแข็ง ดังนั้นหุ่นยนต์จึงเรียนรู้ที่จะเขย่าเมาส์แทนการลาก การสั่นทำให้คะแนนสูง…

รหัสใช้ 50 บุคคล แก่นของสิ่งนี้คืออาร์เรย์ขนาด 50x50 ไบต์

individ คืออาร์เรย์ของไบต์ เมื่อตัวแยกถูกใช้เพื่อเรียกใช้หุ่นยนต์ตัวแยกนี้จะถูกส่งไปยังฟังก์ชันในรหัสที่เรียกว่า "โทลเคน"

ในช่วงเริ่มต้นของการวิ่ง มี 8 ตัวแปร m1, m2, m3, m4, m5, m6, m7 และ m8 (หนึ่งตัวแปรสำหรับแต่ละเซอร์โว) ในหุ่นยนต์ตัวนี้ พวกเขาทั้งหมดมีค่าเริ่มต้นคงที่ ใน "tolken" mś จะถูกแปลงเป็น case/swich loop ขึ้นอยู่กับค่าของ individ ตัวอย่างเช่น ค่าของ "1" ดำเนินการดังต่อไปนี้: m1 = m1 + m2

หากบุคคลคือ: 1, 2, 3, 0, 0, 0, 0….. จากนั้น mś จะถูกแปลงด้วยวิธีต่อไปนี้:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken เป็นรายการการดำเนินการทางคณิตศาสตร์ที่แตกต่างกัน 256 รายการ ดังนั้นทุกค่าที่เป็นไปได้ของอาร์เรย์ individs จะแสดงการเปลี่ยนแปลงทางคณิตศาสตร์ของค่า m

กระบวนการโทลเคนเสร็จสิ้น 4 ครั้ง โดยมีการอ่านค่าระหว่างทุกรอบ สร้างรหัสมอเตอร์ที่แตกต่างกันสี่รหัสสำหรับแต่ละ "m" motorcodes เป็นค่าที่ส่งไปยังเซอร์โวในภายหลัง

ในทุกขั้นตอนของการวิวัฒนาการ บุคคล 4 คนแข่งขันกันในการคลาน บุคคลที่ดีที่สุดสองคนจะเป็นพ่อแม่ของลูกสองคน ลูกจะเข้ามาแทนที่ตัวที่แย่ที่สุดสองคน เมื่อมีการสร้างทารก การประกบกันของ "รหัสพันธุกรรม" จากพ่อแม่คนหนึ่งจะถูกแลกเปลี่ยนเป็นชิ้นๆ จากพ่อแม่อีกคนหนึ่ง ซึ่งจะสร้าง individs ใหม่สองตัว

หากไม่มีบุคคลใดดำเนินการเลย การกลายพันธุ์ของตัวบุคคลจะเกิดขึ้นเพื่อสร้างสิ่งใหม่

คุณสามารถหารหัสได้ที่ GitHub:

ขั้นตอนที่ 3: จะฝึกอย่างไร?

นี่เป็นส่วนที่ยุ่งยาก ในการฝึกซ้อมอย่างถูกต้อง คุณต้อง "รีเซ็ต" ทุกครั้งที่วิ่ง ซึ่งหมายความว่าคุณต้องวางไว้ในตำแหน่งเดิมทุกครั้ง

ฉันได้ใส่จุดตรวจสอบสองสามจุดในโค้ดเพื่อให้แน่ใจว่าหุ่นยนต์อยู่ในตำแหน่งเริ่มต้น

ดังนั้นจัดตำแหน่งหุ่นยนต์และปล่อยให้มันทำงาน

สอบได้ 4 ตัว แล้วเลือก 2 ตัวที่ดีที่สุดมาเป็นพ่อแม่ หลังจากแทนที่ตัวที่แย่ที่สุดด้วยตัวอ่อน มันจะพิมพ์ข้อมูลบางอย่างเกี่ยวกับประสิทธิภาพของตัวอ่อน นอกจากนี้ยังพิมพ์อาร์เรย์ 50x50 ก็ควรที่จะคัดลอกสิ่งนี้ลงในแผ่นงาน Excel หรือที่คล้ายกัน (หรือเขียนโค้ดที่จำเป็นในการประมวลผล) หาก Due ถูกรีเซ็ต (สิ่งนี้เกิดขึ้นจากหลายสาเหตุ) คุณจะไม่สูญเสียงานการฝึกอบรมของคุณ คุณสามารถคัดลอก/วางอาร์เรย์ลงในโค้ดและฝึกฝนต่อไปได้

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

ลองชั้นที่แตกต่างกันด้วย! หุ่นยนต์ของฉันทำงานได้ดีที่สุดบนพรมไนลอน

การปรับปรุงที่เป็นไปได้:

1. จะดีกว่าถ้ามีนาโนแยกต่างหากเพื่ออ่านเมาส์ PS/2 และส่งระยะทางที่ประมวลผลที่ย้ายผ่านอนุกรมไปยังนาโน การอ่านเมาส์ PS/2 ของฉันค่อนข้างสั่นคลอน นี่คือสาเหตุของการอ่าน/ล้างส่วนต่างๆ ของโค้ดด้วยเมาส์

2. อุปกรณ์ทดสอบบางประเภทที่ลากหุ่นยนต์กลับไปที่ตำแหน่งเริ่มต้นจะทำให้การฝึกเร็วขึ้น

3. ฉันคิดว่ามันฉลาดที่จะฝึกฝนให้ช้ากว่าที่ฉันทำเล็กน้อย การฝึกอบรมที่ช้าลงทำให้มั่นใจได้ว่าได้รับการฝึกฝน "ไปในทิศทางที่ถูกต้อง" ประสิทธิภาพเฉลี่ยของการทดสอบหลายๆ ครั้งอาจเป็นวิธีที่เป็นไปได้

แนะนำ: