# ContBTSys **Repository Path**: xiaozq22/ContBTSys ## Basic Information - **Project Name**: ContBTSys - **Description**: 1. source code of contingent ff planner 2. an algorithm that builds a BT from a contingent plan - **Primary Language**: C++ - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-02-01 - **Last Updated**: 2024-04-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ContBTSys #### 介绍 用于将`应急规划`生成的规划结果转化成可执行的`行为树`,其中生成的行为树格式为`xml`,并与[BehaviorTree.CPP](https://www.behaviortree.dev/docs/3.8/intro)保持一致。 #### 软件架构 软件的整体概况如下图所示: ![overview](./docs/overview.png "overview") 1. 用户输入自定义的`pddl`格式的`domain`和`problem`文件,该文件可以用特定的`contingent planner`解析并求解。 2. 使用指定规划器对上述问题进行求解,得到一个符号态的`pddl plan`。 3. 应急规划得到的规划往往为树形结构,在本项目中,采用自定义的数据结构`Action Tree`来表示这种结构。该结构中节点含有两种类型: 1. `效应动作(ActuationAction)`:只有少于等于一个后继节点,不产生分支。 2. `观察动作(ObservationAction)`:根据观察的结果,可能产生`真/假`两种分支。 4. 通过`buildBT`算法,将上一步骤动作树的根节点输入,将其递归转化成行为树,算法主体如下: ![buildBT_algorithm](./docs/buildBT_algorithm.png "buildBT_algorithm") 算法进一步解释如下: 1. 判断节点类型,如果是效应动作: 1. 该节点还有后继子节点: ![aa_with_son](./docs/aa_with_son.png "aa_with_son") 2. 无后继子节点: ![aa_without_son](./docs/aa_without_son.png "aa_without_son") 2. 如果是观察动作: 1. 该节点的后继真子节点和假子节点都存在: ![sa_with_ts_fs](./docs/sa_with_ts_fs.png "sa_with_ts_fs") 2. 真子节点存在,假子节点不存在: ![sa_with_ts_without_fs](./docs/sa_with_ts_without_fs.png) 3. 真子节点不存在,假子节点存在: ![sa_without_ts_with_fs](./docs/sa_without_ts_with_fs.png) 4. 后继子节点都不存在,则该行为无执行必要,返回空。 #### 安装与使用教程 系统配置 - cmake >= 3.16.3 - g++/gcc 9.4.0 - ubuntu 20.04 以root身份运行以下命令: 1. 克隆并编译本项目 ``` bash git clone cd chmod +x ./build_all.sh && ./build_all.sh ``` 2. 运行项目中的测试案例 ``` bash cd build/bin ./cont_ff_bt_builder_test ``` 如果不指定`domain file` 和 `problem file`的路径,则采用默认用例。 #### 代码结构说明 ``` . |-- CMakeLists.txt # 构建整个contbtsys项目 |-- README.en.md |-- README.md |-- build_all.sh # 编译安装contingent-ff(cff)及构造项目脚本 |-- cont_ff_planner # 包含contingent-ff规划器源代码 |-- contbtsys # 项目主体文件 | |-- CMakeLists.txt | |-- cont_ff_plan_solver # 调用cff求解,并将结果转化成action tree数据结构 | | |-- CMakeLists.txt | | |-- cont_ff_plan_solver_tests | | | `-- main.cpp | | |-- include | | | `-- cont_ff_plan_solver | | | `-- cont_ff_plan_solver.hpp | | `-- src | | `-- cont_ff_plan_solver | | `-- cont_ff_plan_solver.cpp | |-- contbtsys_bt_builder # 根据action tree构建行为树 | | |-- CMakeLists.txt | | |-- contbtsys_bt_builder_test # 测试案例 | | | `-- cont_ff_bt_builder_test.cpp | | |-- include | | | `-- contbtsys_bt_builder | | | `-- ContBTBuilder.hpp | | `-- src | | `-- contbtsys_bt_builder | | `-- ContBTBuilder.cpp | `-- contbtsys_core # 核心文件,定义了一些数据结构,规划器的基类等 | |-- CMakeLists.txt | |-- include | | `-- contbtsys_core | | |-- ContPlanSolverBase.hpp # 所有外部应急规划期应该继承自该基类 | | |-- Utils.hpp # 定义了一些工具函数 | | `-- contbtsys_ds.hpp # 定义了action tree节点等数据结构 | `-- src | `-- contbtsys_core | `-- Utils.cpp |-- docs # README中的附加文件 `-- tests # 包含若干cff规划器的案例 ```