所以我有一个机器人,它有五个红外传感器(最左边,左边中间,中间,右边中间,最右边),我有一个5*5的方阵,我想让我的机器人导航。
我的机器人可以采取的行动是:-Forward(使用3个内部传感器,即左-中,中,右-中) -turnleft -turnright -turnaround
我知道机器人在网格中的初始位置和它的方向(它面对的方向,即北、南、东、西)。
现在我想要想出一个算法,当我的机器人的初始位置是(0,0),方向是北,然后当我给我的机器人坐标(2,1)时,它应该首先turnRight,然后向左移动两列,然后左转,向上移动一列到达坐标(2,1)。
有没有能做到这一点的算法?我自己想出了一个算法,但它相当长(200+ loc),所以我正在寻找一个有效的算法。
附注:机器人不知道坐标在网格中的位置,它只有传感器来检测行和列以及那里的横截面,并根据这些做出判断。任何帮助都将不胜感激
发布于 2021-09-14 09:49:00
让我总结一下:
你的机器人只能在四个方向上移动(上、下、左、右)。
M =
+---------+
| E|
| |
| |
| |
| S |
+---------+
Robot start position is S(0,2)
End position is E(4,4)从S到E具有相同长度的路径很少。
+---------+ +---------+ +---------+ +---------+
| E| | E| | E| | E|
| +| | +| | +| | + +|
| +| | +| | + +| | + |
| +| | + +| | + | | + |
| S + +| | S + | | S + | | S + |
+---------+ +---------+ +---------+ +---------+ . . .关键是所有的路径都是5(+1)步长。所以你可以很容易的计算出这些值:
S = M[0][2] (M[i][j], Si = 0, Sj = 2)
E = M[4][4] (M[i][j], Ei = 4, Ej = 4)
up_or_down = Ei-Si = 4-0 = 4 // sign is positive (so UP)
if (up_or_down > 0) then UP
else DOWN
left_or_right = Ej-Sj = 4-2 = 2 // sign is positive (so RIGHT)
if (left_or_right > 0 then RIGHT
else LEFT你的机器人应该走的最终路径是:
4xUP
2XRIGHTUP和RIGHT的任何组合都会起作用。
如果机器人可以沿对角线运行,则进行优化
在我们的例子中,它将是:
+---------+
| E|
| x|
| x|
| x |
| S |
+---------+总共是3(+1)步。
使用前面的公式,我们得到了4个UP和2个权利。所以我们有:
path = 4*U + 2*R
path = U+U+U+U+R+R
// let's combine U and R as much as possible
path = U + R + U + R + U + U
\ / \ / // combine U+R into DUR (diagonal-up-right)
path = DUR + DUR + U + U // it gives us 3(+1) stephttps://stackoverflow.com/questions/69170884
复制相似问题