C++ 按动态条件/约束过滤图形

C++ 按动态条件/约束过滤图形,c++,graph-theory,boost-graph,C++,Graph Theory,Boost Graph,我正在研究一种可以为机器人规划双向的图形结构。 但不仅是双向的,所以它可以从A到B,B到A,还考虑了方向。因此,在某些情况下,机器人只能沿边缘向后移动 请参见此示例: 从4开始,我可以前进到1。 但是从1开始到4,我需要走路径1>2>3>4,其中3是一个节点,我可以在这里改变方向。就像一辆单向倒车的汽车,在停车场掉头 所以我有一些限制 我只能打开特定节点 规划节点时需要考虑机器人的方向(节点有方向) 一个想法是在规划之前使用机器人的当前方向和目标的方向过滤图形。但我还不确定这是否可行 我的

我正在研究一种可以为机器人规划双向的图形结构。
但不仅是双向的,所以它可以从A到B,B到A,还考虑了方向。因此,在某些情况下,机器人只能沿边缘向后移动

请参见此示例:

从4开始,我可以前进到1。
但是从1开始到4,我需要走路径1>2>3>4,其中3是一个节点,我可以在这里改变方向。就像一辆单向倒车的汽车,在停车场掉头

所以我有一些限制

  • 我只能打开特定节点
  • 规划节点时需要考虑机器人的方向(节点有方向)
一个想法是在规划之前使用机器人的当前方向和目标的方向过滤图形。但我还不确定这是否可行

我的另一个想法是不进行过滤,而是对整个图表进行规划

但我通常不确定我的计划者(现在的Dijkstra)是否能够处理它,在规划过程中,机器人的方向会发生变化,比如节点3


如果有人能给我一些一般性的提示,如果这是一个好主意,或者如果你能把我推向正确的方向,我将非常高兴。

我想说,你需要将你的图表分成两部分,一部分是所有的前向链接,另一部分是所有的后向链接。然后,这两个图可以在可能转向的节点处以零成本链接连接起来

从示例图中:

Forward links

1F - 2F
2F - 4F
4F - 3F

Backwards links

1B - 2B
2B - 3B

Turning links

3F - 3B
从1F开始,瞄准3F或3B,Dijsktra会发现

1F-2F-4F-3F-3B

最终可以简化为

1-2-4-3

当机器人从1开始朝前并向4前进时的样本输出(机器人可通过2直接到达)

从1开始向后并朝向4时的样本输出(机器人需要通过节点3,它唯一可以转身的地方)


生成此输出的代码位于

,听起来不错。需要在原型中尝试。但我想,车削成本不一定是零。我可以为你编写这样一个原型。我熟悉boost图和机器人路径查找。如果有兴趣,请告诉我。谢谢你的提议!如果我有问题,我会回来找你。我已经在实现了提出的算法。答案中的示例输出。按照我看到图表的方式,从1开始,一直到4,我需要选择路径1>2>4。从1开始,最初向后返回到4,我需要选择路径1>2>3>4。
C:\Users\James\code\unirobot\bin>unirobot.exe inforward.txt
unirobot
l 1 2 0
l 2 3 2
l 2 4 1
l 4 3 1
t 3
s 1 f
g 4
4 bidirectional links input

Forward links
1f - 2f
2f - 4f
4f - 3f

Back links
1b - 2b
2b - 3b

Turning Links
3f - 3b

Combined graph links
(1f,2f) (2f,1f) (2f,4f) (4f,2f) (4f,3f) (3f,4f) (3f,3b) (1b,2b) (2b,1b) (2b,3b) (3b,2b) (3b,3f)

Path: 1f -> 2f -> 4f ->
C:\Users\James\code\unirobot\bin>unirobot.exe inbackward.txt
unirobot
l 1 2 0
l 2 3 2
l 2 4 1
l 4 3 1
t 3
s 1 b
g 4
4 bidirectional links input

Forward links
1f - 2f
2f - 4f
4f - 3f

Back links
1b - 2b
2b - 3b

Turning Links
3f - 3b

Combined graph links
(1f,2f) (2f,1f) (2f,4f) (4f,2f) (4f,3f) (3f,4f) (3f,3b) (1b,2b) (2b,1b) (2b,3b) (3b,2b) (3b,3f)

Path: 1b -> 2b -> 3b -> 3f -> 4f ->