您当前的位置: 首页 > 

【Nav2中文网】十二、简单控制命令API

发布时间:2022-04-26 09:05:53 ,浏览量:6

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

Nav2软件堆栈中Simple (Python3) Commander的目标是为Python3用户提供 “navigation as a library” 功能。Nav2项目提供了一个API来为用户处理ROS2和动作服务器的所有任务,这样用户就可以专注于构建利用Nav2功能的应用程序(在根据自己的喜好对所选的插件进行配置后)。 Nav2中国Simple (Python3) Commander还提供API使用的演示和实例 在nav2_simple_commander用于帮助用户构建自主移动机器人的基本通用功能。 [校准@haisenzeng]

下面是一个简单的演示。注意:goToPose()、goThroughPoses()、followWaypoints()等方法是非阻塞的,故可以在单线程应用程序中接收和处理反馈。因此,在等待任务完成时,while not nav.isNavComplete()的设计设计很有必要对导航完成中的更改进行轮询,而且如果导航没有完成,还要对应用程序关心的一些任务(例如处理反馈、使用机器人正在收集的数据做一些事情、或故障检测等)进行轮询。 [校准@haisenzeng]

可以使用这个简单指挥官抢占相同类型的命令 (例如g.你可以先用另一goToPose()抢占goToPose()),但如果在goToPose()、goThroughPoses()或followWaypoints()之间切换,必须明确取消当前命令并发出新命令。 [校准@haisenzeng]

from nav2_simple_commander.robot_navigator import BasicNavigator
import rclpy

rclpy.init()
nav = BasicNavigator()

# ...

nav.setInitialPose(init_pose)
nav.waitUntilNav2Active() # if autostarted, else use lifecycleStartup()

# ...

nav.goToPose(goal_pose)
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!')
控制命令(Commander )API

基本导航器提供的方法如下所示,包括输入和预期收益。如果服务器出现故障,它可能会引发异常或返回 None 对象,因此请确保将导航调用正确封装在try/catch中并检查 None 类型的返回。 [校准@haisenzeng]

机器人导航方法 描述 [校准@haisenzeng] - setInitialPose(initial_pose) 设置机器人的初始姿势 (PoseStamped) 设置已进行定位。 [校准@haisenzeng] - - goThroughPoses(poses) 请求机器人驾驶通过一组姿势 (PoseStamped列表)。 [校准@haisenzeng] goToPose(pose) 请求机器人行驶至某个位姿(PoseStamped)。 [校准@haisenzeng] followWaypoints(poses) 请求机器人遵循一组航点 (PoseStamped列表)行驶。这会在每个位姿上执行所选的TaskExecutor插件。 [校准@haisenzeng] cancelNav() 取消一个正在进行中的goThroughPosesgoToPose或followWaypoints任务。 [校准@haisenzeng] isNavComplete() 检查导航是否完成,在100ms后超时。如果完成则返回True,如果在进行中,则返回False。 [校准@haisenzeng] getFeedback()hhh [校准@mzebra] 获取来自导航任务的反馈消息,返回动作服务器反馈消息。 [校准@haisenzeng] getResult() Gets final result of navigation task, to be called afterisNavCompletereturnsTrue. Returns action server result msg. getPath(start, goal) 获取从起点到目标位姿PoseStamped的路径nav_msgs/Path。 [校准@haisenzeng] getPathThroughPoses(start, goals) 获取从起点到一组目标位姿PoseStamped的路径nav_msgs/Path。 [校准@haisenzeng] changeMap(map_filepath) 请求将当前地图更改为 map_filepath 指向的yaml地图。 [校准@haisenzeng] clearAllCostmaps() 同时清除全局和局部成本地图。 [校准@haisenzeng] clearLocalCostmap() Clears the local costmap. clearGlobalCostmap() 清除全局成本地图。 [校准@haisenzeng] getGlobalCostmap() 返回全局成本地图,nav2_msgs/Costmap。 [校准@haisenzeng] getLocalCostmap() 返回本地成本地图nav2_msgs/Costmap。 [校准@haisenzeng] waitUntilNav2Active() 阻塞直到Nav2完全在线并且生命周期节点处于活动状态。与自动启动或外部生命周期启动结合使用。 [校准@haisenzeng] lifecycleStartup() 向所有生命周期管理服务器发送请求,使它们进入活动状态,如果自动启动是False,并且您希望此程序控制Nav2的生命周期,则使用该方法。 [校准@haisenzeng] lifecycleShutdown() 向所有生命周期管理服务器发送请求以关闭它们。 [校准@haisenzeng] 示例和演示

所有这些方法都可以在 package 中找到。 [校准@haisenzeng]

Alternative text在nav2_simple_commander中有几个示例用于突出显示用户可用的API函数: [校准@小鱼]

  • example_nav_to_pose.py-此示例展示了导航仪导航到某位姿的功能,以及许多辅助方法。 [校准@haisenzeng]
  • 这个example_nav_through_poses.py-演示导航器的导航姿势能力,以及许多辅助方法。 [待校准@1142]
  • example_waypoint_follower.py-此示例展示了导航仪的航点跟随功能,以及许多所需的辅助方法。 [校准@haisenzeng]

nav2_simple_commander有一些演示来突显用户可以使用API构建的几个简单的自主机器人应用程序: [校准@haisenzeng]

  • demo_security.py– 这是一个简单的机器人安全应用程序,展示了如何让机器人使用导航位姿无限期地沿着安全路线巡逻。 [校准@haisenzeng]
  • demo_picking.py– 此演示是一个简单的物品拣选应用程序,展示了如何让机器人行驶到仓库中的特定货架来拣选物品,或者让人将物品放入篮子中并使用Navigate To Pose将该篮子运送到目的地进行运输。 [校准@haisenzeng]
  • demo_inspection.py-这是一个简单的货架检查应用程序,展示了如何使用Waypoint Follower和任务执行器对货架进行拍照、RFID扫描等,以分析当前货架状态并定位仓库中的物品。 [校准@haisenzeng]
  • 本文主要校准贡献:haisenzeng
  • 本文遵循知识共享协议,禁止未授权商用转载
关注
打赏
1688896170
查看更多评论

暂无认证

  • 6浏览

    0关注

    106485博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文
立即登录/注册

微信扫码登录

0.0462s