骨架机器人P5——预添加跟踪模块

文章讲述了如何在已完成骨架机器人与nav2导航结合的基础上,扩展追踪功能,通过修改nav2的行为树配置,集成跟踪模块,以实现对人员的实时跟踪。重点介绍了行为树的参数设置和导航器的配置,以及可能的追踪行为树xml结构的引入。
摘要由优快云通过智能技术生成

2024/1/7

        在之前的基础上,已经完成了骨架机器人和nav2导航的结合,实现了nav2在骨架机器人上运行,所以接下来是为了实现在骨架机器人上运行跟踪模块,实现对人员的跟踪。

        因为nav2的基础导航系统建立在bringup包上,根据navigation2-main\nav2_bringup\params的nav2_params.yaml,可获取一下的行为树配置代码:

bt_navigator:
  ros__parameters:
    global_frame: map
    robot_base_frame: base_link
    odom_topic: /odom
    bt_loop_duration: 10
    default_server_timeout: 20
    wait_for_service_timeout: 1000
    action_server_result_timeout: 900.0
    navigators: ["navigate_to_pose", "navigate_through_poses"]
    navigate_to_pose:
      plugin: "nav2_bt_navigator/NavigateToPoseNavigator"
    navigate_through_poses:
      plugin: "nav2_bt_navigator/NavigateThroughPosesNavigator"
    # 'default_nav_through_poses_bt_xml' and 'default_nav_to_pose_bt_xml' are use defaults:
    # nav2_bt_navigator/navigate_to_pose_w_replanning_and_recovery.xml
    # nav2_bt_navigator/navigate_through_poses_w_replanning_and_recovery.xml
    # They can be set here or via a RewrittenYaml remap from a parent launch file to Nav2.
    plugin_lib_names:
      - nav2_compute_path_to_pose_action_bt_node
        ...
      - nav2_is_battery_charging_condition_bt_node
    error_code_names:
      - compute_path_error_code
      - follow_path_error_code

其中:

1. 总体配置:

  • bt_navigator: 定义了行为树导航器的配置部分。
  • ros__parameters: 指明了以下参数是 ROS 参数。

2. 基础参数:

  • global_frame: 定义了全局坐标系的名称(通常为 "map")。
  • robot_base_frame: 定义了机器人本体坐标系的名称(通常为 "base_link")。
  • odom_topic: 指定了里程计数据的 ROS 话题名称。
  • bt_loop_duration: 设置了行为树的循环周期。
  • default_server_timeout: 设置了默认服务器超时时间。
  • wait_for_service_timeout: 设置了等待服务启动时的超时时间。
  • action_server_result_timeout: 设置了等待行为树节点执行结果的超时时间。

3. 导航器类型:

  • navigators: 列出了可用的导航器类型,通常包括:
    • navigate_to_pose:用于导航到单个目标点。
    • navigate_through_poses:用于导航一系列目标点。

4. 导航器插件:

  • navigate_to_pose 和 navigate_through_poses: 分别指定了对应导航器的插件名称。

5. 行为树节点库:

  • plugin_lib_names: 列出了行为树导航器所需的节点库名称,用于实现各种导航行为和条件判断。

6. 错误代码:

  • error_code_names: 列出了需要监控的错误代码名称,用于在导航过程中进行错误处理。

而这两个默认的导航器对应的xml文件如下:

  • navigate_to_pose

  • navigate_through_poses

navigate_to_pose对应的行为树:

所以为了实现跟踪,需要在此行为树的基础上加上跟踪的子树。

跟踪的子树

参考:nav2跟踪动态点

任务要求如下:

  • 改变仅限于用于导航的行为树。该行为树可以在需要时在 NavigateToPose 行为中选择,也可以是默认行为树。它由可在运行时配置的插件组成。
  • 规划器和控制器的配置不会改变。
  • 该行为将无限期运行,直到被启动者取消。
  • 对要跟随的动态物体(如人)的检测不在本教程的范围内。如图所示,您的应用程序应该为感兴趣的物体提供一个检测器,将初始位姿发送给 NavigateToPose 行为,并在任务期间更新它。您可以利用许多不同类型的检测器来实现这个应用程序:

跟踪动态点的行为树xml:

<!--
  This Behavior Tree follows a dynamic pose to a certain distance
-->

<root main_tree_to_execute="MainTree">
  <BehaviorTree ID="MainTree">
    <PipelineSequence name="NavigateWithReplanning">
      <RateController hz="1.0">
        <Sequence>
          <GoalUpdater input_goal="{goal}" output_goal="{updated_goal}">
            <ComputePathToPose goal="{updated_goal}" path="{path}" planner_id="GridBased" error_code_id="{compute_path_error_code}"/>
          </GoalUpdater>
         <TruncatePath distance="1.0" input_path="{path}" output_path="{truncated_path}"/>
        </Sequence>
      </RateController>
      <KeepRunningUntilFailure>
        <FollowPath path="{truncated_path}" controller_id="FollowPath" error_code_id="{follow_path_error_code}"/>
      </KeepRunningUntilFailure>
    </PipelineSequence>
  </BehaviorTree>
</root>

此行为树以 1 Hz 重新规划一条新路径,并将该路径传递给控制器以遵循。

首先,让我们让此行为一直运行,直到出现故障。为此,我们将使用控制节点KeepRunningUntilFailure。

然后,我们将使用装饰器 GoalUpdater 来接受我们尝试遵循的动态对象姿势的更新。该节点将当前目标作为输入并订阅主题/goal_update。它设定了新目标 updated_goal,就好像收到了有关该主题的新目标一样。

为了与目标保持一定距离,我们将使用 动作节点 .此节点修改路径,使其变短,因此我们不会尝试导航到感兴趣的对象。我们可以设置到目标的所需距离 输入端口 .TruncatePathdistance

作为参考,此确切的行为树可供您使用包 nav2_bt_navigator 中包含的。

行为树如下:

nav2_bringup导航包 launch文件结构

参考:nav2_bringup导航包 launch文件结构

1 localization_launch.py

作用:启动地图服务,在地图上给机器人定位。

2 slam_launch.py

作用:slam同步定位建图,储存地图。

3 navigation_launch.py

作用:启动导航核心节点,行为树 规划器 控制器 恢复器 路点跟随

4 rviz_launch.py

作用:启动rviz2可视化机器人及导航

5 bringup_launch.py

通过条件选择condition=IfCondition(slam),二选一启动:

slam_launch.py

localization_launch.py

'slam',default_value='False  所以默认启动 localization_launch.py

启动 navigation_launch.py

作用:这是一个通过launch文件套娃集齐了nav2导航需要的所有节点,按默认设置启动地图服务,在地图上给机器人定位,启动导航行为树 规划器 控制器 恢复器 路点跟随。

如果没有实体机器人,开启gazebo仿真机器人+bringup_launch.py+rviz_launch.py

如果有实体机器人,启动机器人底盘程序+bringup_launch.py+rviz_launch.py  nav2导航服务全部节点就都集齐了,可以开始自由导航了。

如果想同时建图并导航只需给launch文件加参数,启动 bringup_launch.py slam:=True 这时在陌生环境不需要提供地图,程序会一边建图,一边导航。

注意仿真机器人所有节点 use_sim_time=true (启用仿真时间),实体机器人所有节点use_sim_time=false (不启用仿真时间),时间设置错了会出现莫名其妙的问题。

6 spawn_tb3_launch.py

作用:启动gazebo节点,在gazebo规定位置生成机器人

7 tb3_simulation_launch.py

作用:生成gazebo仿真机器人,启动导航服务,rviz显示机器人导航

8 multi_tb3_simulation_launch.py

作用:总体来说是在gazebo仿真环境生成多个机器人并导航。

如何修改代码?

在上述navigation_launch.py中,我们可以看到

        在这个部分启动的就是行为树节点,也就是来自 'nav2_bt_navigator' 包的行为树,默认的行为树是上面说到的:

  • navigate_to_pose
  • navigate_through_poses

  所以我们要在这个部分加入上述的动态点跟踪的xml,也就是navigation2-main\nav2_bt_navigator\behavior_trees\follow_point.xml

        在bringup的配置文件navigation2-main\nav2_bringup\params\nav2_params.yaml

        所以一下子就是启动两个导航器。

总结:

        所以接下来应该就是要在 navigation2-main\nav2_bt_navigator\src\navigators中模仿navigate_to_pose.cpp写一个navigate_follow_point的导航器。

  可能也可以把这个行为树加入到navigate_to_pose或navigate_through_poses之中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值