当前位置: 首页 > news >正文

做一个旅游团网站怎么做网站重构工程师

做一个旅游团网站怎么做,网站重构工程师,流量宝,建筑资料免费下载网站在ROS 2中#xff0c;Executor是一个核心概念#xff0c;负责管理节点#xff08;Node#xff09;中的回调函数#xff0c;如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调#xff0c;从而在ROS 2系统中实现异步编程。 ROS 2 … 在ROS 2中Executor是一个核心概念负责管理节点Node中的回调函数如订阅消息的回调、服务请求的回调、定时器回调等。Executor决定了何时以及如何执行这些回调从而在ROS 2系统中实现异步编程。 ROS 2 Executor的工作原理 在ROS 2中节点是构成系统的基本单元每个节点可以发布和订阅主题Topic提供和使用服务Service以及使用定时器Timer。Executor是控制节点中回调函数执行的机制。当消息到达或服务请求发生时这些回调函数需要被调用。Executor负责从节点中收集待处理的回调并决定执行它们的顺序和时间。 ROS 2 Executor的类型 ROS 2提供了几种不同类型的Executor每种都有其特定的用途和调度策略 SingleThreadedExecutor这是最简单的Executor它在单个线程中顺序执行所有回调。这意味着在任意时刻只有一个回调被执行直到完成。这种Executor适用于不需要并行处理的简单应用。MultiThreadedExecutor这种Executor允许在多个线程中并行执行回调。它使用一个线程池回调任务可以在不同的线程中同时运行适用于需要处理大量并行任务的复杂应用。StaticSingleThreadedExecutor这是对SingleThreadedExecutor的优化适用于性能要求较高的场景。它在内部缓存了一些信息以减少每次执行回调时的开销。 通过为每个节点调用 add_node(..) 所有三个执行器都可以与多个节点一起使用。 rclcpp::Node::SharedPtr node1 ... rclcpp::Node::SharedPtr node2 ... rclcpp::Node::SharedPtr node3 ...rclcpp::executors::StaticSingleThreadedExecutor executor; executor.add_node(node1); executor.add_node(node2); executor.add_node(node3); executor.spin();尽管基本 API 非常相似但ROS 2 Executor 类在 rclcpp 中的 executor.hpp 中、rclpy 中的 executors.py 中或 rclc 中的 executor.h 中比 ROS 1 中的spin机制提供了更多对执行管理的控制。接下来的内容我们重点关注 C 客户端库 rclcpp。 基本使用方法 在最简单的情况下主线程用于通过调用 rclcpp::spin(..) 来处理 Node 的传入消息和事件如下所示 int main(int argc, char* argv[]) {// Some initialization.rclcpp::init(argc, argv);...// Instantiate a node.rclcpp::Node::SharedPtr node ...// Run the executor.rclcpp::spin(node);// Shutdown and exit....return 0; } 对 spin(node) 的调用基本上扩展为单线程执行器的实例化和调用这是最简单的执行器 rclcpp::executors::SingleThreadedExecutor executor; executor.add_node(node); executor.spin(); 通过调用 Executor 实例的 spin()当前线程开始查询 rcl 和中间件层以获取传入消息和其他事件并调用相应的回调函数直到节点关闭。 为了不影响中间件的 QoS 设置传入消息不会存储在客户端库层的队列中而是保留在中间件中直到由回调函数进行处理这是与 ROS 1 的一个关键区别。等待集waitset用于通知执行器中间件层上的可用消息每个队列有一个二进制标志。 等待集还用于检测计时器何时到期。 单线程执行器也被组件的容器进程使用即在没有显式主函数的情况下创建和执行节点的所有情况。 回调callback分组 ROS 2 允许按组组织节点的回调。 在 rclcpp 中可以通过 Node 类的 create_callback_group 函数创建这样的回调组。 在rclpy中通过调用特定回调组类型的构造函数来完成相同的操作。 回调组必须在节点的整个执行过程中存储例如作为类成员否则执行器将无法触发回调。 然后可以在创建订阅、计时器等时指定该回调组 – 例如通过订阅选项C或Python。 my_callback_group MutuallyExclusiveCallbackGroup() my_subscription self.create_subscription(Int32, /topic, self.callback, qos_profile1, callback_groupmy_callback_group) 所有在没有指定回调组的情况下创建的订阅、计时器等都将分配给默认回调组。 默认回调组可以通过 rclcpp 中的 NodeBaseInterface::get_default_callback_group() 和 rclpy 中的 Node.default_callback_group 查询。 有两种类型的回调组必须在实例化时指定类型 Mutually exclusive: 该组的回调不得并行执行。Reentrant: 该组的回调可以并行执行。 不同回调组的回调可能总是并行执行。 多线程执行器使用其线程作为资源池根据这些条件并行处理尽可能多的回调。 有关如何有效使用回调组的提示请参阅使用回调组。 自 Galatic 版本以来rclcpp 中 Executor 基类的接口已通过新函数 add_callback_group(..) 进行了细化。 这允许将回调组分配给不同的执行器。 通过使用操作系统调度程序配置底层线程特定回调可以优先于其他回调。 例如控制循环的订阅和定时器可以优先于节点的所有其他订阅和标准服务。 example_rclcpp_cbg_executor 包提供了此机制的演示。 调度语义 如果回调的处理时间短于消息和事件发生的周期Executor 基本上按照 FIFO 的顺序处理它们。 但是如果某些回调的处理时间较长消息和事件将在堆栈的较低层排队。 等待集机制只向执行器报告关于这些队列的很少的信息。 具体来说它仅报告是否有特定主题的消息。 执行器使用此信息以循环方式处理消息包括服务和操作但不是按照 FIFO 顺序。 下面的流程图直观地展示了这种调度语义。 Casini 等人在 ECRTS 2019 上的论文首次描述了这种语义注意本文还解释了计时器事件的优先级高于所有其他消息。这种优先级在 Eloquent 版本中已被删除。 Executor的使用 在ROS 2应用程序中开发者需要创建一个或多个节点并将它们添加到Executor。然后开发者调用Executor的spin方法来开始循环等待并执行回调。例如使用SingleThreadedExecutor的基本用法如下 import rclpy from rclpy.executors import SingleThreadedExecutor from my_package import MyNode def main(argsNone): rclpy.init(argsargs) node MyNode() executor SingleThreadedExecutor() executor.add_node(node) try:executor.spin() # 开始执行回调 finally:executor.remove_node(node)rclpy.shutdown() if name main: main() 展望 虽然 rclcpp 的三个执行器适用于大多数应用程序但它也存在一些问题使它们不适合实时应用程序因为实时应用程序需要明确定义的执行时间、确定性以及对执行顺序的自定义控制。 以下是其中一些问题的摘要 复杂且混合的调度语义。 理想情况下您需要明确定义的调度语义来执行正式的时序分析。回调可能会受到优先级反转的影响。 较高优先级的回调可能会被较低优先级的回调阻止。没有对回调执行顺序的显式控制。没有对特定主题的触发的内置控制。 此外执行器在 CPU 和内存使用方面的开销也相当大。 静态单线程执行器大大减少了这种开销但对于某些应用程序来说可能还不够。 这些问题已通过以下开发得到部分解决 rclcpp WaitSetrclcpp 的 WaitSet 类允许直接等待订阅、计时器、服务服务器、操作服务器等而不是使用 Executor。 它可用于实现确定性的、用户定义的处理序列可能会一起处理来自不同订阅的多个消息。 example_rclcpp_wait_set 包提供了几个使用此用户级等待设置机制的示例。rclc 执行器来自 C 客户端库 rclc 的执行器为 micro-ROS 开发为用户提供了对回调执行顺序的细粒度控制并允许自定义触发条件来激活回调。 此外它还实现了逻辑执行时间LET语义的思想。 总结 ROS 2的Executor提供了一个灵活且强大的机制来管理和调度节点中的回调函数使得开发者可以根据应用的需求选择或自定义合适的执行策略。通过合理地使用Executor可以有效地提高ROS 2应用程序的性能和响应能力。 作者个人Blog ROS 2学习笔记系列文章 ROS 2学习笔记 归档 - HYs Blog
http://www.w-s-a.com/news/946364/

相关文章:

  • 开发一个卖东西的网站多少站长工具永久
  • 公司网站怎么突然多了好多友情链接如何删除宁波有几个区
  • 临沂seo网站推广wordpress新编辑器
  • c2c网站设计店面logo设计制作
  • 网站建设任务执行书重庆今天新闻事件
  • 怎样发布自己的网站南宁制作网站公司
  • wordpress装多站点百度查一下
  • 怎么优化一个网站搭建网站免费空间
  • 山东建设和城乡建设厅注册中心网站首页wordpress安装教材
  • 个人风采网站制作毕节网站开发公司电话
  • 网络网站销售设计主题和设计理念
  • 做网站一般用什么服务器承德专业做网站
  • 松北区建设局网站网站建设分为几种
  • 网站建设的合同 体会智联招聘网站建设情况
  • 记的网站域名wordpress地方信息主题
  • 淄博好的建网站公司网站建设 海口
  • 有人做网站花了10几万2017做啥网站能致富
  • 做网站有什么软件cod建站平台
  • 合肥学校网站建设怎么做免费的产品图片网站
  • 营养早餐网站的设计与制作建设通网站怎么查项目经理在建
  • 浑南区建设局网站永州网站建设公司推荐
  • 做外贸都得有网站吗绵阳网站建设制作
  • 功能性的网站建设北京餐饮品牌设计公司
  • php做网站优势视频直播软件
  • 怎么安装php网站哪个网站是专门为建设方服务的
  • 重慶网站开发sina app engine wordpress
  • wampserver网站开发步骤中冠工程管理咨询有限公司
  • 自己做网站商城需要营业执照吗老外做牛排的视频网站
  • 网站推广效果的评估指标主要包括公司广告推广
  • 昆明网站建设那家好哪个网站学做凉皮