【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

相关文章

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 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

一文详解SpringBoot中控制器的动态注册与卸载

《一文详解SpringBoot中控制器的动态注册与卸载》在项目开发中,通过动态注册和卸载控制器功能,可以根据业务场景和项目需要实现功能的动态增加、删除,提高系统的灵活性和可扩展性,下面我们就来看看Sp... 目录项目结构1. 创建 Spring Boot 启动类2. 创建一个测试控制器3. 创建动态控制器注