ROS2机器人笔记20-08-02

ROS发展神速,必须天天学习,否则落后太多。

ROS2机器人笔记20-08-02_第1张图片

具体参考链接:https://discourse.ros.org/t/new-robust-pre-trained-semantic-segmentation-models-cvpr-20/15607

 

具体参考链接:https://discourse.ros.org/t/quadruped-robot-controller/15625

具体参考链接:https://ubuntu.com/blog/simulate-the-turtlebot3

ROS2机器人笔记20-08-02_第2张图片

具体参考链接:https://github.com/aws-samples/aws-robomaker-sample-application-pr2-hospital


~如下为机器翻译~


2020年使用ROS2需要做的五件事

在过去的几个月中,我一直在使用ROS2。正如我之前提到的,似乎没有太多运行ROS2的真正机器人。我们有一个鸡到蛋的问题,其中工具尚未完全为真正的机器人所用,但是直到人们开始在真正的机器人上使用ROS2为止,没人知道真正的痛点。

在ROS2中可以完成很多事情。但是实现所有这些的时间有限-因此,我们需要关注那些使机器人及其开发人员能够“生存”的过程。

我经常被问到ROS2是否已准备就绪。我很长一段时间的回答是“不”。此时,我将其升级为“也许取决于您在做什么”。这篇文章描述了我认为对大多数机器人专家来说答案是“好”的五件事。我实际上希望这个职位的年龄很差,并且所有这些事情都会在ROS2中发生。

RVIZ,rcl2cli的自动QoS

服务质量(QoS)可能是ROS1和ROS2之间最大的变化-也是我所知最多的问题。ROS2 Foxy版本向命令添加了一个 --verbose选项,ros2 topic info这是朝正确方向迈出的重要一步。这使您可以快速诊断发布者和订阅者何时使用不兼容的QoS。

rosbag2在ROS2 Foxy中有了巨大的升级:它会自动确定服务质量(QoS)的正确设置,以便它始终连接到您要记录的发布者(请注意:如果多个发布者正在使用不同的QoS发布到同一个主题它可能不起作用-但实际上,是谁干的?)。

现在,我们需要RVIZ2和命令行实用程序(CLI)中的该功能。这些是调试工具,因此它们需要能够在大多数情况下“正常工作”。

由于大多数时候您都使用RVIZ2连接到传感器数据,该数据通常以非默认QoS(传感器数据配置文件)发布,因此,RVIZ在所有内容上都使用默认QoS(与传感器不兼容)绝对是傻瓜个人资料)。 默认情况下,即使是像锁定主题这样简单的事情也将不起作用。

这不是一个容易的问题。这将涉及对RVIZ的重大更改以及对较低级别的软件包(如)的更改message_filters,但是我敢肯定,这是一个最大的,物尽其用的改进,它将使ROS2更适合于机器人开发人员。

文献资料

好的,我听起来像是一个破记录(或者您8岁的移动操纵器上吱吱作响的脚轮),但这确实很重要。

我不仅在这里谈论缺少教程。在2011-2014年代(当社区经历了巨大的增长时),ROS使之成为新开发者的福音所在,其中之一就是非常精美且最新的Wiki。如果您想查找有关软件包的信息,可以转到wiki.ros.org/package_name-文档就在那里(或者如果不是,您有个很好的主意,认为该软件包尚未准备就绪)时间)。使用ROS2,我们还没有一个集中的文档记录场所-我认为这阻碍了社区的发展。

还有“用户文档”的问题。假设专业的编程背景(几乎比ROS1文档还要多)编写ROS2的几乎所有内容。阅读源代码并不是您应该学习如何为激光扫描仪运行ROS驱动程序的方式

建立社区非常重要。修复错误的最佳方法是找到需要修复的开发人员。我只使用了ROS2几个月的时间-那时我已经修复了多个ROS2软件包中的六个错误,甚至还维护了urg_node和相关软件包的ROS2端口 。

订户连接回调

现在,我们将进入一个超级技术问题-但影响是巨大的-特别是对于那些进行感知的人(通常来说,这是机器人技术的很大一部分)。在ROS1中创建发布者时,您可以注册一个回调,只要订阅者连接或断开连接,该回调便会被调用。ROS2中尚不存在此功能,但我认为它对于真正的机器人系统至关重要。原因如下:

机器人可以生成大量传感器数据-特别是在将处理管道添加到混合中时。有时,您可能需要具有颜色和深度信息的高分辨率点云。有时您需要低分辨率的无色点云。当机器人系统执行多个任务时,尤其如此。例如,假设有一个既可移动又可操纵的机器人-用于导航环境,它需要高帧速,低分辨率的点云来避免碰撞。当移动操纵器到达目的地时,它希望切换到高分辨率点云来决定要抓取什么。

有时,您实际上无法发布所有可能的数据流,因为它会使硬件不堪重负(例如,如果要同时从大多数RGBD传感器提取深度,颜色和IR,则会使USB总线饱和)。

在ROS1中,您可以创建“惰性发布者”,以便这些密集型数据类型的创建者仅在有人监听时才创建和发布数据。连接回调将通知他们有人在听。在各种驱动程序以及image_proc和 depth_image_proc>程序包中缺少懒惰的发布者是构建高性能感知系统的真正挑战。当人们问我“ ROS2准备好了吗?”时,我最近的第一个问题是“您在做些什么?

需要明确的是,在某些情况下有一些解决方法。如果您要自己创建发布者,则可以:

  • 创建一个循环,以“轮询”是否有订阅者(使用get_subscription_count),就像我现在在openni2_camera软件包中所做的那样。
  • 使用参数动态重新配置正在运行的内容。尽管这在某些情况下可能行得通(甚至可能是某些用例的首选解决方案),但它可能导致系统更脆弱。
  • 通过对给定机械手的确切需求进行硬编码,重新构造系统,永远不需要懒惰的发布者。尽管其中一些可能会在更高的生产环境中发生,但它并不适合于代码重用和共享,而这正是ROS1的主要卖点之一。

请注意,我说,“如果您要自己创建发布器”。由于缺少订户连接回调,ROS1中大量依赖于其ROS2端口被破坏或损坏的软件包:

  • message_filters
  • image_transport
  • image_proc
  • depth_image_proc

相关答案.ros.org:

  • 订阅匹配中的ROS2发布者回调

开发人员参与

注意:在撰写这篇文章的那个月,已经回答了许多问题,所以我们已经到了!

我记得人们在开玩笑说ROS Answers的名字是错误的,因为那里没有答案,只有问题。实际上,这不是真的-除非您搜索 ROS2标签。

那里有很多非常好的问题。例如,文档中没有的东西,可能与大量用户有关。以下是一些示例:

  • rmw_serialize和反序列化线程安全吗?
  • 如何退订主题?
  • 为什么要在Python中使用destory_node
  • set(node_plugins)实际做什么?

ROS2开发人员,请注意:我们在该系统中拥有许多出色的功能,请帮助您的用户学习如何实际使用它们-也许他们甚至可以帮助您做出贡献!

您在ROS2上的机器人

可能还藏有许多其他错误/问题/等。您的机器人可能与我的机器人不完全相同-用例将有所不同。我们需要更多运行ROS2的机器人来挖掘事物。好消息是:您可以在同一系统上安装ROS1和ROS2,并轻松地来回切换。


 

你可能感兴趣的:(ROS2机器人笔记20-08-02)