【Nav2中文网】五、普通教程(六)动态对象追踪

2023-12-27 12:50

本文主要是介绍【Nav2中文网】五、普通教程(六)动态对象追踪,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 本教程来自:Nav2中文网
  • Nav2交流社区:https://fishros.org.cn/forum
  • ROS2/Nav2千人交流群:(QQ)139707339
  • 更多精彩教程请关注微信公众号:鱼香ROS
  • 欢迎添加机器人小伊微信,解锁机器人学习特殊服务

动态对象追踪 [待校准@1238]

  • 概述
  • 教程指南

概述

本教程展示了如何将Nav2用于从A点到B点以外的不同任务。在这种情况下,我们将使用Nav2无限期地跟踪一个移动的物体。 [校准@混沌无形]

此任务在跟踪一个人或另一个机器人的情况下非常有用。以下是可以使用此功能创建的应用程序的一些示例视频。 “Carry My Luggage” RoboCup家庭测试,其中 CATIE Robotics 团队成功执行测试,以及这个真实的 (未来的) 世界应用: [校准@混沌无形]

The requirements for this task are as follows:

  • 变化仅限于用于导航的行为树。当需要时,这行为树可以在 NavigateToPose 行动中选择,或可以是默认行为树。它是由运行时可配置的插件组成的。 [校准@混沌无形]
  • 规划器和控制器的配置将不会被修改。 [校准@混沌无形]
  • 该行动将无限期地运行,直到它被发起者取消。 [校准@混沌无形]

检测要跟踪的动态物体(如人)不在本教程的范围内。如下图所示,您的应用程序应该为感兴趣的对象提供一个检测器,将初始位姿发送到 NavigateToPose 动作(action),并在任务期间更新话题。存在许多不同类型的探测器,你可以利用它们来实现这一应用: [校准@混沌无形]

../../_images/main_diagram.png

Tutorial Steps

0- Create the Behavior Tree

让我们从这个简单的行为树开始。此行为树以1 hz重新规划新路径,并将该路径传递给控制器来跟踪: [校准@混沌无形]

<root main_tree_to_execute="MainTree"><BehaviorTree ID="MainTree"><PipelineSequence name="NavigateWithReplanning"><RateController hz="1.0"><ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased"/></RateController><FollowPath path="{path}" controller_id="FollowPath"/></PipelineSequence></BehaviorTree>
</root>

首先,让我们让这个行为运行到出现故障为止。为此,我们将使用 KeepRunningUntilFailure 控制节点。 [校准@混沌无形]

<root main_tree_to_execute="MainTree"><BehaviorTree ID="MainTree"><PipelineSequence name="NavigateWithReplanning"><RateController hz="1.0"><ComputePathToPose goal="{goal}" path="{path}" planner_id="GridBased"/></RateController><KeepRunningUntilFailure><FollowPath path="{path}" controller_id="FollowPath"/></KeepRunningUntilFailure></PipelineSequence></BehaviorTree>
</root>

然后,我们将使用装饰器 GoalUpdater 来接受我们试图跟踪的动态对象位姿的更新。该节点将当前目标作为输入,并订阅话题 /goal_update 。如果收到关于这个话题的新目标,则它将新目标定为 updated_goal 。 [校准@混沌无形]

<root main_tree_to_execute="MainTree"><BehaviorTree ID="MainTree"><PipelineSequence name="NavigateWithReplanning"><RateController hz="1.0"><GoalUpdater input_goal="{goal}" output_goal="{updated_goal}"><ComputePathToPose goal="{updated_goal}" path="{path}" planner_id="GridBased"/></GoalUpdater></RateController><KeepRunningUntilFailure><FollowPath path="{path}" controller_id="FollowPath"/></KeepRunningUntilFailure></PipelineSequence></BehaviorTree>
</root>

为了与目标保持一定距离,我们将使用动作节点 TruncatePath 。这个节点修改了路径,使其变短,这样我们就不会试图导航到感兴趣的对象。我们可以用输入端口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"/></GoalUpdater><TruncatePath distance="1.0" input_path="{path}" output_path="{truncated_path}"/></Sequence></RateController><KeepRunningUntilFailure><FollowPath path="{truncated_path}" controller_id="FollowPath"/></KeepRunningUntilFailure></PipelineSequence></BehaviorTree>
</root>

现在,你可以保存此行为树,并把它应用在导航任务中。 [校准@混沌无形]

作为参考,这个确切的行为树是可用于<[https://github.com/ros-planning/navigation2/blob/main/nav2_bt_navigator/behavior_trees/follow_point.xml](https://github.com/ros-planning/navigation2/blob/main/nav2_bt_navigator/behavior_trees/follow_point.xml)>_的电池,包括在 [](http://dev.nav2.fishros.com/doc/tutorials/docs/navigation2_dynamic_point_following.html#id1)nav2_bt_navigator包中。 [校准@混沌无形]

1- 设置Rviz的点击点 [校准@混沌无形]

我们将使用RViz而不是一个完整的应用程序,这样你就可以在家里测试,而不需要找一个探测器来开始。我们将使用工具栏上的 “ “clicked point” ” 按钮替换对象检测,以向Nav2提供目标更新。这个按钮允许你将坐标数据发布到话题 /clicked_point 。这个点需要通过clicked_point_to_pose程序发送到行为树上,该程序来自这个 仓库 <[https://github.com/fmrico/nav2_test_utils](https://github.com/fmrico/nav2_test_utils)>_。在你的工作区克隆这个仓库,构建,并在终端输入。 [校准@混沌无形]

ros2runnav2_test_utilsclicked_point_to_pose

或者,您可以在你rviz配置文件 goal_updates 中重新映射此话题。 [校准@混沌无形]

2- 在Nav2模拟中运行动态对象跟踪 [校准@混沌无形]

在终端启动Nav2: [校准@混沌无形]

ros2launchnav2_bringuptb3_simulation_launch.pydefault_bt_xml_filename:=/path/to/bt.xml

打开RViz,在初始化机器人位置后,命令机器人导航到任何位置。使用按钮点击的点来模拟对感兴趣的物体进行新的检测,如本教程头部的视频所示。 [校准@混沌无形]

当你有探测器检测障碍率较高 (1 hz,10 hz,100 hz) 时,你会看到一个反应更灵敏的机器人跟随你检测到的感兴趣的对象! [校准@混沌无形]

  • 本文主要校准贡献:混沌无形
  • 本文遵循知识共享协议,禁止未授权商用转载

这篇关于【Nav2中文网】五、普通教程(六)动态对象追踪的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/543201

相关文章

SpringBoot集成redisson实现延时队列教程

《SpringBoot集成redisson实现延时队列教程》文章介绍了使用Redisson实现延迟队列的完整步骤,包括依赖导入、Redis配置、工具类封装、业务枚举定义、执行器实现、Bean创建、消费... 目录1、先给项目导入Redisson依赖2、配置redis3、创建 RedissonConfig 配

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

基于C#实现PDF转图片的详细教程

《基于C#实现PDF转图片的详细教程》在数字化办公场景中,PDF文件的可视化处理需求日益增长,本文将围绕Spire.PDFfor.NET这一工具,详解如何通过C#将PDF转换为JPG、PNG等主流图片... 目录引言一、组件部署二、快速入门:PDF 转图片的核心 C# 代码三、分辨率设置 - 清晰度的决定因

Java Scanner类解析与实战教程

《JavaScanner类解析与实战教程》JavaScanner类(java.util包)是文本输入解析工具,支持基本类型和字符串读取,基于Readable接口与正则分隔符实现,适用于控制台、文件输... 目录一、核心设计与工作原理1.底层依赖2.解析机制A.核心逻辑基于分隔符(delimiter)和模式匹

使用Java读取本地文件并转换为MultipartFile对象的方法

《使用Java读取本地文件并转换为MultipartFile对象的方法》在许多JavaWeb应用中,我们经常会遇到将本地文件上传至服务器或其他系统的需求,在这种场景下,MultipartFile对象非... 目录1. 基本需求2. 自定义 MultipartFile 类3. 实现代码4. 代码解析5. 自定

spring AMQP代码生成rabbitmq的exchange and queue教程

《springAMQP代码生成rabbitmq的exchangeandqueue教程》使用SpringAMQP代码直接创建RabbitMQexchange和queue,并确保绑定关系自动成立,简... 目录spring AMQP代码生成rabbitmq的exchange and 编程queue执行结果总结s

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地