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

东莞网站建设都用哪个好网站续费协议

东莞网站建设都用哪个好,网站续费协议,网站图片如何做超链接,wordpress主机有什么优一、说明 这篇文章描述了一种在 ROS2 中实现受控重播器的轻量级方法。用以测试中将现象重新播放一遍#xff0c;以实现调参或故障定位的目的。所有源代码都可以在这里找到。该帖子也可在此处获得。 二、问题#xff1a;不同步重播 任何曾经认真开发过 ROS2 的人都会知道这个问… 一、说明 这篇文章描述了一种在 ROS2 中实现受控重播器的轻量级方法。用以测试中将现象重新播放一遍以实现调参或故障定位的目的。所有源代码都可以在这里找到。该帖子也可在此处获得。 二、问题不同步重播 任何曾经认真开发过 ROS2 的人都会知道这个问题我们想调试我们的管道或改进算法的微小部分但当我们反复运行管道时我们得到了不同的结果。如果我们处于开发的早期阶段并且我们的管道运行速度不够快无法实时处理所有数据我们最终会丢失消息。如果我们在代码中放置断点我们最终会丢失消息。如果我们在后台的同一台机器上发生了一些完全不相关但半繁重的处理我们最终会丢失消息。最糟糕的是症状在每次运行之间可能会有所不同从完全系统故障到对结果的影响最小因此我们通常不会直接意识到消息丢失可能是问题所在。 当然我们可以非常缓慢地重播所有数据。但是我们最终会永远等待直到重播达到我们感兴趣的点。同样如果我们想在CI服务器上运行管道我们通常不知道有多少计算资源可用以及我们可以多快地运行我们的系统。 总结重播器以固定速率重播其消息对于算法管道来说这可能是快或慢。因此我们要么失去时间要么得到不确定的结果。 三、方法受控回放 解决这个问题的基本思想非常简单我们需要一个考虑到管道当前状态的受控重放。然而由于ROS2s的异步和松散耦合设计实现这一点并非易事。特别是因为我们不想用“仅”开发所需的机制来混淆整个系统。 不幸的是ROS2 没有针对这个在我看来非常明显问题的构建解决方案。当然它是开源的我们可以着手实现我们自己的 ros bag 重播器。但是如上所述我们希望在框架内开发一种算法。我们不想先实现框架。幸运的是到目前为止ROS2工具已经发展了很多并且只需相对较少的努力我们就可以应用一种在实践中可以很好地工作的解决方法。 这个概念是有一个额外的节点就像重播者的遥控器一样。每当所有节点通知远程节点它们已准备就绪时它都会触发新消息的重播。 四、实施 使用服务客户端体系结构可以相对直接地完成实现如下所述。包括一个小示例在内的所有代码都可以在这里找到。它也可以很容易地作为 ROS 包包含在内。 远程是一个附加节点充当rosbag2_replayer的代理。它使用“突发”服务每 T 秒触发接下来的 N 条消息并等待每个节点的确认。实现自定义服务确实在调用方的身份旁边传输“就绪”信号。不幸的是当我们使用突发调用“跳过”袋子时重播者不会自动关闭。因此额外的计时器会定期检查模拟时间是否仍在增加以确定重播是否已结束。这要求重播者发布时钟-clock并使用 use-sim-time 参数集运行遥控器。然后节点可以在重放结束时关闭自身/其整个组合。 我们可以将其作为可组合节点包含也可以通过以下方式启动它 ros2 run controllable_replay remote --ros-args -p use_sim_time:True -p batch_size:10 -p period:0.01 -p automatic_shutdown:5 这将每 10 毫秒播放 10 条消息并在重播者处于非活动状态 5 秒后关闭节点。 五、算法节点 在算法方面我们需要一些逻辑来通知遥控器我们已经准备好了。在简单节点中我们可以在每个回调的末尾添加它。在更复杂的节点中消息和回调之间可能没有一对一的映射。在这种情况下需要一些额外的逻辑来监视节点的工作负载例如通过观察输入队列大小。 对于一个简单的示例我们将创建一个字符串侦听器节点该节点计算收到的消息数并模拟具有特定时间长度的繁重任务。任务完成后它将发布自己的消息并通知远程设备已准备就绪。 #include Listener.h using namespace std::chrono_literals; namespace controlled_replay_example { Listener::Listener(const rclcpp::NodeOptions options) : rclcpp::Node(Listener, options), _cliReady{create_clientcontrolled_replay_interfaces::srv::Ready(/ready)}, _pub{create_publisherstd_msgs::msg::String(/hearsay, 10)}, _sub{create_subscriptionstd_msgs::msg::String( /chatter, 10, [](std_msgs::msg::String::ConstSharedPtr msg) { _ctr; std::this_thread::sleep_for(get_parameter(task_time).as_double() * 1000ms); // heavy taskauto rq std::make_sharedcontrolled_replay_interfaces::srv::Ready::Request();rq-isready true; _cliReady-async_send_request(rq); // inform replayer})}, _timer{create_wall_timer(1s, []() { RCLCPP_INFO(get_logger(), Received messages: %ld, _ctr); })} { declare_parameter(task_time, 1.0); } } // namespace controlled_replay_example #include rclcpp_components/register_node_macro.hpp RCLCPP_COMPONENTS_REGISTER_NODE(controlled_replay_example::Listener) 我们使用一个包含 464 个字符串消息的包以 100hz 的速率测试上面的示例。我们将模拟一个算法管道其中包含两个具有不同时间长度的链节点。第一个节点将以 100hz 运行但第二个节点仅以 2hz 运行。因此从理论上讲第一个节点应该能够处理所有消息但第二个节点会错过一些消息。 在第一次运行中我们将在没有远程的情况下简单地运行管道。 #!/bin/bash ros2 run controlled_replay_example listener --ros-args -p task_time:0.01 -r __node:listener1 ros2 run controlled_replay_example listener --ros-args -p task_time:0.5 -r __node:listener2 -r chatter:hearsay -r hearsay:hearsay1 ros2 bag play bag 重放期间的节点图 [INFO] [1695973373.033875499] [listener2]: Received messages: 8 [INFO] [1695973373.732552274] [listener1]: Received messages: 445 我们可以看到即使是第一个节点也丢失了一些消息。但是第一个只处理了8个 在第二次运行中我们将使用远程运行管道。 #!/bin/bash ros2 run controlled_replay_example listener --ros-args -p task_time:0.01 -r __node:listener1 ros2 run controlled_replay_example listener --ros-args -p task_time:0.5 -r __node:listener2 -r chatter:hearsay -r hearsay:hearsay1 ros2 run controlled_replay remote --ros-args -p batch_size:1 -p use_sim_time:True ros2 bag play --clock --start-paused bag 具有受控回放的节点图 [INFO] [1695973373.033875499] [listener2]: Received messages: 464 [INFO] [1695973373.732552274] [listener1]: Received messages: 464 我们可以看到两个节点都收到了所有消息。 六、结论 我们已经看到了一种在 ROS2 中获得可控重放的简单方法。通过添加一个额外的远程节点我们可以将大部分任务封装在远离实际管道的地方。遥控器将重播速度减慢到节点可以处理的任何速度从而避免丢失消息。 此处提供的远程可以通过 ROS2 包管理包含在内。 七、未解决的问题和未来工作 很快重播者应该可以作为可组合节点使用。我希望这将进一步提高重播速度。它应该与上述实现顺利配合。使用这些服务时ros bag 重播器会向终端发送垃圾邮件其中包含每个服务的消息我没有找到一种方法来阻止日志记录部分将其重定向到 /dev/null。但是这超过了重播者的所有输出最好找到更简单的方法来监视节点的工作负载甚至可能是外部的工作负载。例如如果我们能以某种方式访问待处理的回调这已经有所帮助但我没有找到做到这一点的方法。
http://www.hkea.cn/news/14452611/

相关文章:

  • 注册一个网站域名一年需要多少钱手机排行榜2022前十名
  • 网站加载速度广东建设企业网站哪家好
  • 网站加速服务如何自己做企业网站
  • 网站目录 index.html久久时间计算网
  • 单位门户网站功能wordpress部分图片
  • 三型布局的网站谷歌搜索引擎 google
  • 数据库做图书管理系统网站seo优化培训课程
  • 郑州专业做微信网站女子拿快递被感染新冠
  • 茅台技术开发公司官网seo排名优化软件有用
  • wordpress 网站 图标关键词排名查询工具有哪些
  • 企业网站 源码网站的内容做证据观点
  • 视频网站开发房产网排名
  • react做的网站有哪些怎样建个小公司的网站
  • 免费刷赞网站推广qq免费华为 wordpress
  • 建设银行 成都 招聘网站网站建设成本报表
  • 广州手机网站设计展示网站报价方案
  • 高中文凭能学做网站吗网站开发项目设计文档
  • 电脑网站打不开怎么解决做个网站多少钱 百度能查到的
  • 网站开发环境是什么意思.mil 域名网站有哪些
  • 中山网站建设工具猫直播平台app开发
  • 建站系统cms是什么asp网站图片
  • 如何做网站的维护苏州互联网招聘
  • 网站建设需要集齐哪5份资料网站建设上机考试题目
  • 个人建站做图片能去哪些网站
  • 如何低成本做网站推广企业网站营销
  • 做静态网站深圳led网站建设
  • 怎么做网站滑动图片部分南通企业建设网站电话
  • 秦皇岛网站推广哪家好深圳市工程交易服务主页
  • 如何做网站本地服务器吗吸引人的软文标题
  • 企业内部管理系统网站建设网站建立企业