首页 > 其他分享 >【ROS2机器人入门到实战】使用Nav2导航API进行导航

【ROS2机器人入门到实战】使用Nav2导航API进行导航

时间:2023-09-07 16:06:14浏览次数:39  
标签:initial Nav2 pose feedback API nav 导航 goal


4.使用Nav2导航API进行导航

写在前面

  1. 当前平台文章汇总地址:ROS2机器人从入门到实战
  2. 获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取
  3. 教程配套机器人开发平台:两驱版| 四驱版
  4. 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn

Nav2的API其实是Nav2提供的一个Python库,通过该库你可以事先调用你的机器人进行简单的控制(比如导航到点)。

很遗憾的是,该功能包官方并没有发布foxy版本的,再下一个galactic版本才开始正式发布。

从2022年5月23号开始,教程将开始向humble版本迁移,该部分内容将在humble版本发布。

1.导入nav2_simple_commander

from nav2_simple_commander.robot_navigator import BasicNavigator
import rclpy
from copy import deepcopy

初始化BasicNavigator

rclpy.init()
nav = BasicNavigator()
navigator.waitUntilNav2Active()

2.初始化位置

# ======================初始化位置,代替rviz2的2D Pose Estimate===============================
initial_pose = PoseStamped()
initial_pose.header.frame_id = 'map'
initial_pose.header.stamp = navigator.get_clock().now().to_msg()
initial_pose.pose.position.x = 0.0
initial_pose.pose.position.y = 0.0
initial_pose.pose.orientation.w = 1.0
navigator.setInitialPose(initial_pose)

3.导航到点

#========================导航到目标点1===========================================
goal_pose1 = deepcopy(initial_pose)
goal_pose1.pose.position.x = 1.5
nav.goToPose(goal_pose1)
while not nav.isNavComplete():
  feedback = nav.getFeedback()
  #检查是否超时,超时则停止导航到点   
  if feedback.navigation_duration > 600:
    nav.cancelNav()


#================================导航到目标点2==================================
goal_pose2 = deepcopy(initial_pose)
goal_pose2.pose.position.x = -1.5

nav.goToPose(goal_pose2)
while not nav.isNavComplete():
  feedback = nav.getFeedback()
  #检查是否超时,超时则停止导航到点   
  if feedback.navigation_duration > 600:
    nav.cancelNav()

#===============================查看返回结果=====================================
result = nav.getResult()
if result == NavigationResult.SUCCEEDED:
    print('Goal succeeded!')
elif result == NavigationResult.CANCELED:
    print('Goal was canceled!')
elif result == NavigationResult.FAILED:
    print('Goal failed!')

4.总结

上面是对nav2_simple_commander的简单介绍,介于本教程目前主要维护foxy版本问题,暂时该部分无法使用,不过你可以使用galactic版本进行实践。


标签:initial,Nav2,pose,feedback,API,nav,导航,goal
From: https://blog.51cto.com/u_15473553/7398098

相关文章

  • 【Jetpack】Navigation 导航组件 ⑤ ( NavigationUI 类使用 )
    文章目录一、NavigationUI类简介二、NavigationUI类使用流程1、创建Fragment2、创建NavigationGraph3、Activity导入NavHostFragment4、创建菜单5、Activity界面开发NavigationUI的主要逻辑(重点)a、添加Fragment布局b、处理Navigation导航逻辑(重点)c、启用菜......
  • 【ROS2机器人入门到实战】FishBot建图与导航实现
    第17章FishBot建图与导航实现写在前面当前平台文章汇总地址:ROS2机器人从入门到实战获取完整教程及配套资料代码,请关注公众号<鱼香ROS>获取教程配套机器人开发平台:两驱版|四驱版为方便交流,搭建了机器人技术问答社区:地址fishros.org.cn大家好,我是小鱼。本章我们主要学习FishBot......
  • ffmpeg中的采集麦克风的 API
    在FFmpeg中,可以使用libavdevice库来采集麦克风的音频。下面是一个简单示例:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<stdint.h> #include<libavformat/avformat.h>#include<libavdevice/avdevice.h> intmain(){av_r......
  • 2023年值得推荐的 API 开发工具
    数字化时代,应用程序编程接口(API)的重要性愈发凸显。API充当着应用程序之间的桥梁,促进数据交换和功能集成。随着API的不断增加和复杂化,开发对API开发工具的要求也越来越高。我们一起来盘点下2023年上半年比较热门的API开发工具。API开发工具的主要作用API开发工具是一......
  • JBPM常用一些api中的方法
    启动流程:Ø获取最新的流程定义:JbpmContext.getCurrentJbpmContext().getGraphSession().findLatestProcessDefinitions();//返回ListØ获取指定流程定义:ProcessDefinitionprocessDefinition=graphSession.loadProcessDefinition(processDefinitionId);Ø创建流程实例:Pr......
  • 如何使用API数据接口给自己创造收益
    使用API数据接口创造收益的方法有很多,以下是一些常见的方法,并附有代码示例:一、数据分析与预测通过获取API数据接口中的大量数据,我们可以进行深入的数据分析,并利用这些数据来预测未来的趋势和行为。例如,我们可以使用Python中的pandas库来处理API返回的数据,并使用scikit-learn等库来......
  • 如何使用API数据接口给自己创造收益
    ​使用API数据接口创造收益的方法有很多,以下是一些常见的方法,并附有代码示例:一、数据分析与预测通过获取API数据接口中的大量数据,我们可以进行深入的数据分析,并利用这些数据来预测未来的趋势和行为。例如,我们可以使用Python中的pandas库来处理API返回的数据,并使用scikit-learn......
  • Apipost forEach控制器怎么用
    最近,Apipost对自动化测试进行了优化,新增foreach控制器。这个新功能的引入为自动化测试带来了更高的效率和灵活性。本文将介绍Apipost的foreach控制器,解释其用途和优势,帮助您更好地利用这一功能提升自己的测试工作。什么是foreach控制器?Foreach控制器允许您在测试用例中迭代执行多......
  • Apipost forEach控制器怎么用
    最近,Apipost对自动化测试进行了优化,新增foreach控制器。这个新功能的引入为自动化测试带来了更高的效率和灵活性。本文将介绍Apipost的foreach控制器,解释其用途和优势,帮助您更好地利用这一功能提升自己的测试工作。什么是foreach控制器?Foreach控制器允许您在测试用例中迭代执行......
  • FastApi---Tortoise-ORM异步框架的使用
     1.配置 pipinstalltortoise-ormpipinstallaerichpipinstallaiomysql 参数配置#settings.pyTORTOISE_ORM={'connections':{'default':{#'engine':'tortoise.backends.asyncpg',Po......