ROS2中使用Behavior Tree (1)

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

接下来会记录如何在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)。

代码如下:

  1. 首先定义四个行为节点类: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, {})
      
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mubibaiwhale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值