接下来会记录如何在ROS2中使用BT(Behavior Tree)
1. 介绍 BT 框架
BT类似于 FSM 有着广泛的应用,BT框架可以集成到任何其他软件中,首先记录一下没有ROS的纯BT框架,
在理解核心原则之后,将BT程序的相同结构合并到ROS2环境中。
行为树(Behavior Tree,BT)是一种用于设计和管理机器人或自主智能的行为的框架。它可以将复杂的任务和行为分解成逻辑上连续的节点,使得整个系统的控制逻辑更加清晰、灵活和可扩展。
在BT中,整个行为树的结构类似一个树状图,从根节点开始,逐级向下展开,直到叶子节点为止。每个节点都代表着一个特定的行为或决策,并且可以根据节点之间的组合规则进行执行。
常见的BT节点类型包括:
序列节点(Sequence): 顺序执行它们包含的子节点,一个接一个地执行,只有当所有子节点都成功执行时,整个序列才被认为成功。
选择节点(Fallback): 依次执行它们的子节点,直到找到一个成功执行的节点,然后停止。它类似于“或”的关系。
行为节点(Action): 这些节点代表具体的行为,例如“捡起物体”、“放置物体”等,它们是执行最终任务的节点。
条件节点(Condition): 用于判断特定条件是否满足,例如“检测物体是否在视野范围内”、“是否已经抓住物体”等。
1.1 用C++ 实现简单 BT
在BT中,节点从子节点从左往右执行,使用符号 ⟶ 表示逻辑与操作(Sequence),而符号 “?” 表示逻辑或操作(Fallback),也称回退操作。通过这些逻辑运算符,我们可以推导机器人的行为。比如,机器人首先要找到、抓取并放置球。抓取操作需要执行特定的动作。

如图所示的行为树的逻辑是这样的:
1.寻找球的任务 (FindBall)。
2.依次执行两个回退节点,如果球没有靠近,则执行接近球的任务 (ApproachBall);如果球没有被抓住,则执行抓住球的任务 (GraspBall)。
3.执行放置球的任务 (PlaceBall)。
代码如下:
-
首先定义四个行为节点类:ApproachBall、FindBall、PlaceBall和GripperInterface:
class ApproachBall: public BT::SyncActionNode
{
public:
ApproachBall(const std::string& name):BT::SyncActionNode(name,{}){} NodeStatus tick() override { std::count <<"ApproachBall: " << this->name() << std::endl; return BT::NodeStatus::SUCCESS; } }; //----------------Class FindBall------------------------------------------ class FindBall : public BT::SyncActionNode { public: FindBall(const std::string& name) : BT::SyncActionNode(name, {})

文章介绍了如何在ROS2中使用BehaviorTree(BT),首先解释了BT的基本概念和常见节点类型,如序列节点、选择节点、行为节点和条件节点。接着展示了一个简单的C++实现,包括行为节点的定义和行为树的XML结构。最后,对比了BT与FSM,强调了BT在灵活性和可扩展性上的优势。
最低0.47元/天 解锁文章
258





