RoboWaiter/BTExpansionCode
Caiyishuai bc65467ca5 BTExpansionCode 2024-01-05 14:11:54 +08:00
..
EXP BTExpansionCode 2024-01-05 14:11:54 +08:00
README.assets BTExpansionCode 2024-01-04 22:51:33 +08:00
others BTExpansionCode 2024-01-04 22:51:33 +08:00
utils BTExpansionCode 2024-01-04 22:51:33 +08:00
BTExpansionAlgorithm.py BTExpansionCode 2024-01-05 14:11:54 +08:00
BTExpansionAlgorithm_old.py BTExpansionCode 2024-01-04 22:51:33 +08:00
BehaviorTree.py BTExpansionCode 2024-01-04 22:51:33 +08:00
Examples.py BTExpansionCode 2024-01-04 22:51:33 +08:00
MakeCoffee.ptml BTExpansionCode 2024-01-04 22:51:33 +08:00
OptimalBTExpansionAlgorithm.py BTExpansionCode 2024-01-05 14:11:54 +08:00
OptimalBTExpansionAlgorithm_single_goal.py BTExpansionCode 2024-01-04 22:51:33 +08:00
README.md BTExpansionCode 2024-01-04 22:51:33 +08:00
SoftdrinkCost.ptml BTExpansionCode 2024-01-04 22:51:33 +08:00
goal_states_unique.txt BTExpansionCode 2024-01-04 22:51:33 +08:00
main.py BTExpansionCode 2024-01-05 14:11:54 +08:00
test.py BTExpansionCode 2024-01-04 22:51:33 +08:00
test2.py BTExpansionCode 2024-01-04 22:51:33 +08:00
test3.py BTExpansionCode 2024-01-04 22:51:33 +08:00
tools.py BTExpansionCode 2024-01-05 14:11:54 +08:00

README.md

代码说明

1. BehaviorTree.py 实现行为树叶子结点和非叶子结点的定义

  • **Leaf **:表示叶节点,可以是动作(act)或条件(cond)。
  • ControlBT:代表可能包含控制节点的行为树。它们可以是选择器(?)、序列(>)、动作节点(act)或条件节点(cond)。
  • 上述两个类都包含 tick 方法。

2. BTExpansionAlgorithm.py 实现最优行为树扩展算法

image-20231103191141047

使用方法

 algo = BTalgorithm(verbose=True)
    algo.clear()
    algo.run_algorithm(start, goal, actions) # 使用算法得到行为树在 algo.bt
    algo.print_solution() # 打印行为树 
    val, obj = algo.bt.tick(state) # 执行行为树

3. tools.py 实现打印数据、行为树测试等模块

使用方法

print_action_data_table(goal,start,actions) # 打印所有变量

# 行为树鲁棒性测试,随机生成规划问题
# 设置生成规划问题集的超参数:文字数、解深度、迭代次数
seed=1
literals_num=10
depth = 10
iters= 10
BTTest(seed=seed,literals_num=literals_num,depth=depth,iters=iters)

4. Example.py 中设计规划案例 goals, start,actions

def MoveBtoB ():
    actions=[]
    a = Action(name="Move(b,ab)") 
    a.pre={'Free(ab)','WayClear'}  
    a.add={'At(b,ab)'} 
    a.del_set= {'Free(ab)','At(b,pb)'}         
    a.cost = 1
    actions.append(a)

    a=Action(name="Move(s,ab)") 
    a.pre={'Free(ab)'} 
    a.add={'Free(ab)','WayClear'} 
    a.del_set={'Free(ab)','At(s,ps)'}  
    a.cost = 1
    actions.append(a)

    a=Action(name="Move(s,as)")
    a.pre={'Free(as)'} 
    a.add={'At(s,ps)','WayClear'} 
    a.del_set={'Free(as)','At(s,ps)'} 
    a.cost = 1
    actions.append(a)

    start = {'Free(ab)','Free(as)','At(b,pb)','At(s,ps)'} 
    goal= {'At(b,ab)'} 
    return goal,start,actions

5. main.py 为主函数,实现 规划生成、行为树生成、行为树执行、行为树测试 的整个流程