Archive

Archive for 03/11/2025

ฝึกการเขียนโปรแกรม ด้วย Robo MIND ภาค #5

จาก หัวข้อ ฝึกการเขียนโปรแกรม ด้วย Robo MIND ภาค #4 คำสั่งตรวจจับสิ่งรอบตัวหุ่นยนต์ / Sensing the environment เราได้คำสั่งเพิ่มเติมในส่วนของการ ตรวจจับสิ่งรอบตัว ซึ่งสิ่งรอบตัวประกอบด้วย ตรวจสิ่งกีดขวาง ตรวจ Beacon ตรวจสีพื้น เท่าที่เราได้ทำ แบบฝึกใาเราได้ใช้คำสั่งในการตรวจสอบสิ่งกีดขวางมาแล้วคือ frontIsClear ซึ่งเป็นกำแพง ในฉาก ต่อไปเราจะเพิ่มเติมก็คือ ในกลุ่ม ตรวจสีพื้น เช่น frontIsWhite ซึ่งสีพื้นจะมีได้ก็ต้องการมีการระบาย ลงไปด้วยตัวหุ่นเองหรือมีในฉากนั้น ๆ

ในแบบฝึกนี้เราจะตั้งโจทย์เพิ่มเติมจากโจทย์ทีแล้วว่า นอกจากเราจะวิ่งไปอย่างเดียวเราก็ ระบายสีลงบนทางเที่เราวิ่งไปด้วย และเพิ่มตเติมก็คือเราจะไม่วิ่งไปทับทางเดิมที่ระบายไว้

จาก Code เดิมยกมาจากตัวอย่างเดิม ดังด้านลาง

repeat{
 
     if(frontIsObstacle)  { # ตรวจดูว่าด้านหน้าไปได้ไหมถ้ามี ให้ สุ่ม
           if(flipCoin){
               right
             }else{
               left
             }
      }else { #ถ้าไม่มีก็ สั่งเดิน 1 ครั้ง
 
            forward(1)
       }
}

เมื่อเราปรับปรุงตามโจทย์และเติมลงไป จะได้ดังนี้

repeat{
 
     if(frontIsObstacle)  { # ตรวจดูว่าด้านหน้าไปได้ไหมถ้ามี ให้ สุ่ม
           if(flipCoin){
               right
             }else{
               left
             }
      }else { #ถ้าไม่มีก็ สั่งเดิน 1 ครั้ง
            paintWhite()   # วางแปลง 
            forward(1)     # เดินหน้า 1 step
           
       }
     stopPainting()   # ยกแปลงทาสี คือหยุดทา
}

แล้วลอง Run ดู

ซึ่งเห็นแล้วว่าทำงานได้ อย่างที่อยากให้ทำ แต่ก็ดูแปลก ๆ จะเห็นว่าหุ่นเรา วางแปลง วิ่ง ยกแปลง แบบนี้เรายังไม่อยากได้ ถ้าเรา เอา paintWhite() ไปอยู่ด้านบน เลยจะเป็นอย่าไร ขั้นตอนมันจะกลายเป็นว่า

วางแปลง ตรวจสอบด้านหน้า หมุน เดิน วนไปบรรทัดตรวจสอบด้านหน้า สุดท้ายยกแปลง แบบนี้ จะได้ Code ดังนี้

 paintWhite()   # วางแปลง 
repeat{
 
     if(frontIsObstacle)  { # ตรวจดูว่าด้านหน้าไปได้ไหมถ้ามี ให้ สุ่ม
           if(flipCoin){
               right
             }else{
               left
             }
      }else { #ถ้าไม่มีก็ สั่งเดิน 1 ครั้ง

            forward(1)     # เดินหน้า 1 step
           
       }
}
 stopPainting()   # ยกแปลงทาสี คือหยุดทา

ทอดลอง ทำงานก็จะได้ ดัง Videoเหมือนด้านลาง

ก็เห็นว่าลักษณะการเคลื่อนที่ของ หุ่นทำได้ไวขึ้นและทาทีตามต้องการ มีใครทำได้ดีกว่านี้มั้ย

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

s.teerapong@gmail.com