【关于ECBS的多机器人路径规划的整理】

ECBS是对CBS问题的优化,而了解CBS又得先了解A*算法,本文对以上内容进行详细介绍,主要参考文献如下
Suboptimal Variants of the Conflict-Based Search Algorithm for the Multi-Agent Pathfinding Problem

1. A*算法

关于A算法,主要参考了A*算法详解 一看就会 手把手推导 完整代码注释以及启发式搜索(heuristic search)———A*算法
A
算法常用于解决最短路问题,其是Dijkstra 算法和贪婪优先算法的结合,对于评估函数f(n)而言:

  • Dijkstra: 到起点的距离优先:即从起点A,沿着产生的路径,移动到网格上指定节点的移动耗费。
  • 贪婪优先算法:到目标点的距离优先 :即从网格上那个节点移动到终点B的预估移动耗费
  • A*算法:即前两者之和: f ( n ) = g ( n ) + h ( n ) f(n)=g(n)+h(n) f(n)=g(n)+h(n) g ( n ) g(n) g(n)即对应Dijkstra, h ( n ) h(n) h(n)即对应贪婪优先算法

这里着重强调一下 h ( n ) h(n) h(n)的含义, h ( n ) h(n) h(n)经常被称为启发式的,这样叫的原因是因为它只是个猜测。我们没办法事先知道路径的长度,因为路上可能存在各种障碍(墙,水,等等)。它计算从当前位置到目的位置之间的距离。很重要的一点,我们忽略了一切障碍物。这是对剩余距离的一个估算,而非实际值。而由于忽略了所有障碍物,所以这个值一定是当前位置到目的位置的最小值。

具体步骤:

新建open列表,open表表示当前的搜索边界,也即为用于下一步搜索的备用节点集合
新建close列表,close表存放从open表中弹出的结点
1、将源点加入open表
2while(OPEN!=NULL||到达goal_node)
{
    从OPEN表中取f(n)最小的节点n;
    if(n节点==目标节点)
        break;
    for(当前节点n的每个子节点X)
    {
        计算f(X);
        if(X在open表里)
            if(新的f(X)<OPEN中的f(X))
            {
                把n设置为X的父亲;
                更新OPEN表中的f(n); //不要求记录路径的话可以直接加入open表,旧的X结点是不可能比新的先出队
            }
        if(X在CLOSE表里)
            continue;
        if(X都不在)
        {
            把n设置为X的父亲;f(X);
            并将X插入OPEN表中; 
        }
    }//endfor
    将n节点插入CLOSE表中;
    按照f(n)将OPEN表中的节点排序;//实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。
}//endwhile(OPEN!=NULL)

3、保存路径,从目标点出发,按照父节点指针遍历,直到找到起点。

2. A ϵ ∗ A^*_\epsilon Aϵ算法

参考文献:Studies in Semi-Admissible Heuristics,主要参考了A*算法及其变种
根据论文介绍 A ϵ ∗ A^*_\epsilon Aϵ算法是一种有界次优算法。设最优代价为 C 0 C_0 C0,给定参数 ϵ \epsilon ϵ,使得有界次优算法的结果 C C C满足 C ≤ ( 1 + ϵ ) C 0 C\leq (1+\epsilon)C_0 C(1+ϵ)C0

我们知道 A* 算法每次在 O P E N OPEN OPEN表里取最小的节点进行下一步搜索。论文提到,搜索算法在搜索过程中事实上会得到许多 c o s t cost cost相近的解,A 算法每次都取最优比较费时间,多花的时间与得到的优化效果不成比例,俗称 “性价比不高”。

因此 A ϵ ∗ A^*_\epsilon Aϵ算法在A算法 O P E N OPEN OPEN表的基础上,设计了 F O C A L FOCAL FOCAL表,定义如下:
F O C A L = n ∗ : f ^ ( n ∗ ) ≤ ( 1 + ϵ ) m i n n ∈ o p e n f ( n ) FOCAL=n^*:\hat{f}(n^*)\leq(1+\epsilon)min_{n\in open}f(n) FOCAL=n:f^(n)(1+ϵ)minnopenf(n)
其中 f ( n ) f(n) f(n)与A
算法相同, g ( n ) g(n) g(n)代表当前结点n到起点的距离, h ( n ) h(n) h(n)代表预测当前节点n到终点的距离(启发式函数)

等同于 F O C A L FOCAL FOCAL表将 O P E N OPEN OPEN表中 f ( n ) f(n) f(n)值小于等于 ( 1 + ϵ ) (1+\epsilon) (1+ϵ)倍最小 f f f值的所有结点放在一起,形成一个次优集体,从中再选择出最适合的那个结点。
与A算法不同的是,A算法是通过 m i n f ( n ) minf(n) minf(n)的结点作为下一个拓展结点,而 A ϵ ∗ A^*_\epsilon Aϵ算法是通过新的启发式函数 h F ( n ) h_F(n) hF(n)作为规则,在 F O C A L FOCAL FOCAL表中进行选择。 h F h_F hF估计完成从结点n开始的搜索所需的计算量。(其具体含义根据后面面临的不同问题可以做出不同的设定)

总结: A ϵ ∗ A^*_\epsilon Aϵ算法与A*算法的不同之处在于:
1.使用了参数数 ϵ \epsilon ϵ,从 O P E N OPEN OPEN中选择 f ^ ( n ∗ ) ≤ ( 1 + ϵ ) m i n n ∈ o p e n f ( n ) \hat{f}(n^*)\leq(1+\epsilon)min_{n\in open}f(n) f^(n)(1+ϵ)minnopenf(n)的结点,形成新集合 F O C A L FOCAL FOCAL,从中进行选择
2.使用了新的启发式函数 h F ( n ) h_F(n) hF(n),在 F O C A L FOCAL FOCAL中作为评判标准选择拓展节点。 h ( n ) h(n) h(n)用于作为构建 F O C A L FOCAL FOCAL的评判标准,而 h F ( n ) h_F(n) hF(n)作为从 F O C A L FOCAL FOCAL中选择拓展节点的标准。

3. CBS算法

多智能体路径规划 (Multi-Agent Path Finding, MAPF) 研究多智能体的路径规划算法,为多机系统规划无冲突的最优路径.关于MAPF可以看这里多机器人路径规划(MAPF)综述

CBS(Conflict-Based Search) 是一种基于冲突的 MAPF 算法, CBS 算法给出 MAPF 问题的全局最优结果。参考文献为Conflict-based search for optimal multi-agent pathfinding,主要参考CBS(Conflict-Based Search)多机器人路径规划

CBS路径规划:行为上是一棵树的形式,算法的思想划分为两层,

  1. 底层执行各个 a g e n t agent agent的单机最短路径规划,使用传统的A*算法
  2. 顶层遍历底层的规划路径,检查路径是否有冲突,如果有冲突,如果有冲突的话就施加约束重新进行底层规划,直到所有底层路径没有冲突为止。

3.1 定义术语:

  • p a t h path path:一条机器人的路径,也就是单机规划的结果
  • s o l u t i o n solution solution:所有agent的 p a t h path path集合,也就是mapf全局规划的结果
  • c o n f l i c t conflict conflict:冲突,在 s o l u t i o n solution solution中,agent之间路径可能会发生冲突,具体描述形式为( a i a_i ai, a j a_j aj, v v v, t t t),表示在 t t t这个timestep, a i a_i ai a j a_j aj同时占据了顶点 v v v
  • c o n s t r a i n t s constraints constraints:约束,具体描述形式为( a i a_i ai, v v v, t t t),表示在时刻 t t t a i a_i ai不能占据顶点 v v v
  • c o s t cost cost:表示当前 s o l u t i o n solution solution,每个 a g e n t agent agent的f(n)之和

3.2 顶层

CBS算法顶层使用约束树(Search the Constraint Tree (CT))数据结构来解决底层冲突,如下图所示:
顶层逻辑图

其实就是一颗树(可以设计成二叉树或者多叉树),树的每个节点除了有指向子节点的指针,还包括:
c o n s t r a i n t s constraints constraints:由 c o n f l i c t conflict conflict得到
s o l u t i o n solution solution:目前结点的全局路径(可能包含冲突)
c o s t cost cost:目前结点的总代价

注意:次数的结点不是指A*算法中的agent节点,而是指CT树上面的结点:CT_node

3.3 生成树

生成树的过程就是从父节点生出子节点的过程,如下图所示
两个智能体 a 1 a_1 a1 a 2 a_2 a2想分别从 S 1 S_1 S1 S 2 S_2 S2出发到达 G 1 G_1 G1 G 2 G_2 G2
举例说明
在初始情况下,约束集为空,此时进行底层A*搜索,生成两个path
p a t h 1 path_1 path1: < S 1 , A 1 , C , G 1 > <S_1,A_1,C,G_1> <S1,A1,C,G1>
p a t h 2 path_2 path2: < S 2 , B 1 , C , G 2 > <S_2,B_1,C,G_2> <S2,B1,C,G2>
计算当前的 c o s t cost cost=3+3=6(起点是不算的)
因此CT树的根节点 r o o t root root如图所示:
在这里插入图片描述
接下来:

  1. 遍历当前结点的 s o l u t i o n solution solution,搜索得到 p a t h s paths paths之间的第一个冲突
  2. 解决冲突,两条路径在第2步时都到达了 C C C,因此将冲突拆成两个约束 ( a 1 , C , 2 ) (a_1,C,2) (a1,C,2) ( a 2 , C , 2 ) (a_2,C,2) (a2,C,2),分别表示 a 1 a_1 a1在第2步不能占据 C C C a 2 a_2 a2在第2步不能占据 C C C
  3. 生成子节点,将结点 r o o t root root分为两个子节点,每个子节点都继承父节点原有的约束,并赋予第2步中独有的约束
  4. 将子节点的约束施加到底层规划算法中,计算出新的 p a t h path path,合并成 s o l u t i o n solution solution,如下图:
    在这里插入图片描述
  5. 计算每个子节点的全局 c o s t cost cost,左右子节点均为7,由于搜索一般从左边开始,因此优先考虑左节点,此时左节点无冲突,则为全局最优路径,算法返回。

3.4 算法伪代码流程:

CBS伪代码
可以看出,在CBS的顶层也使用了 o p e n open open表,存放着CT树里的拓展结点,并且通过CT_node的 c o s t cost cost值作为判断标准选择CT_node进行拓展。也就是伪代码里的 p p p,然后对 p p p进行冲突检测,如果 p p p中没有冲突,则返回结果。否则记录下 p p p中的第一个冲突,记录为 C C C,对于冲突对中的每一个智能体进行增加 c o n s t r a i n t s constraints constraints,并且赋给子节点 A A A,随后 A A A中对每一个agent进行A*算法求解 p a t h path path,最后得到 A A A s o l u t i o n solution solution并且计算 A A A c o s t cost cost,最后将A插入顶层的 o p e n open open表中

3.5 总结:

在CBS中,顶层设计采用的CT树的结构,并且也是通过设计 o p e n open open将拓展结点装入,并且通过CT_node的 c o s t cost cost选择新拓展结点,与A*算法一致。

在底层中,通过新拓展节点 P P P f i r s t _ c o n f l i c t first\_conflict first_conflict给其子节点 A A A添加分别对应的 c o n s t r a i n constrain constrain,随后子节点再分别对每个 a g e n t agent agent进行路径规划,并且计算出 A A A c o s t cost cost。随后将 A A A加入 o p e n open open

4. ECBS算法

参考文献Suboptimal Variants of the Conflict-Based Search Algorithm for the Multi-Agent Pathfinding Problem主要参考ECBS多机器人路径规划

ECBS其实结构与CBS是一致的,CBS在顶层设计和底层设计中使用的是A*的策略,而ECBS在顶层和底层中使用的是 A ϵ ∗ A^*_\epsilon Aϵ的策略。

4.1 底层设计:

对于ECBS的底层设计,为 a g e n t agent agent a i a_i ai搜索路径使用的 O P E N OPEN OPEN表为 O P E N i OPEN_i OPENi,则 O P E N i OPEN_i OPENi中的最小 f f f f m i n f_{min} fmin为t a i a_i ai最优路径搜索代价 c o s t i cost_i costi的下界(Lower Bound)。对于一个CT树节点CT_node,设其为 n n n,则 n n n c o s t cost cost的最优解 L B ( n ) = ∑ i = 1 k f m i n ( i ) LB(n)=\sum\limits_{i=1}^{k} {f_{min}(i)} LB(n)=i=1kfmin(i),其中 k k k a g e n t agent agent的个数

在底端对 a i a_i ai使用 A ϵ ∗ A^*_\epsilon Aϵ算法,设置参数 ϵ \epsilon ϵ,将满足 f ^ ( n ∗ ) ≤ ( 1 + ϵ ) m i n n ∈ o p e n f ( n ) \hat{f}(n^*)\leq(1+\epsilon)min_{n\in open}f(n) f^(n)(1+ϵ)minnopenf(n)的路径 p a t h n ∗ path_{n^*} pathn装入 F O C A L i FOCAL_i FOCALi随后设置 h c h_c hc,其表示返回与先前分配的其他代理冲突最少的路径。

例如为 a 1 a_1 a1分配了路径 ( S 1 , A , G ) (S_1,A,G) (S1,A,G),那么为 a 2 a_2 a2分配道路时就要优先考虑避免第1步中位置 A A A以外的其他位置。

4.2 顶层设计:

在ECBS的顶层同样采取 A ϵ ∗ A^*_\epsilon Aϵ的算法,每个CT_node都返回两个值给顶层算法

  • n . c o s t n.cost n.cost
  • L B ( n ) LB(n) LB(n)

其中 n . c o s t n.cost n.cost为CT树节点 n n n的代价 c o s t cost cost L B ( n ) LB(n) LB(n) n n n的理想状态的代价下界
L B = m i n ( L B ( n ) ∣ n ∈ O P E N ) LB=min(LB(n)|n\in OPEN) LB=min(LB(n)nOPEN),此时的 O P E N OPEN OPEN为顶层搜索的 O P E N OPEN OPEN表,则 L B LB LB显然是全局最优代价 C ∗ C^* C的下界。因此顶层的 F O C A L FOCAL FOCAL表的设计为
F O C A L = { n ∣ n ∈ O P E N , n . c o s t ≤ L B ⋅ w } FOCAL=\lbrace n|n\in OPEN,n.cost\leq LB\cdot w \rbrace FOCAL={nnOPEN,n.costLBw}

而顶层设计也同样拥有 h c h_c hc,其含义为当前分支节点中至少有一个冲突的 a g e n t agent agent对的数量(即 a g e n t _ p a i r s agent\_pairs agent_pairs),例如当前结点 n n n存在 c o n f l i c t conflict conflict ( a 1 (a_1 (a1, a 2 a_2 a2, 1 1 1, 1 ) 1) 1) ( a 2 (a_2 (a2, a 3 a_3 a3, 3 3 3, 2 ) 2) 2),则存在冲突对为 ( a 1 (a_1 (a1, a 2 ) a_2) a2), ( a 2 (a_2 (a2, a 3 ) a_3) a3), h c ( n ) = 2 h_c(n)=2 hc(n)=2

其余算法逻辑与CBS一致。

4.3 总结:

顶层和底层都使用了 A ϵ ∗ A^*_\epsilon Aϵ算法,其中底层的 h c h_c hc表示返回与先前分配的其他代理冲突最少的路径。顶层的 h c h_c hc表示当前分支节点中至少有一个冲突的 a g e n t agent agent对的数量

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在matlab中,可以通过多种算法实现多机器人路径规划。其中一种常用的方法是通过使用混合整数线性规划(MILP)来解决问题。 首先,我们需要定义机器人的起始位置、目标位置以及机器人的动力学模型。然后,我们可以通过使用图搜索算法(如A*算法)来对每个机器人的路径进行规划。 在规划过程中,我们需要考虑到机器人之间的碰撞问题,以及避免障碍物的存在。为了解决这些问题,我们可以使用区域图和互锁机制来确保机器人的行动是安全的。 另外,为了优化路径规划的效果,我们可以使用进化算法或遗传算法来对机器人的路径进行优化。这些算法可以通过修改机器人的速度、加速度等参数来改进路径。 一旦得到了每个机器人的路径,我们可以将其转换为控制指令,并将其发送给机器人进行执行。在此过程中,我们可以使用仿真环境,如V-REP,来验证路径规划的准确性和效果。 总而言之,matlab提供了一系列的工具和算法来实现多机器人路径规划。通过合理选择算法和参数,并运用优化技术,我们可以得到安全有效的路径规划方案。 ### 回答2: 多机器人路径规划是指在多个机器人同时存在的情况下,通过合理的路径规划方法,使得每个机器人能够在避免碰撞的情况下高效地完成任务。 在Matlab中实现多机器人路径规划可以使用机器人系统工具箱(Robotics System Toolbox)。首先,需要定义每个机器人的运动模型和约束条件。然后,根据任务目标和环境地图,确定路径规划问题的优化目标函数。 常用的多机器人路径规划方法包括集中式路径规划和分布式路径规划。集中式路径规划将所有机器人的位置、速度和加速度信息集中处理,最终找到全局最优解。分布式路径规划将路径规划问题分解为每个机器人个体的局部子问题,通过通信与协作最终达到全局最优解。 在Matlab中,可以使用路径规划函数如A*算法、D*算法、RRT算法等来解决机器人的路径规划问题。这些算法可以根据任务需求和机器人特点进行选择。 对于多机器人路径规划,可以通过将每个机器人的优化目标函数和约束条件联合起来,进行整体求解。也可以使用协同规划算法,将路径规划问题转化为一个多智能体系统的协同决策问题,利用分布式算法来实现路径规划的优化。 需要注意的是,多机器人路径规划问题较为复杂,需要考虑机器人之间的碰撞避让和协同性问题。因此,在路径规划过程中,需要设计合理的路径优化策略,权衡机器人的行动代价和协作效率,以实现最优的路径规划方案。 总结来说,Matlab提供了丰富的机器人系统工具箱,可以用于实现多机器人路径规划。通过选择合适的路径规划方法和算法,结合机器人的运动模型和环境地图,可以在避免碰撞的前提下,高效地规划多机器人的路径,实现任务的快速完成。 ### 回答3: MATLAB是一种功能强大的软件工具,可以用于多机器人路径规划。多机器人路径规划是指在一个环境中,同时规划多个机器人的运动路径,使得它们能够完成特定的任务,并避免碰撞和冲突。 MATLAB提供了多种用于路径规划的工具箱和函数,如Robotics System Toolbox和Optimization Toolbox。它们可以帮助用户进行机器人建模、路径规划算法实现和仿真等。 首先,在MATLAB中,可以使用Robotics System Toolbox来进行机器人建模和运动规划。用户可以根据实际情况,选择合适的机器人模型,并使用所提供的函数进行运动规划。常用的路径规划算法包括A*、Dijkstra和RRT等,用户可以根据需求选择合适的算法进行路径规划。 其次,Optimization Toolbox提供了多种优化算法,可以用于求解多机器人路径规划的最优解。用户可以定义问题的目标函数和约束条件,并利用优化算法求解最优路径。这样可以使得多机器人在规定的时间内完成任务,并最小化其行驶距离、最大化其效率等。 另外,MATLAB还提供了可视化工具,如Simulink,可以对多机器人路径规划进行仿真和验证。用户可以在仿真环境中观察机器人的运动轨迹和路径规划效果,以评估算法的性能和改进路径规划策略。 总结来说,MATLAB提供了丰富的工具和函数,可以帮助用户进行多机器人路径规划。通过合理选择机器人模型、路径规划算法和优化策略,可以实现多机器人的协同运动,并在特定的环境中完成任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值