Exploring Maze Environments: A LiDAR robot Autonomous Mapping Algorithm

Exploring Maze Environments: A LiDAR robot Autonomous Mapping Algorithm

about this blog

ในงานนี้จะกล่าวถึงการออกแบบ algorithm สำหรับการสำรวจแผนที่ maze ขนาด 10 * 10 โดยแต่ละช่องจะมีขนาด 30 * 30 cm มีลักษณะเป็นสี่เหลี่ยมจัตุรัส ทั้งหมดนี้จะใช้ภาษา Python ในการเขียน

วางแผนการทำงานร่วมกันกับส่วนอื่นๆ

ในส่วนของวงกลม 3 ตัว จะเป็นตัวแทนของ algorithm ที่จะมีส่วนสำคัญในการทำการสำรวจแผนที่ 1.LidarDetect 2.ExploringMaze 3.Control

  1. LidarDetect จะส่งข้อมูลมาที่ 2. เป็น list = [F, R, L] ซึ่งคือตำแหน่งของกำแพงที่ lidar สามารถตรวจจับได้ในแต่ละตำแหน่งของ Box
  2. ExploringMaze จะส่งข้อมูลไปยัง 3. เป็นคำสั่งในการเคลื่อนที่ control = [“ccw”, “cw”, “forward”]
  3. Control จะทำหน้าที่ในการสื่อสารกับหุ่นเพื่อควบคุมให้หุ่นยนต์เคลื่อนที่

สำหรับส่วนที่รับผิดชอบจะเป็น 2. ExploringMaze ซึ่งจะเป้นตัวที่ทำหน้าที่ในการสำรวจพื้นที่ของ maze โดยมีเงื่อนไขคือต้องสำรวจให้ครบทุก Box และต้องสามารถเขียนข้อมูลลงไฟล์ csv ได้เพื่อรอ ส่วนสุดท้ายนำข้อมูลไปใช้ คือส่วนของการ solve maze โดยข้อมูลที่ต้องการคือ “(i,j)”,E,W,N,S

ในส่วนของการออกแบบ algorithm สำหรับการสำรวจแผนที่

  1. ส่วนที่ 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. ตัวอย่างการทำงาน

One comment

  1. Pingback: FRA641 Class project :Solved Maze – Human-Computer Interface Lab

Comments are closed.