2016-12-04 86 views
2


首先 - 我已經通過類似的前瞻性的問題看,但他們並沒有解決我的問題,這是沒有重複的(我希望)。
我正在用Arduino Nano來構建和編程機器人,它應該可以解決迷宮問題。它被放置在迷宮中的某個地方,然後必須找到一件物品。下一次它應該直接進入該項目(它不一定是最短的路,但不允許死路一條)。
沒有必要知道整個迷宮因爲只要他有一個辦法,該項目是好的。正如我所說,我不需要最短的路。
迷宮是2D,我只是把黑色磁帶上的白色表和機器人應該使用線傳感器跟隨線。
有沒有其他傳感器來定位自己。首先,我想到了製作一個2D陣列,迷宮中的每個領域都是一個領域。但是由於它只是一個普通的線傳感器,機器人並不知道一條直線是一個還是兩個字段,整個事情都不起作用。
我也試過DFS或類似的東西,但在這裏類似的問題。迷宮是圓形的,機器人應該怎麼知道節點已經被找到了,它是一樣的?
如果有人有想法,這將是很好的!如何繪製迷宮作爲機器人?

+0

「機器人應該使用*線傳感器來跟蹤線*。」我只是好奇 - 線傳感器如何對2或3路分裂做出反應? –

+0

它有3個獨立的傳感器。每一個都有不同的價值,只有中間的一個在線。如果在左邊或右邊有一個新的方法啓動其中一個傳感器,左邊或右邊將會看到一個黑色,同時懸停在該線上,這樣就會注意到分割 – po0l

+0

如何隨機選擇分支? – melpomene

回答

0

雖然方向有點模糊,但可以通過使用決定。決定必須是可重現的。它可以通過一個類來表示:

public class Decision { 
    boolean[] directions = new boolean[2]; // 0 = left, 1 = straight, 2 = right 
    // at least 2 of them should be true or it is no decision 
    int path; // 0-2 to mark the current path 
} 
  1. 創建的決策堆棧。

  2. 如果只有一個開頭(後面不計,並在以後處理)可能的方向,再往前走,直到你遇到的第一個決定。

  3. 推棧上所有可能的方向決定。

  4. 設置path第一種可能的方向和移動的方式。

  5. 如果你結束了另一項決定:繼續在3

    如果您發現該令牌:中止,你發現了沒有死角可再生方式。

    如果這是一個死衚衕:返回到先前的決策節點(第一個一回的方式),並與6

  6. 繼續流行的決定,並嘗試下一個可能的方向(設置新路徑和推動決策),並在5

    繼續除非你已經嘗試了所有的方向,然後搬回另一項決定,並與6

    繼續。如果沒有(在特殊情況下,上面提到的更多的決定,我們一開始就走錯了方向):繼續前進,直到你遇到第一個決定並繼續這意味着你需要另一個布爾變量來表明你是否應該在開始時向右後退。

    left回來時你必須要小心,並且想嘗試straight接下來你必須左轉,不要直行。所以有一點計算涉及。

如果您在開始時以錯誤的方式開始,該算法對於循環形式的決策有問題。我認爲這可以通過設置一個上邊界來逃脫,例如如果您還沒有找到令牌並且遇到了30個決策節點(向前),那麼您可能正在繞圈運行,因此請回頭開始,現在不要按增加順序嘗試方向,而應按降序嘗試它們。

+0

謝謝!這可能正是我所期待的。在步驟6中,「彈出決定」 - 我想不是彈出您決定的意思,而是彈出方向(移除最後一個路徑並設置新路徑到下一個可能的方向)? – po0l

+0

@ po0l是的,你可以將它設置爲下一個可能的方向,並且只有在還有任何需要探索的地方時再次推送。您必須保持其他方面的決定,否則如果它是死路一條,您可能會失去追溯的方向,所有決策都是以他們第一次遇到的方式爲導向的,所以您還需要決定是否知道您正在探索的路徑就在之前以及如何繼續。 – maraca