เป็นวิธีที่มีประสิทธิภาพในการเยี่ยมชมทุกพื้นที่ที่เข้าถึงได้ในตารางที่มีอุปสรรคที่ไม่รู้จักคืออะไร?


13

ฉันกำลังพยายามสร้างแผนที่ของอุปสรรคในพื้นที่กริด 2D แบบหยาบโดยใช้การสำรวจ ฉันค้นหาสิ่งกีดขวางโดยพยายามย้ายจากพื้นที่หนึ่งไปยังพื้นที่ที่อยู่ติดกันและหากสิ่งนั้นล้มเหลวก็จะมีสิ่งกีดขวางในพื้นที่ปลายทาง (ไม่มีแนวคิดของเซ็นเซอร์ระยะไกลในปัญหานี้)

ตัวอย่างตาราง http://www.eriding.net/resources/general/prim_frmwrks/images/asses/asses_y3_5d_3.gif (ตัวอย่าง)

กระบวนการนี้เสร็จสมบูรณ์เมื่อมีการเยี่ยมชมช่องสี่เหลี่ยมที่เข้าถึงได้ทั้งหมด กล่าวอีกนัยหนึ่งช่องว่างบางอย่างอาจไม่สามารถเข้าถึงได้อย่างสมบูรณ์แม้ว่าจะไม่มีสิ่งกีดขวางเพราะล้อมรอบ คาดว่าจะเป็นแบบนี้

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

ในวิธีการที่ซับซ้อนมากขึ้นเป็นสิ่งที่เหมาะสมในการทำดูเหมือนว่าจะมีการสลายตัวของเซลล์ Boustrophedon
Boustrophedon การสลายตัวของเซลล์

อย่างไรก็ตามฉันไม่สามารถหาคำอธิบายที่ดีเกี่ยวกับอัลกอริธึมการสลายตัวของเซลล์ Boustrophedon (นั่นคือคำอธิบายที่สมบูรณ์ในคำง่าย ๆ ) มีทรัพยากรเช่นเป็นคนนี้ , หรือนี้เพิ่มเติมทั่วไปเกี่ยวกับการสลายตัวของเซลล์ในแนวตั้งพวกเขาไม่ได้มีความเข้าใจมากในขั้นตอนวิธีการระดับสูงหรือระดับต่ำโครงสร้างข้อมูลที่เกี่ยวข้อง แต่

ฉันจะเยี่ยมชม (แผนที่) กริดนี้อย่างมีประสิทธิภาพได้อย่างไร ถ้ามีฉันต้องการอัลกอริทึมที่ทำงานได้ดีกว่าเทียบกับจำนวนรวมของกริดสแควร์ ( เช่นดีกว่าสำหรับกริด )O(n2)O ( n 4 ) n nO(n4)nn


ปัญหาที่น่าสนใจมาก เพื่อความชัดเจนคุณได้กำหนด "ประสิทธิภาพ" เมื่อมีการเยี่ยมชมเซลล์ใด ๆ ซ้ำ ๆ ให้น้อยที่สุดหรือไม่?
DaemonMaker

นั่นอาจเป็นวิธีหนึ่งในการพูด จริง ๆ ฉันพยายามหลีกเลี่ยงอัลกอริทึมที่เป็นหรือแย่กว่านั้นตามจำนวนรวมของกำลังสองของตาราง O(n2)
เอียน

ฉันคิดว่านี่เป็นปัญหาที่คล้ายกันกับที่ต้องเผชิญกับซอฟต์แวร์การตัดเฉือน CNC ซึ่งต้องเอาวัสดุออกโดยไปที่เครื่องมือตัด
Rocketmagnet

@Rocketmagnet: ไม่มากเนื่องจากเครื่อง CNC รู้ว่า "อุปสรรค" นิรนัยในขณะที่ฉันกำลังตรวจจับพวกเขาในขณะที่ฉันย้าย
เอียน

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

คำตอบ:


11

การสลายตัวของเซลล์ Boustrophedon เป็นเพียงการแบ่งสภาพแวดล้อมออกเป็นพื้นที่ซึ่งสามารถครอบคลุมได้อย่างมีประสิทธิภาพโดยเส้นทาง boustrophedon การสลายตัวแบบสี่เหลี่ยมคางหมูจะทำและสามารถทำได้โดยใช้อัลกอริทึมเส้นกวาด ดู [Choset 2000], เว็บไซต์ นี้หรือ (ฉันแนะนำ!) หนังสือดีเลิศ "เรขาคณิตเชิงคำนวณ" โดย Mark de Berg, และ al สำหรับคำอธิบายที่สมบูรณ์เกี่ยวกับโครงสร้างข้อมูลและอัลกอริธึมที่ต้องการ

Choset, โฮวี่ "ความครอบคลุมของพื้นที่ที่เป็นที่รู้จัก: การสลายตัวของเซลล์ Boustrophedon" หุ่นยนต์อิสระ , 2000


ตัวอย่างเช่นพิจารณาชุดของอุปสรรคเป็นขอบและจุดยอด สมมติว่าสภาพแวดล้อมนั้นล้อมรอบด้วยรูปหลายเหลี่ยมพิเศษ เรามีสิ่งต่อไปนี้ ในการย่อยสลายพื้นที่นี้เราเพียงแค่เพิ่มขอบแนวตั้งระหว่างทุกจุดยอดและเส้นที่ใกล้ที่สุดหรือจุดสุดยอด

เพื่อให้บรรลุผลในรหัสคุณต้องการเพียงการทดสอบการตัดกันของส่วนบรรทัดรายการเรียงขอบและรายการเรียงลำดับของจุดยอด

  1. จากทุกจุดยอดจากซ้ายไปขวาvi
  2. สร้างเส้นแนวตั้งที่แต่ละอันขยายจนขอบแรกหรือจุดสุดยอดตัดกันlivi
  3. ที่จุดตัดแต่ละจุดให้สร้างจุดสุดยอดใหม่

เมื่อทำสิ่งนี้เสร็จแล้วชุดของขอบและจุดยอดใหม่จะล้อมรอบรูปสี่เหลี่ยมคางหมูเท่านั้น แต่ฉันเน้นว่าคุณไม่สามารถทำสิ่งนี้ทางออนไลน์ได้ (โดยไม่ทราบล่วงหน้าเกี่ยวกับอุปสรรค) หากคุณต้องการความครอบคลุมที่แข็งแกร่งโดยที่คุณไม่รู้ตัวคุณอาจดูที่ "อัลกอริธึมบั๊ก" นี่เป็นอัลกอริธึมที่ง่ายโดยสมมติว่าสภาพแวดล้อมนั้นล้อมรอบ


  1. จากตำแหน่งเริ่มต้นให้เลื่อนขึ้นและไปทางซ้ายจนกระทั่งถึงมุมบนซ้ายของสภาพแวดล้อม หากคุณพบอุปสรรคก่อนคุณต้องเดินทางไปรอบ ๆ คุณรู้ว่าบางสิ่งบางอย่างเป็นอุปสรรคถ้ามันสามารถ circumnavigated (ชนและย้าย)

  2. จากด้านบนซ้ายให้เลื่อนไปทางขวาจนกว่าคุณจะพบกับขอบเขต จากนั้นเลื่อนลงและไปทางซ้าย (เรากำลังทำ boustrophedon ของพื้นที่ทั้งหมด)

  3. เมื่อคุณอยู่บนเส้นด้านซ้ายขวาและเจอสิ่งกีดขวางคุณมีสองทางเลือก (i) เราสามารถแล่นไปรอบ ๆ จนกว่าเราจะไปถึงเส้นด้านซ้ายขวาที่เราพยายามครอบคลุมแล้วดำเนินการต่อ (ii) เราสามารถพลิกกลับและครอบคลุมเส้นซ้ายขวาใหม่จนกว่าเราจะพบทางผ่านอุปสรรคหรือจบลงในสถานการณ์นี้อีกครั้ง ฉันจะอธิบาย

ทางด้านซ้ายเราเคลื่อนที่ไปรอบ ๆ สิ่งกีดขวางจนกว่าเราจะสามารถกลับไปที่ "เส้น" ที่เรากำลังพยายามติดตาม ทางด้านขวาเรายังคงครอบคลุมพื้นที่ (เล็กกว่า) ที่ด้านหนึ่งของสิ่งกีดขวาง

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

โปรดทราบว่าสิ่งนี้จะกำหนดการสลายตัวของ boustrophedon ของคุณในรูปแบบออนไลน์ : คุณครอบคลุมพื้นที่ระหว่างสิ่งกีดขวางหรือระหว่างสิ่งกีดขวางและเขตแดน

อย่างไรก็ตามเท่าที่ฉันรู้วิธีแรกง่ายต่อการวิเคราะห์ อัลกอริทึมที่ซับซ้อนมากขึ้น (เช่น BFS เป็นต้น) ถูกเลือกเนื่องจากสภาพแวดล้อมไม่ จำกัด (คุณไม่ต้องการใช้ตลอดไปเพื่อค้นหาขอบเขต) หรือมีสิ่งกีดขวางที่น่ารังเกียจอย่างแท้จริงในการแบ่งส่วนสภาพแวดล้อม ทำไมสิ่งนี้ถึงไม่ดี? ดูตัวอย่างนี้:

การย้ายซ้าย - ขวาจากนั้นวนสิ่งกีดขวางแต่ละครั้งจะสร้างทางที่ครอบคลุมมากเกินไปของชิ้นส่วนเล็ก ๆ ระหว่างแต่ละสิ่งกีดขวาง ในความเป็นจริงหากไม่มีการวางแผนเส้นทางทั่วโลกคุณสามารถทำให้สิ่งนี้เลวร้ายเท่ากับความละเอียดของกริดของคุณโดยการวางคอลัมน์เหล่านี้กว้าง 1 px สูงเท่ากับสภาพแวดล้อมทั้งหมดและแยก 1 px จากนั้นคุณจะต้องเคลื่อนที่ไปรอบ ๆ สิ่งกีดขวางทุกครั้งที่คุณโดนมัน

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


อัปเดต: ฉันต้องลบภาพ (ไม่ใช่ https) และจะโพสต์สิ่งนี้ซึ่งมักจะใช้ในแอปพลิเคชันที่ใช้งานได้จริง http://www.cs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/yamauchi_frontiers.pdf


เพียงแค่หาคำอธิบาย (ในแง่ง่าย ๆ ) ของอัลกอริธึมการสลายตัวของ Boustrophedon ก็เพียงพอแล้ว ความล้มเหลวนั้นคำอธิบายง่ายๆของอัลกอริทึมที่มีประสิทธิภาพใกล้เคียงกันนั้นใช้ได้
เอียน

ฉันได้เพิ่มตัวอย่างการสลายตัวของ boustrophedon ง่าย ๆ
Josh Vander Hook

3

ในท้ายที่สุดผมพบว่าวิธีที่ดีที่สุดที่จะทำเช่นนี้คือการใช้แนวคิดที่เรียบง่ายมาก: เติมน้ำท่วม ฉันใช้วิธีวนซ้ำตามสแต็กแทนตัวเลือกแบบเรียกซ้ำและแก้ไขมันสำหรับพื้นที่ทางกายภาพโดยใช้การค้นหาแบบ A * เพื่อค้นหาเส้นทางจากตำแหน่งปัจจุบันไปยังตำแหน่งถัดไปในสแต็ก (โดยใช้เฉพาะกริดสี่เหลี่ยมที่มีอยู่แล้ว ได้รับการเยี่ยมชมเนื่องจากฉันรับประกันว่าจะมีเส้นทางระหว่างพวกเขา)

ประสิทธิภาพดูเหมือนสมเหตุสมผลพอสมควร


เช่นเดียวกับคุณคุณได้ค้นพบการสำรวจตามแนวชายแดนcs.cmu.edu/~motionplanning/papers/sbp_papers/integrated1/และมันใช้งานได้ดีจริง ๆ
smirkingman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.