Cách hiệu quả để truy cập vào mọi không gian có thể tiếp cận trên lưới với các chướng ngại vật chưa biết là gì?


13

Tôi đang cố gắng tạo một bản đồ về các chướng ngại vật trong một không gian lưới 2D khá thô, sử dụng thăm dò. Tôi phát hiện chướng ngại vật bằng cách cố gắng di chuyển từ không gian này sang không gian liền kề và nếu thất bại thì sẽ có một trở ngại trong không gian đích (không có khái niệm về cảm biến đo xa trong vấn đề này).

lưới ví dụ http://www.eriding.net/resource/general/prim_frmwrks/images/asses/asses_y3_5d_3.gif (ví dụ)

Quá trình hoàn tất khi tất cả các ô vuông có thể tiếp cận đã được truy cập. Nói cách khác, một số không gian có thể hoàn toàn không thể truy cập được ngay cả khi chúng không gặp trở ngại vì chúng bị bao quanh. Điều này được mong đợi.

Trong trường hợp đơn giản nhất, tôi có thể sử dụng thuật toán DFS , nhưng tôi lo lắng rằng việc này sẽ mất quá nhiều thời gian để hoàn thành - robot sẽ mất nhiều thời gian để quay lại hơn là khám phá lãnh thổ mới. Tôi hy vọng điều này sẽ đặc biệt có vấn đề khi cố gắng tiếp cận các ô vuông không thể truy cập được, bởi vì robot sẽ làm cạn kiệt mọi lựa chọn.

Trong phương pháp phức tạp hơn, điều thích hợp để làm dường như là phân hủy tế bào Boustrophedon .
Phân hủy tế bào Boustrophedon

Tuy nhiên, tôi dường như không thể tìm thấy một mô tả hay về thuật toán phân rã tế bào Boustrophedon (nghĩa là một mô tả hoàn chỉnh theo thuật ngữ đơn giản). Có tài nguyên như cái này , hoặc một tổng quát hơn này trên phân hủy tế bào dọc nhưng họ không cung cấp cái nhìn sâu sắc hơn vào các thuật toán cao cấp cũng không phải là cấu trúc dữ liệu ở mức độ thấp có liên quan.

Ôi(n2)Ôi(n4)n*n


Vấn đề rất thú vị. Để rõ ràng, bạn có định nghĩa "hiệu quả" là số lần truy cập lặp lại ít nhất vào bất kỳ ô nào không?
DaemonMaker

Ôi(n2)

Tôi đoán đây là một vấn đề tương tự như phần mềm gia công CNC phải đối mặt, phải loại bỏ vật liệu bằng cách truy cập nó bằng công cụ cắt.
Rocketmagnet

@Rocketmagnet: không hẳn, vì máy CNC biết "chướng ngại vật" một tiên nghiệm , trong khi tôi đang phát hiện ra chúng trong khi tôi di chuyển.
Ian

Vâng, đây là một tìm kiếm trực tuyến về một môi trường bị ràng buộc nơi robot biết vị trí của nó. Số lượng, vị trí và hình dạng của chướng ngại vật hoàn toàn không xác định - chúng có thể không lồi.
Ian

Câu trả lời:


11

Sự phân hủy tế bào Boustrophedon chỉ đơn giản là phân chia một môi trường thành các khu vực có thể được bao phủ một cách hiệu quả bằng con đường boustrophedon. Một phép phân tách hình thang sẽ thực hiện và có thể được thực hiện bằng thuật toán quét dòng. Xem [Choset 2000], trang web này , hoặc (tôi khuyên bạn nên!) Cuốn sách tuyệt vời "Hình học tính toán" của Mark de Berg, et. al, cho một mô tả đầy đủ về các cấu trúc dữ liệu và thuật toán cần thiết.

Lựa chọn, Howie. "Phạm vi của các không gian đã biết: Sự phân hủy tế bào Boustrophedon" Robot tự trị , 2000.


Ví dụ, coi tập hợp các chướng ngại vật là các cạnh và đỉnh. Giả sử môi trường cũng bị giới hạn bởi một đa giác đặc biệt. Chúng tôi có một cái gì đó như sau. Để phân tách không gian này, chúng ta chỉ cần thêm các cạnh dọc giữa mỗi đỉnh và đường hoặc đỉnh gần nhất.

Để thực hiện điều này trong mã, bạn chỉ cần kiểm tra giao cắt phân đoạn dòng, danh sách các cạnh được sắp xếp và danh sách các đỉnh được sắp xếp.

  1. vTôi
  2. tôiTôivTôi
  3. Tại mỗi ngã tư, tạo một đỉnh mới.

Khi điều này được thực hiện, tập hợp các cạnh và đỉnh mới chỉ bao gồm các hình thang. Nhưng tôi nhấn mạnh, bạn không thể làm điều này trực tuyến (không có kiến ​​thức trước về những trở ngại). Nếu bạn muốn thực hiện bảo hiểm mạnh mẽ mà không có kiến ​​thức trước, bạn có thể xem xét "thuật toán lỗi". Cụ thể, đây là một thuật toán đơn giản, giả sử môi trường bị giới hạn.


  1. Từ vị trí bắt đầu, di chuyển lên và sang trái cho đến khi bạn đến góc trên bên trái của môi trường. Nếu bạn gặp một chướng ngại vật đầu tiên, bạn phải đi du lịch xung quanh nó. Bạn biết một cái gì đó là một trở ngại nếu nó có thể được tuần hoàn (va đập và di chuyển).

  2. Từ phía trên bên trái, di chuyển sang phải cho đến khi bạn gặp phải ranh giới. Sau đó di chuyển xuống và rời khỏi (Chúng tôi đang thực hiện một âm thanh của toàn bộ không gian).

  3. Khi bạn ở trên đường bên trái và gặp chướng ngại vật, bạn có hai lựa chọn. (i) Chúng tôi có thể đi vòng quanh cho đến khi chúng tôi đến được đường bên trái mà chúng tôi đang cố gắng thực hiện, sau đó tiếp tục. (ii), Chúng tôi có thể quay lại và che một đường bên trái mới cho đến khi chúng tôi tìm thấy cách vượt qua chướng ngại vật hoặc kết thúc trong tình huống này một lần nữa. Tôi sẽ minh họa.

Ở bên trái, chúng tôi di chuyển xung quanh chướng ngại vật cho đến khi chúng tôi có thể quay lại "lằn ranh" mà chúng tôi đang cố gắng đi theo. Ở bên phải, chúng tôi tiếp tục bao phủ khu vực (nhỏ hơn) ở một bên của chướng ngại vật.

Ưu điểm của phương pháp đầu tiên là bạn luôn vạch ra hoàn toàn chướng ngại vật trước khi đưa ra quyết định về cách khắc phục nó, do đó bạn có thể đi theo con đường ngắn hơn. Ưu điểm của phương pháp thứ hai là bạn không cần phải vượt qua chướng ngại vật, bạn chỉ có thể tiến hành bao phủ khu vực bạn đang ở.

Lưu ý rằng điều này xác định phân tách boustrophedon của bạn theo cách trực tuyến : Bạn bao phủ khu vực giữa các chướng ngại vật hoặc giữa các chướng ngại vật và ranh giới.

Tuy nhiên, theo tôi biết, phương pháp đầu tiên dễ phân tích hơn. Các thuật toán phức tạp hơn (như BFS, v.v.), được chọn vì môi trường không bị ràng buộc (bạn không muốn mất mãi mãi để tìm ranh giới) hoặc có một trở ngại thực sự khó chịu trong cách phân vùng môi trường. Tại sao điều này là xấu? nhìn vào ví dụ này:

Di chuyển trái phải, sau đó khoanh tròn mỗi trở ngại sản xuất cách quá nhiều trang bìa của các phần nhỏ giữa mỗi trở ngại. Trên thực tế, không có quy hoạch đường dẫn toàn cầu, bạn có thể làm điều này tệ như độ phân giải của lưới bằng cách đặt các cột này rộng 1 px, cao bằng toàn bộ môi trường và cách nhau 1 px. Sau đó, bạn sẽ phải di chuyển xung quanh chướng ngại vật mỗi khi bạn chạm vào nó.

Đây là lý do tại sao tôi hỏi nếu bạn có một số ý tưởng về nơi bạn ở trong môi trường hoặc có thể lập kế hoạch đường dẫn toàn cầu. Nhưng cuộc thảo luận trực tuyếnngoại tuyến và các thuật toán tối ưu cho điều này không phải là điều bạn thực sự muốn.


Cập nhật: Tôi đã phải xóa các hình ảnh (không phải https) và sẽ đăng cái này thường được sử dụng trong các ứng dụng thực tế trong thực tế. http://www.cs.cmu.edu/~motionplanning/ con / sbp_ con / integrated1 / yamauchi_frontiers.pdf


Chỉ cần tìm một mô tả (theo thuật ngữ đơn giản) của thuật toán phân rã Boustrophedon là đủ. Không, mô tả đơn giản về một thuật toán có hiệu suất tương tự là tốt.
Ian

Tôi đã thêm một ví dụ phân tách boustrophedon đơn giản.
Josh Vander Hook

3

Cuối cùng, tôi thấy rằng cách tốt nhất để làm điều này là sử dụng một khái niệm rất đơn giản: Flood Fill . Tôi đã sử dụng cách tiếp cận lặp dựa trên ngăn xếp thay vì tùy chọn đệ quy và sửa đổi nó cho không gian vật lý bằng cách sử dụng tìm kiếm A * để tìm đường dẫn từ vị trí hiện tại đến vị trí tiếp theo trong ngăn xếp (chỉ sử dụng các ô vuông đã có đã được truy cập, vì tôi đảm bảo có một con đường giữa chúng).

Hiệu quả có vẻ khá hợp lý.


Giống như tôi, bạn đã khám phá khám phá dựa trên biên giới cs.cmu.edu/~motionplanning/ con / sbp_ con / integrated1 / và nó thực sự hoạt động tốt
smirkingman
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.