Archive
ฝึกการเขียนโปรแกรม ด้วย 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
ฝึกการเขียนโปรแกรม ด้วย Robo MIND ภาค #4 คำสั่งตรวจจับสิ่งรอบตัวหุ่นยนต์ / Sensing the environment
สำหรับหัวข้อนี้ก่อน ตัวอย่างต่อไปผมขอเพิ่มเติใ คำสั่งในหมวด ของการตรวจจับสิ่งแวดลอมรอบๆ ตัวหุ่นยนหรือ Sensing the environment ว่ามีกี่คำสั่งอะไรบ้างเพื่อให้เราสามารถทำ Algorithm หุ่นของเราฉลาดขึ้น
1. frontIsClear
คำสั่ง: คืนค่า true ถ้าด้านหน้าว่าง, false ถ้ามีสิ่งกีดขวาง
English: Returns true if the path directly in front of the robot is clear, false otherwise.
ตัวอย่าง / Example
if frontIsClear {
forward(1)
}
หุ่นยนต์จะเดินหน้า 1 ก้าวถ้าทางว่าง
2. frontIsObstacle
คำสั่ง: ตรวจว่าด้านหน้ามีสิ่งกีดขวางหรือไม่
English: Returns true if there is an obstacle directly in front of the robot.
ตัวอย่าง / Example
if frontIsObstacle {
left
)
ถ้ามีสิ่งกีดขวางตรงหน้า → หันซ้าย
3. frontIsBeacon
คำสั่ง: ตรวจว่ามี Beacon (สัญญาณเป้าหมาย) อยู่ด้านหน้าหรือไม่
English: Returns true if a beacon is directly in front of the robot.
ตัวอย่าง / Example
if frontIsBeacon{
paintWhite # Mark as reached
}
ถ้าเจอสัญญาณ beacon → ระบายสีพื้นเพื่อแสดงว่า “ถึงเป้าหมายแล้ว”
4. Sensing on other sides
นอกจากด้านหน้าแล้ว ยังสามารถตรวจซ้ายและขวาได้เหมือนกัน
Similar commands exist for left and right directions:
leftIsClear
rightIsClear
leftIsObstacle
rightIsObstacle
leftIsBeacon
rightIsBeacon
ตัวอย่าง / Example
if rightIsClear {
right
}else{
left
}
ถ้าทางขวาโล่ง → เลี้ยวขวา, ถ้าไม่โล่ง → หันซ้ายแทน
5. Ground Color Sensing
ตรวจสีของพื้นด้านหน้า ซ้าย หรือขวา
Checks for the color of the ground directly ahead or beside the robot.
คำสั่ง / Commands:
frontIsWhite
frontIsBlack
leftIsWhite
leftIsBlack
rightIsWhite
rightIsBlack
ตัวอย่าง / Example
if frontIsBlack() then
backward(1)
else
forward(1)
end
ถ้าพื้นด้านหน้าเป็นสีดำ → ถอยหลัง 1 ก้าว
ถ้าไม่ใช่สีดำ → เดินหน้า
สรุปภาพรวม
| กลุ่ม | ตัวอย่างคำสั่ง | หน้าที่ | ค่าที่คืนกลับ (Return) |
|---|---|---|---|
| ตรวจสิ่งกีดขวาง | frontIsClear, rightIsObstacle | ตรวจว่าทางว่างหรือมีสิ่งขวาง | true / false |
| ตรวจ Beacon | frontIsBeacon | ตรวจว่ามีสัญญาณเป้าหมายอยู่ตรงหน้า | true / false |
| ตรวจสีพื้น | frontIsWhite, leftIsBlack | ตรวจสีของพื้นในทิศต่าง ๆ | true / false |
ยาวนิสหนี่ง ครับอยากให้เห็น ภาพรวมของคำสั่งที่ใช้ในการตรวจสอบ สิ่งแวดล้อมของหุ่นซึ่งก็มีเท่านี้เลือกใช้ตามสถานการได้ เสริมความฉลาดของหุ่นเรา …
s.teerapong@gmail.com
ฝึกการเขียนโปรแกรม ด้วย Robo MIND ภาค #3 ว่าด้วยเรื่องการ สุ่ม (Random)
ในการโปรแกรม เราจะมี Function หรือ ตัวแปรหนึ่งเพื่อเป็น กลไกในการทำให้เกิดทางเลือกที่ สุ่มค่าขึ้นมา ในที่นี้ เรามี คำสั่งหนึ่งชื่อว่า flipCoin ที่จะให้ค่าสุม เป็น True หรือ Fale โดยมีความน่าจะเป็นในการให้ค่าเท่าๆ กัน 50/50
ในบทความนี้ เราจะทำโปรแกรมต่อจากคราวที่แล้วและใส่ flipCoin เพื่อให้เราไม่ต้องหมุนขวาทางเดียว ถ้าจำตัวอย่างที่แล้วไม่ได้แนะนำให้ไปอ่านดูก่อนมาต่อที่นี่นะครัยโดยไปตาม link นี้ แล้วกลับมาต่อที่นี่กัน
ก็จะเพิ่มเติมจากเติมว่าหากตรวจแล้วพบว่าด้านหน้ามีผนัง เราจะสุมหัน ไม่ซ้ายก็ขวา เช็คไปเรื่อย ๆ จนกว่าจะพบว่าด้านหน้าเดินต่อได้จึงเดิน เราจึงเพิ่มเติมที่ code เราได้ว่า จากเดิม
repeat{
if(frontIsObstacle) { # ตรวจดูว่าด้านหน้าไปได้ไหมถ้ามี ให้หมุนขวา
right
}else { #ถ้าไม่มีก็ สั่งเดิน 1 ครั้ง
forward(1)
}
}
เมื่อเพิ่มเข้า ไปผมจะเขียนดังนี้
repeat{
if(frontIsObstacle) { # ตรวจดูว่าด้านหน้าไปได้ไหมถ้ามี ให้ สุ่ม
if(flipCoin){
right
}else{
left
}
}else { #ถ้าไม่มีก็ สั่งเดิน 1 ครั้ง
forward(1)
}
}
มาดูผลการเพิ่ม code เขาไปในโปรแกรม จะได้ดังนี้ครับ
ซึ่งเราก็จะเห็นว่า code ที่เพิ่มเขาไปนั้นทำให้ พฤติกรรมของ หุ่นเปลี่ยนไป มีความสามารถหาทางที่ไม่มีอะไรขวางกันอกกไปได้ แต่เป็นแบบไม่ฉลาดนัก เพราะเขาก็จะหมุ่นหนีทางตันไปเรื่อย ๆ หนีออกได้แต่ เป็นแบบสุ่ม
ถ้าหากเราต้องทำให้หุ่นเราฉลาดกว่านี้ พวกเราลองคิดเพิ่มเติมดูนะครับว่าจะทำอย่างไร เอาไว้ต่อบทหน้านะครับ
ต่อไป: ฝึกการเขียนโปรแกรม ด้วย Robo MIND ภาค #4 คำสั่งตรวจจับสิ่งรอบตัวหุ่นยนต์ / Sensing the environment
s.teerapong@gmail.com
ฝึกการเขียนโปรแกรม ด้วย Robo MIND ภาค #3
เป็นการเขียนเรื่องการโปรแกรมต่อเนื่องในรอบ 10 ปีเนื่องจากยังเห็นมียอดผู้เข้ามาดูในเรื่อง RoboMind อย่างต่อเนื่องมีเวลาก็อยากจะเขียนเพิ่ม เผื่อมีผู้ที่อ่านเพิ่มเติม ในส่วนนี้จะเป็นตัวอย่างการเขียนโปรแกรมในหัวข้อสั้น ๆ และตัวอย่างโปรแกรม
โจทย์ : ต้องการให้หุ่นยนต์ เดินไปข้างหน้าจากจุดเริ่มต้นเมื่อถึงผนังและเดินต่อไม่ได้ ให้ เลี้ยวซ้าย หรือขวาแล้วเดินต่อถ้าไปไม่ได้ให้ เลี้ยวซ้ายหรือขวา แล้วเดินวนซ้ำไปเรื่อย ๆ ไม่มีหยูด
สำหรับผม ก็จะเขียนง่ายๆ ด้วยโครงสร้าง Repeat ก่อน แล้วเดินหน้าไป หนึ่งเสต็ปก่อน แล้วจะทำซ้ำไปเรื่อย ๆ จะแบบนี้จะเห็นภาพก่อนว่า เมื่อหุ่นเดินหน้าไป ก็จะชนเข้ากับผนัง ตัวอย่าง Code เป็นแบบนี้
repeat {
forward (1)
}
เมื่อสั่งทำงาน หรือ Run จะพบว่า เจ้าหุ่นเดินทางไปในทิศทางที่มัน หันไปอยู่ไปเรื่อยๆ จยจะพบผนังแล้วก็หยุดเพราะไปไม่ได้ เราจะต้อง ดังนั้นเรามีคำสัง frontIsObstacle เอาไว้ตรวจสอบว่าข้างหน้าเรามีอะไรขวางไหม แล้วเราจะหมุนหุ่นไป หนึ่งครั้งด้วยคำสั่ง right แล้ว วนซ้ำไปเรื่อย ๆ แบบนี้
repeat{
if(frontIsObstacle) { # ตรวจดูว่าด้านหน้าไปได้ไหมถ้ามี ให้หมุนขวา
right
}else { #ถ้าไม่มีก็ สั่งเดิน 1 ครั้ง
forward(1)
}
}
ใน Video เป็นการ Run code ด้านบนนะครับ ลองดูการทำงาน หุ่นเราฉลาดขึ้นอีกนิส คือเมื่อเตินต่อไม่ได้ ก็หมุนขวาครั้งหนึ่ง แล้วก็ ตรวจสอบใหม่ ถ้าว่างก็เดินหน้า ไปเรื่อย ๆ แต่ถ้าเราดู Videoไปเรื่อย ๆ จะพบว่า เขาจะไปวนอยู่ที่หนึ่งไปต่อไปได้แล้ว ลองมาช่วยกันหาวิธีที่จะให้หุ่น เราหันซ้าย บ้าง หันขวาบ้าง จะได้ไม่เป็น pattern เดิม ลองทำกันดูนะครับ ครั้งหน้าจะมาเพิ่มเติม ข้อมูลคำสั่งเพิ่มเติม ที่ link
s.teerapong@gmail.com
ฝึกการเขียนโปรแกรม ด้วย Robo MIND ภาค #2
ครับต่อไปก็ไม่ต้องพล่ามกันแล้วครับ เราจะลองมา เขียนโปแกรมกับเจ้า RoboMind กันดูนะครับ หากใครยังไม่ทราบว่า บทความนี้เป็นอย่างไรมาอย่างไร ก็ขอให้ กลับไปดู ฝึกการเขียนโปรแกรม ด้วย Robo MIND ซึ่งเป็นตอนแรกของบทความนี้นะครับ สำหรับในส่วนนี้เราจะทำอะไรบ้าง ตามนี้นะครับ
- Load and install RoboMind
- Example progam
Load and install RoboMind
ครับเราก็จะload เจ้า RoboMind มาติดตั้งบนเครื่องของเราเสียก่อนนะครับก่อนที่เราจะสามารถเขียน code กัน ให้ไปตาม link นี้นะครับ http://www.robomind.net/en/download.html ให้เลือก
นะครับเพราะเราใช้ windows กันเป็นส่วนใหญ่ หากท่าน ใด ใช้ operating system ตัวอื่นก็เลือกเอาเลยครับ ตามที่เราใช้
หลักจาก load ลงเครื่องเราแล้ว ก็ double click บน file ที่เรา load มาได้แล้วนะครับ [ น่าจะชื่อ ว่า RobomindSetup2.x.exe อะไรประมาณนี้ ครับ แล้ว ] แล้วก็รอจนกว่ามันจะดำเนินการเสร็จ ก็จะได้โปรแกรม ลงบนเครื่องเราแล้ว ครั้งแรกมันอาจจะ run ขึ้นมาเลย หลังจาก ลงเสร็จแล้ว พร้อมกับโปรแกรม ตัวอย่างสั้น ๆ
เราลองมาพจารณาการใช้งานพร้อมกับ ดูตัวอย่างไปด้วยกันเลยนะครับ
Example progam
Example โปรแกรม ที่แสดงขึ้นมาพร้อมกับการ แสดงหน้าจอ RoboMind นั้นจะอยู่ช่องด้านซ้ายมือ ส่วนขวามือจะเป็นที่แสดง การทำงานของ เจ้า ROBO และโลกของ มันนะครับน่าจะได้ตามรูป นี้
และมี code ดังนี้ครับ
<pre># Draw a square paintWhite() repeat(4) { forward(2) right() } stopPainting()ส่วนข้อความที่อยู่หลัง เครื่องหมาย ‘#’ เราไม่ต้องสนใจก็ได้นะครับ เพราะมันไม่ถูก นำไปหประมวลผลแต่อย่างได้ นอกจากเป็นการเขียน comment ไว้เป้นคำอธิบาย ครับ
ช่องด้านซ้ายจะเป็นที่สำหรับเราเอาไว้เขียน code ตามความต้องการของเรา ต่อไปนะครับ ตอนนี้เราลองมาดูกันว่า code ชุดนี้เราจะสั่งให้มันทำงานอย่างไร จากเครื่องมือที่โปรแกรมมีให้เราสังเกตุหน้าจอในส่วน ที่สองหรือด้านล่างนะครับเราจะเห็น ดังรูป
เป็นเครื่องมือที่ช่วยให้เรา สั่งให้ code ที่เราเขียนทำงาน ครับ เพียงแค่คลิกที่ปุ่มที่ มี icon สีเขียว หากโปรแกรมไม่มีข้อผิดพลาดอะไร เจ้า ROBO มันจะทำงานตามคำสั่ง ทีละคำสั่งจากบนลงล่างครับ ถ้าเรา พิจารณาจาก code ด้านซ้ายมือนะครับ จะเป็นการสั่งให้เจ้า ROBO มันระบายสีเป็น สี่เหลี่ยม แล้วหยุด โดยที่ เคลื่อนที่ เป็น loop 4 รอบ แต่ละรอบ จะเเคลื่อนไปข้างหน้า 2 step แล้วหัน ขวา ทำให้เกิดเป็น สี่เหลี่ยมเกิดขึ้น ลอง run ดูแล้ว พิจาณาว่าได้ตมที่ผมพูดไหว้หรือป่าว ฮิ ฮิ เดี๊ยวจะหาว่าโม้ เพราะผม run ดูแล้ว
สุดท้านมันก็จะมาหยุดตามรูป ครับ
สังเกตุจากเครื่องมือ นอกจากมันจะสั่ง run ได้แล้ว มันก็ยังสามารถที่ สั่งหยุดระหว่างการทำงานได้ หรือหยุดชั่วคราวแล้ว runต่อก็ได้ สุดหท้ายก็สามารถที่จะ เร่งหรือลด speed ของการทำงานได้ด้วย แหม เจ๋งเป๋งเลยว่ามะ
เราสามารถดูตัวอย่างอื่น ๆที่เขามีมาให้ด้วย ก็ไป คลิกที่ icon ตามรูปอยู่ด้านบนซ้ายนะครับ
แล้วจะได้หน้าต่างสำหรับการเลือก เปิดไฟล์ขึ้นมาครับ ลองเปิดและ run ดูนะครับ แล้วก็ลองดู code มันว่าพอเข้าใจใหม่นะครับ ในตอนสองนี้ผมยังคงไม่พูดถึงเรื่องการเขียน นะครับ แค่ดูว่า โปรแกรมมันทำอะไรได้บ้างอย่างไร ระหว่าง ที่เรา run โปรแกรมตัวอย่างเราก็ ลองดู function อื่น ดูนะครับว่ามีอะไรบ้างคราว ๆ
บนเมนู ด้านบนจะมีกลุ่มของ เมนูหลัก สำคัญอยู่ 2 กลุ่มคือ Edit และ View
– Edit ใช้สำหรับการจัดการกับ code ตามรูปนะครับ ความสารถก็เหมือน Text Editor ทั่วไป copy past select ค้นหาและ วางแทน อะไรพวกเนี๊ยะก็พอมีให้สามารถแก้ไข code ได้ง่ายครับ
– View ให้สำหรับจัดการกับ หาจอแสดงผลครับ ก็ zoom in , zoom out กำหนดการแสดง grid การแสดง radar หรือให้ capture screen ก็ OK นะ
มาดูเพิ่มเติมอีกนิดนะครับ ในหน้า Editor มันจะมี line number ใหัเอาให้อ่าน code ง่าย และยังสามารถแสดง error ที่เกิดขึ้นที่ บรรทัดนั้น ๆ ครับ และแสดงได้ด้วยว่ามันมี error อะไร
ก็น่าจะเป็น ภาพทั้งหมดของเจ้า โปรแกรม RoboMind นะครับ เรื่องการเขียนไว้ต่อกันคราวหน้านะครับ เพราะมันยาวเกินไปแล้ว หากต้องการอ่านล่วงหน้าหรือดูการเขียน ก็เชิญท่านไปสัมผัสกับ ตัวอย่างที่เข้าเตรียมไว้ให้เลยนะครับ ตาม linke นี้เลย
– ส่วน เรื่อง คำสั่งต่าง ๆ หากต้องการอ่านเพิ่มเตอมก็เชิญตาม link นี้เลยครับ http://www.robomind.net/en/docProgrammingStructures.htm
การฝึกเขียนโปรแกรมด้วย Robo ind ภาค #3 (ตัวอย่างสนุก ๆ )
ก็ได้แต่หวังว่าบทความนี้จะเป็นประโยชน์ต่อ ครูอาจารย์และเด็ก ๆ ที่ต้องการ จะเรียนรู้เรื่องการเขียนโปรแกรม ไม่มากก็น้อยหล่ะครับ หากมีอะไร อยากให้เพิ่มเติมก็ ติและชมมาได้นะครับ ถือว่าเป็นการแรกเปลี่ยนความรู้ กันครับ
s.teerapong@gmail.com
teerapong Sontayaman










