ROS2机器人笔记20-07-24

时间:2022-07-22
本文章向大家介绍ROS2机器人笔记20-07-24,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

ROS小困惑之一:

  • 是否曾经花了数小时试图找出造成问题的错误的原因,却发现它是由配置文件中的错误引起的?

解决方案:

  1. 丰富的工程项目调试经验
  2. 自动化配置流程

如何通过LTE直接连接远程机器人测试并操作?

  • 远程部署机器人

可广泛用于各种场景,如培训教育,通过在线远程部署机器人,达成更好的实践效果;

工业和军事领域就不再赘述。

云机器人编程工具:

  • AWS RoboMaker

为什么在ROS2中开发很重要?

ROS2的开发存在一个“鸡与蛋”问题,先后问题。ROS的最重要组成部分是生动活跃的软件包生态系统,因为引入支持各种传感器和机器人的现成软件包的能力为机器人专家带来了巨大的优势。尽管核心rclcpp软件包功能齐全且功能强大,但我们需要用于机器人应用中常用的传感器和机器人的更多ROS2接口软件包,目前不如ROS1丰富。这种差距带来了一个难题:由于缺乏对硬件的支持,因此不鼓励潜在用户使用ROS2,这减少了供应商为其产品开发和支持新ROS2软件包的动力。

为了打破这一周期,大量开发人员需要致力于ROS2并帮助填充生态系统。对于早期采用者来说肯定有好处:英特尔的RealSense RGB-D摄像机系列具有非常早的ROS2支持,因此,该摄像机已成为ROS2项目的首选3D感知解决方案

机器人集成

我们决定围绕Universal Robots UR10e构建Project Alpha。它的覆盖范围,有效负载能力和协作能力满足了我们特定于应用程序的要求。此外,我们有将UR与先前项目集成的经验,并且我们的实验室中已经有一些手头。幸运的是,该项目的开始与出色的Universal_Robots_ROS_Driver软件包的beta版本同时发布,该软件包已成为我们的首选驱动程序。

但是,现在面临着巨大的挑战:UR机器人驱动程序是ROS1软件包,并且我们正在开发ROS2系统。工业机器人几乎没有ROS2驱动程序支持,因为开发新的机器人驱动程序的过程需要大量的专业工作。为了应对这一挑战,我们鼓励社区克服这一障碍,并投入精力为工业机器人开发新的ROS2驱动程序。

暂时,ros1_bridge软件包足以在ROS1和ROS2网络之间中继联合状态主题和机器人控制服务。我们还调整了自定义动作桥节点,以将FollowJointTrajectory动作目标从ROS2运动计划和执行节点传递到ROS1 UR驱动程序节点。有了这些组件之后,就可以计划了!

编写新节点

当我们的机器人准备移动时,没有可用的ROS2本机运动计划管道。当时,MoveIt2仍处于Alpha状态,并且正在进行重大开发。为了解决这一差距,我们决定将Tesseract运动计划库移植到ROS2。这项工作产生了三个存储库:独立于ROS的Tesseract核心存储库,ROS1 tesseract_ros存储库及其紧密的ROS2同胞tesseract_ros2。

当我们通过Tesseract的ROS2端口工作并为Project Alpha创建了新的系统特定的ROS2程序包时,我们发现自己发现了一套新的ROS2最佳实践方法。例如,创建C++ ROS2节点时有两种不同的方法:

  • 传递Node实例:创建一个自定义类,该类在其构造函数中采用通用Node对象。这类似于在ROS1中使用NodeHandle对象的方式。这些类非常灵活:它们可以作为独立节点包装在一个瘦可执行文件中,也可以作为更复杂节点的一个方面包含在内。该类的核心机制可以通过C ++函数和ROS2服务公开。
  • 扩展Node类:创建一个继承并扩展ROS2 Node基类的类,并添加特定于应用程序的成员变量和函数。我的印象是,这与ROS2的设计意图更加一致,因为诸如日志记录和时间测量之类的关键功能作为Node类的成员函数公开。这种方法还提供了ROS2独有的新功能,例如节点生命周期管理。最终,我们使用了两种方法。我们发现第一种策略使直接移植ROS节点变得更加容易,因此tesseract_ros2软件包中的节点使用此方法。对于新开发的Project Alpha节点,我们使用了第二种策略,因为我们有更多的自由来从头开始设计这些新节点,从而充分利用ROS2。

使用DDS中间件

ROS2 DDS通信中间件层表示对先前ROS版本中使用的基于TCP/IP的系统的实质性改进。ROS2附带了由多个DDS供应商提供的各种RMW(ROS MiddleWare)实现。幸运的是,在不同的RMW实现之间进行切换非常简单:只需安装新RMW版本的软件包,设置RMW_IMPLEMENTATION环境变量以指定所需的版本,并在工作区中重建任何内置源代码的软件包提供消息定义。

令人惊讶的是,我们选择使用哪种RMW实施对Alpha项目的性能产生了重大影响,尽管直到开发相对较晚才明确。

在项目开始时,我们使用FastRTPS,它是ROS2 Dashing的默认选项。对于我们最初的节点收集来说,它工作得很好,但是当我们为UR10e机器人集成ROS驱动程序时,我们开始遇到丢弃的消息和更高的延迟。我们的理论是,UR10e的实时控制循环产生的大量消息使RMW层在默认设置下不堪重负。我们开始探索替代方案。

我们的下一个选择是OpenSplice,它消除了UR10e丢弃消息的问题。但是,我们发现了几个新问题:节点花了几秒钟来完全初始化并开始发布消息,而新启动的节点发布的主题通常对于已经在运行的节点不可见。Project Alpha的节点旨在在系统启动时一起启动,并在整个系统运行期间保持活动状态,因此我们能够在一段时间内解决此问题。

当我们更新Project Alpha以使用ROS2 Eloquent时,我们决定尝试新近可用的CycloneDDS RMW实现。我们发现它不受以前的任何问题的影响:它允许我们的节点在启动时快速启动,处理高速率主题以及诸如高分辨率点云之类的大消息,还可以优雅地管理任意加入和删除的节点。离开网络。Project Alpha已交付给配置为使用CycloneDDS的客户端。

结论

Alpha项目取得了成功,能够利用ROS2开发经验来充满信心地进行新项目。能够回答一些重要的问题:

开发纯ROS2系统或混合ROS/ROS2系统更好吗?最好开发和维护专门的ROS2系统。直到ROS2生态系统的发展赶上来之前,混合系统将成为现实。

应该使用哪种ROS2版本?我们一直发现使用最新的ROS2版本以新特性和功能的形式可以带来很多好处。

ROS2是否“准备工业化”?令人震惊的是!赶快去开发ROS2系统吧!

开源与专利

开源的代码如果使用了已经是专利的技术,怎么办??????

最后上传有趣的两张图片吧: