ข้ามไปที่เนื้อหาหลัก

ตัวอย่างการเขียนโปรแกรมหุ่นยนต์อัตโนมัติ AI แบบง่าย

ตัวอย่าง AI ง่ายๆโปรแกรมหุ่นยนต์อัตโนมัติงานแข่งขัน RMUTP Robocon 2017




จากการแข่งขันหุ่นยนต์ RMUTP Robocon 2017 ที่ผ่านมาเมื่อวันที่ 19-20 มกราคม 2560 ทีม iGenius Robot #49 ของเราได้ป้องกันแชมป์ได้สำเร็จถึงแม้ว่าหุ่นจะช้ากว่า แต่ด้วยการเขียนโปรแกรมที่ใส่วิธีการคิดให้หุ่นสามารถเปลี่ยนแปลงการทำงานตามสถานะการณ์ต่างๆ ได้จึงทำให้ได้เปรียบในการแข่งขันเพราะไม่ต้องขอ retry ออกมาเพื่อเปลี่ยนโปรแกรมในการทำงานในกรณีที่แท่นวางชิ้นงานไม่ว่าง หุ่นยนต์จะบันทึกข้อมูลและหาเส้นทางในการวางชิ้นงานใหม่เองและเป็นเส้นทางที่ใกล้ๆ ที่สุดเพื่อไปหยิบชิ้นงานชิ้นต่อไปด้วย นอกจากนี้หุนยนต์ยังสามารถรู้ได้ทันทีเมื่อในฝั่งของตัวเองวางชิ้นงานเรียงติดกัน 3 ชนิดเพื่อไปหยิบชิ้นบิงโกไปวางเพื่อจบเกมส์ได้เอง ระหว่างแข่งขันหุ่นยนต์คิดเองทั้งหมดจึงทำให้คู่ต่อสู้ยากที่จะดักทางได้ ต่างจากการเขียนโปรแกรมที่ใส่ขั้นตอนลงไปในหุ่นที่ทำให้เห็นการทำงานที่เป็นรูปแบบที่ผู้เขียนใส่ลงเองเพื่อให้หุ่นทำงานตามต้องการ ถือว่าเป็นจุดเริ่มต้นของการเขียนโปรแกรมหุ่นยนต์แบบ AI ที่อยากให้เพื่อนๆ ในวงการหุ่นยนต์เพื่อการศึกษาให้ความสนในมาเขียนโปรแกรมหุ่นยนต์อัตโนมัติแนวนี้กันบ้าง วันนี้จึงนำ Code ในส่วนที่เช็คว่า ฝั่งของตัวเองวางชิ้นงานเรียงติดกัน 3 ชนิดแล้วหรือยัง มาเป็นแนวทางเบื้องต้นให้ผู้สนใจครับ

รูปแบบการแข่งขัน

เพื่อความเข้าใจจึงขออธิบายรูปแบบการแข่งขันคร่าวๆ กันก่อนจากภาพสนามด้านล่าง แต่ละทีมจะมีหุ่นยนต์ 2 ตัวคือหุ่นบังคับมือและหุ่นอัตโนมัติ โดยที่หุ่นบังคับมือจะต้องหยิบชิ้นงานจากพื้นที่สีเหลืองมาวางบนพื้นที่สีแดงให้ตรงตามลักษณะคือ สามเหลี่ยม สี่เหลี่ยม และทรงกระบอก เพื่อให้หุ่นยนต์อัตโนมัติมารับชิ้นงานไปวางบนแท่นสีดำตรงกลางที่มีจำนวน 12 แท่น โดยทีมที่วางชิ้นงาน 3 แบบเรียงติดกัน 3 แท่นได้ จะมีสิทธิ์ที่จะไปหยิบชิ้นงานหกเหลี่ยมไปวางบนแท่นสีม่วงเพื่อทำบิงโกและจบเกมส์



รูปแบบการคิดของหุ่นยนต์อัตโนมัติ

หุ่นยนต์อัตโนมัติจะถูกโปรแกรมให้มองแท่นวางชิ้นงานสีดำเป็นตัวแปร array 1 มิติ
 byte dropStatus[12]; โดยจะมีการแทนค่าต่างๆดังนี้
0 -- คือแท่นวางที่ว่าง
1 -- คือแท่นวางที่ถูกวางโดยฝั่งตรงข้าม
2 -- คือแท่นวางที่เราวางชิ้นงานสามเหลี่ยม
3 -- คือแท่นวางที่เราวางชิ้นงานสี่เหลี่ยม
4 -- คือแท่นวางที่เราวางชิ้นงานทรงกระบอก

ก็จะสามารถเขียนโปรแกรมให้อ่านค่าจากตัวแปรออกมาทีละ 3 ตัวแล้วนำมาบวกกัน ซึ่งถ้าหากผลรวมได้เท่ากับ 9 และไม่มีสมาชิกตัวใดซ้ำกัน และไม่มีสมาชิกตัวใดมีค่าเท่ากับ 0 หรือ 1 ก็จะเท่ากับว่ามีการวางชิ้นงานทั้ง 3 แบบเรียงกันได้ก็สั่งให้หุ่นยนต์ไปหยิบชิ้นงานหกเหลี่ยมมาทำบิงโกได้

ตัวอย่าง Code

boolean bingoChk(){
      boolean foundBingo = false;
      for (int readGroup = 0; readGroup <= 9; readGroup++){
            int chkSum = 0;
            boolean dataOK = false;
            if ((dropStatus[readGroup] != dropStatus[readGroup]+1]) || 
                 (dropStatus[readGroup] != dropStatus[readGroup]+2]) ||
                 (dropStatus[readGroup+1] != dropStatus[readGroup]+2]))     
            {
                for (int readValve = readGroup; readValve <= readGroup+2; readValve++){
                    if (dropStatus[readValve] == 0 || dropStatus[readValve] == 1){
                        break;
                    }
                    else {
                          chkSum = chkSum + dropStatus[readValve];
                          if (readValve == (readGroup+2)) dataOK = true;
                    }
                 }
                 if (chkSum == 9 && dataOK){
                     foundBingo = ture;
                     break;
               }
            }
       } 
       return foundBingo;
}


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



ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

NETPIE Mobile app ง่ายๆ แค่ติดตั้ง ล็อคอิน ใช้งาน

NETPIE Mobile app ง่ายๆ แค่ติดตั้ง ล็อคอิน ใช้งาน           ฟีเจอร์ใหม่แกะกล่องจาก NETPIE กับ Mobile app ที่มีให้โหลดทั้ง Andriod และ iOS ที่ใช้งานง่ายแสนง่ายเพียงแค่ติดตั้ง ล็อคอิน แล้วใช้งาน ซึ่งโดยตัว App นี้จะมีฟังค์ชั่นหลักอยู่ 2 ส่วนคือ Freebaord คือ Dashboard สำหรับ IoT ที่สามารถแสดงผล และควบคุมอุปกรณ์ IoT ของเราได้นั่นเอง โดยการใช้งานในส่วนนี้เราจะต้องทำการสร้าง Widget ต่างๆของเราบน Freebaord บน PC ผ่านเว็บ NETPIE ก่อนจึงจะสามารถนำมาใช้งานได้ นั่นหมายความว่า Freebaord ของเราจะสามารถทำงานได้ทั้งบน PC ผ่าน Browser และมือถือของเราผ่าน NETPIE App นั่นเอง Notification เป็นการ Alert จากอุปกรณ์ IoT เพื่อแจ้งเตือนเหตุการณ์ที่สำคัญทำให้รับรู้และแก้ไขสถานการณ์ต่างๆ ได้อย่างทันท่วงที โดยที่ไม่ต้องนั่งมองจอแสดงผลอยู่ตลอดเวลานั่นเอง ซึ่งในส่วนนี้ทาง NETPIE กำลังจะมีวีธีการตั้งค่าออกมาเร็วๆ นี้ครับ มารเริ่มต้นการใช้งาน NETPIE Mobile app ใน 3 ขั้นตอนกันเลยดีกว่าครับ (ในที่นี้ผมใช้ iPhone ในการทดสอบ) 1. ติดตั้ง     วิธีการติดตั้งนั้นก็ง่า...
เกมส์เสี่ยงโชคด้วยบอร์ ATX-2         ตัวอย่างง่ายๆ กับอุปกรณ์ไม่กี่ชิ้นเพื่อสร้างเกมส์เพื่อความสนุกสนานในกลุ่มเพื่อน ๆ นอกจากนี้ยังสามารถนำไปประยุกต์ใช้กับงานกิจกรรมต่างๆ ได้อีกด้วย        เรื่องนี้เริ่มจากกลุ่มเพื่อนๆ นัดกันเพื่อสังสรรค์ย้อนหลังวันปีใหม่ และอยากได้เกมส์เพื่อเพิ่มความสนุกสนานในการสังสรรค์ด้วยความเป็น Maker ของเราจึงคิดที่จะสร้างเกมส์ขึ้นมาสักอันโดยได้แรงบันดาลใจจากสมัยเด็กที่เคยหยอดตู้สายไหมที่ใช้เหรียญหยอดแล้วมีเข็มหมุนไปชี้ที่ตัวเลขว่าเราจะได้สายไหมกี่ชิ้น มาประยุกต์เป็นเกมส์สำหรับสายแข็งในรูปแบบดิจิตัล กดปุ่มค้างไว้แล้วจะมีรายชื่อเพื่อนๆที่ร่วมเล่นวิ่งไปเรื่อยๆ จนปล่อยปุ่มกดปรากฏเป็นชื่อใคร คนนั้นคือผู้โชค และกดอีกครั้งว่าจะโชคดีได้ดื่นกี่ช็อต และด้วยเวลาอันจำกัดมีไม่ถึง 20 นาทีเลยมองหาของใกล้ตัวที่ใช้งานได้สะดวกรวดเร็วก็เจอ บอร์ดควบคุม ATX-2 ของ Inex ครับ ไม่ต้องโยงสายลง Breadboard ไม่ต้องทำ PCB มีจอ LCD มาพร้อมเสียบ Adaptor ได้เลย ก็เลยลงมือสร้างเลย  วีดีโอตัวอย่างการเล่นเกมส์เสี่ยงโชค เริ่มลงมือทำเ...