about this blog
ในงานนี้จะกล่าวถึงการออกแบบ algorithm สำหรับการสำรวจแผนที่ maze ขนาด 10 * 10 โดยแต่ละช่องจะมีขนาด 30 * 30 cm มีลักษณะเป็นสี่เหลี่ยมจัตุรัส ทั้งหมดนี้จะใช้ภาษา Python ในการเขียน
วางแผนการทำงานร่วมกันกับส่วนอื่นๆ
ในส่วนของวงกลม 3 ตัว จะเป็นตัวแทนของ algorithm ที่จะมีส่วนสำคัญในการทำการสำรวจแผนที่ 1.LidarDetect 2.ExploringMaze 3.Control
- LidarDetect จะส่งข้อมูลมาที่ 2. เป็น list = [F, R, L] ซึ่งคือตำแหน่งของกำแพงที่ lidar สามารถตรวจจับได้ในแต่ละตำแหน่งของ Box
- ExploringMaze จะส่งข้อมูลไปยัง 3. เป็นคำสั่งในการเคลื่อนที่ control = [“ccw”, “cw”, “forward”]
- Control จะทำหน้าที่ในการสื่อสารกับหุ่นเพื่อควบคุมให้หุ่นยนต์เคลื่อนที่
สำหรับส่วนที่รับผิดชอบจะเป็น 2. ExploringMaze ซึ่งจะเป้นตัวที่ทำหน้าที่ในการสำรวจพื้นที่ของ maze โดยมีเงื่อนไขคือต้องสำรวจให้ครบทุก Box และต้องสามารถเขียนข้อมูลลงไฟล์ csv ได้เพื่อรอ ส่วนสุดท้ายนำข้อมูลไปใช้ คือส่วนของการ solve maze โดยข้อมูลที่ต้องการคือ “(i,j)”,E,W,N,S
ในส่วนของการออกแบบ algorithm สำหรับการสำรวจแผนที่
- ส่วนที่ 1 การรับรู้ของโปรแกรม : เริ่มจากการทำแผนที่สำหรับการสร้างเป็นตำแหน่งอ้างอิงให้กับ algorithm เพื่อให้ตัว algorithm สามารถเข้าใจได้ว่าตัวเองกำลังทำอะไรอยู่ มันจะต้องเข้าใจถึงตำแหน่งที่อยู่ จุดที่อยู่ เส้นที่อยู่ และ box ที่อยู่ ซึ่งกำหนดเป็น Ai,j
- code สำหรับการสร้างพื้นที่ 10 * 10 และการระบุตำแหน่งของจุด และ id ของ box
code สำหรับการทำแผนที่ทั้งหมดจะเขียนอยู่ใน class build_map():
- สร้าง def สำหรับการเรียก line box เพื่อใช้ในการสร้างแผนที่ หรือเป็นการวาดเส้นหรือระบายสีทับที่ตำแหน่งที่ต้องการ
- เมื่อระบุ Ai,j ที่ต้องการก็จะสามารถระบุสำที่ต้องการขนาดที่ต้องการได้เพื่อระบายสีใน box ที่เลือกตามต้องการ ใน def select_cubic
- ต้องสร้าง def สำหรับการระบุว่าที่ตำแหน่งของ box นั้นๆ มี id เป็นอะไร Ai,j
- สร้าง def สำหรับการใช้สร้างตัวแทนของกำแพงแต่ละด้าน
2. ส่วนที่ 2 : การทำงานของโปรแกรม
- เริ่มจากการเขียน algorithm สำหรับการลงสนามครั้งแรกสำรวจที่ box แรกที่เข้า
โปรแกรมจะเริ่มการทำงานจากการสร้าง list และ dictionary ที่จะเป็นชนิดของการเก็บข้อมูลหลักใน algorithm นี้ ส่วนสำคัญคือลำดับในการจดจำข้อมูล ลำดับการใช้ เส้นทางที่เคลื่อนที่ไปแล้ว ตำแหน่งที่มีทางแยก และการเชื่อมต่อของแต่ละ box ในที่นี้ผมจะทดสอบด้วยการป้อน input จากผู้ใช้เพื่อเป็นการจำลองการรับข้อมูลจาก LidarDetect
- function ที่สำคัญสำหรับการใช้ในการสำรวจแผนที่
function สำหรับการใช้หาว่าในครั้งนั้นๆหุ่นยนต์หันหน้าไปทางทิศไหนของทิศแผนที่ def find_dir_robot():
function สำหรับการหาว่าในครั้งนั้นๆมีกำแพงอยู่ด้านไหนของทิศแผนที่ def compare_dir_find_wall()
function สำหรับการหาว่าในครั้งนั้นๆหุ่นสามารถเคลื่อนที่ไปที่ box ไหนได้บ้าง
function สำหรับการหาว่าต้องเคลื่อนไปทางไหน หรือสั่งคำสั่ง control แบบไหนในครั้งนั้นๆ
- เมื่อจบในรอบแรกแล้วจะสามารถเขียนเป็น while loop ได้จนกว่าจะครบตามเงื่อนไข
3. ตัวอย่างการทำงาน
Pingback: FRA641 Class project :Solved Maze – Human-Computer Interface Lab