首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ROS入门通俗简介

ROS入门通俗简介

作者头像
McGL
发布2020-10-30 09:50:27
发布2020-10-30 09:50:27
1.7K0
举报
文章被收录于专栏:PyVisionPyVision

ROS是最流行的机器人操作系统,但官方 Introduction 写的很一般,这篇把系统各要点和如何组合起来的介绍得通俗易懂。

作者:Jason Bowling 编译:McGL

每个机器人制造者的生活中都会有这样一个时刻,他们开始考虑建造一些... 史诗般的东西(钢铁侠?)。也许你已经构建了几个简单的 Arduino (一种开源开发板)机器人,它们可以绕着房间跑,避开障碍物,或者跟着地板上的轨迹走。它们非常有趣,你也学到了很多,但是你想做一些更复杂的事情,用一些图像处理,或者网络控制,或者一些你见过的便宜的激光雷达传感器。你必须从头开始写这些东西吗?你从哪里开始呢?

我建议你花点时间学习一下 ROS 的基本知识。

如果你像我一样,只是从 ROS 教程开始,没有上下文背景,你可能得花一段时间去理解它可以做什么,为什么它有用,以及你如何将它集成到你的机器人中。本文旨在提供背景信息,向你展示它们是如何组合在一起的,以及你可以如何使用它们。

究竟什么是 ROS?

ROS 是你的机器人的操作系统。它运行在各种不同类型的计算机上的标准 Linux 系统之上,如树莓派或其他单片计算机、笔记本电脑或台式机。这是它可以做的:

  1. ROS 提供了一种标准的方式来连接所有的传感器(摄像机、距离传感器、模拟到数字转换器、 IMU)和执行器(驱动马达、伺服系统、灯) ,并与控制软件一起做出决定。这是一种粘合剂,把所有这些联系在一起,并且为你省去了在机器人身上传递数据的烦恼。
  2. ROS 可以帮助你轻松地让多台计算机或微处理器在机器人上或通过网络进行通信。例如,你可以通过网络驱动桌面计算机上的 ROS 机器人,或者让更强大的计算机处理计算密集型任务,而不是在机器人上完成。
  3. ROS 为复杂的行为提供了库,比如地图构建和定位(SLAM),LIDAR 和其他传感器的使用,以及处理视频。一旦你让你的机器人以ROS预期的方式与之链接,你就可以集成这些功能而不需要从头开始编写代码。
  4. ROS 还有一些非常有用的工具,用于可视化来自传感器的数据以及数据流动的位置。
  5. 你可以在模拟器中测试 ROS 软件,而无需在真正的机器人硬件上运行它。事实上,你可以只用一台基本计算机而无需其他硬件来编写和运行 ROS 软件。你在模拟器上编写和测试的代码可以很容易地移植到真正的机器人上。

最简单的架构 —— 一个远程控制(teleop)节点向电机控制器节点发送速度指令

它是如何工作的

一旦你搞清楚了,ROS 的设计是相当优雅的。

一个称为 roscore 的中心枢纽首先启动,所有其他组件都连接到它。它可以看作是一种目录,允许机器人的所有功能定位和相互通信。

机器人的其他功能由称为节点(node)的软件来处理。例如,一个节点负责接收运动指令,并指挥电动机的运动。另一个节点可能负责从碰撞传感器或光传感器读取传感器值,并将其提供给其他节点。最后,控制节点可以从传感器节点获取输入,做出必要的决策,并向运动节点发送适当的命令。

向其他节点提供信息的节点是发布者(publisher)。接收该信息的节点是订阅者(subscriber)。一个节点既可以是不同主题的订阅者,也可以是发布者。正在发布的信息被分到称为主题(topic)的通道,这些主题在机器人上有唯一的名称。

在上面的示例图中,远程控制节点(teleop_turtle)从用户那里获得键盘输入并发布速度命令。机器人的电机控制器和传感器节点(turtlesim)订阅了运动速度主题(cmd _ vel) ,并将这些命令转化为运动。这是Turtlesim, 一个非常简单的机器人的模拟,你可以在 ROS 教程中学习如何控制它。

TurtleSim 在 Python 程序的控制下驾驶

稍微复杂一点的节点集看起来是什么样的?嗯,我在机器人控制方面的第一个练习题是让 Turtlesim 在 Python 程序的控制下在一个正方形中驾驶。要做到这一点,控制器节点订阅 Turtlesim 的里程主题(/turtle1/pose) ,该主题会不断显示机器人对自己位置的最佳估计。然后控制节点进行计算,找出电动机需要做什么才能导航到下一个目标,并发布电动机命令到主题 cmd_vel。

控制程序订阅位置主题并发布行进到目标的电机指令

如何把它和真正的机器人组合起来

一旦你理解了主题(topics)的总体流程,你可能会想: “太好了。我如何在一个真正的机器人上使用它?那会是什么样子呢? ”

让我们假设你想在 Raspberry Pi 上运行 ROS 来处理通信和高级控制,并且你也想要一个 Arduino 来控制电机和测量你的电池电压。此外,你有一个声纳模块,你想连接起来,以获得距离测量来避障。我们将分解每一个部分。

  1. 到目前为止,我发现在 Ubuntu 上安装 ROS 最简单的是运行在 Raspberry Pi 上,而不是 Rasbian 上。在撰写本文时,我正在使用 Ubuntu 18.04/Melodic,它不是最新的 ROS 发行版,但是有最完整的 Ubuntu 包。这比自己编译软件包要简单得多。
  2. 一旦 ROS 在 Pi 上运行,我们就可以运行 roscore
  3. 有几种方法可以让 Arduino 与 Pi 对话,但最直接的方法可能是使用 rosserial Arduino 包。如果你通过 USB 连接 Arduino 到 Pi,Arduino 可以注册为一个带有 roscore 的节点,并发布和订阅主题。这只需要几行代码就可以完成!
  4. Arduino然后发布一个测量电池电压的主题,并订阅一个电机速度指令主题。这些信息可能来自遥控(teleop)节点或者 Pi 上运行的控制软件。Arduino 可以同时发布主题和订阅主题。
  5. Pi 上的 Python 控制器程序使用ROS库连接到 roscore,订阅 Arduino 发布的传感器主题,并开始发布运动速度命令。
  6. 声纳模块也可以用多种方式进行处理。你可以将其连接到 Pi 上的 GPIO 插脚,并在其上运行一个简单的 Python 节点,该节点发布声纳值。它也可以在 Arduino 上运行,只要你小心不让它overload。

想添加一个 RP-Lidar 激光雷达单元?没有问题 —— 通过 USB 将它插入 Pi,然后启动一个接收数据并发布数据的节点。GPS 呢?同样的过程 —— 插入它并启动一个已经存在的节点。

如果你从头开始制造一个机器人,你可以购买有现成软件节点的电机控制器,或者你可以为你的控制器编写一个。你的传感器也是如此。

你可能只需要为你的特定硬件编写代码,就可以以预期的消息格式发布主题,这样你突然就可以访问大量编写良好的软件了。一旦完成,你的硬件就被有效地抽象了,你就可以开始使用 ROS 的更高层的功能了。

运行导航栈的Husky

例如,现有的一些用于室内导航的节点栈,实现了SLAM。

Husky 机器人在 Gazebo 通过激光雷达扫描环境

Gazebo 模拟器

对 Gazebo 模拟器的完整描述超出了本文的范围,但是这里有一个教程(https://www.clearpathrobotics.com/assets/guides/kinetic/ros/Drive%20a%20Husky.html)可以帮助你入门。我鼓励你们快速浏览一下。能够以一种安全的方式使用控制算法,或者在购买实际的硬件之前在机器人上测试,都是非常有用的。这是一个很好的工具。我和一个朋友在搞一个割草机器人,我们在 Gazebo 模拟了一个典型的郊区庭院,用 GPS 和磁强计测试导航代码。

割草机器人测试地面

分布式控制和计算

在我看来,ROS 最酷的特性之一就是,这些节点可以在不同的计算机上运行,而不是在 roscore hub 上运行!你只需告诉运行计算机的节点运行 roscore 的计算机的名称/ip,它就可以透明地连接和运行。你可以用它在机器人本身上建立一个计算机网络,或者将控制和计算扩展到网络上的其他计算机,而不需要编写任何额外的代码。

总结

我希望这能帮助你理解 ROS 各个部分是如何组合在一起的 —— 你现在可以开始学习那些教程了,希望你对如何在真正的机器人上使用它有了更好的理解。玩得开心!

来源:https://medium.com/swlh/a-gentle-introduction-to-using-ros-on-your-robots-329aa5e261d1

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-10-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyVision 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 作者:Jason Bowling 编译:McGL
  • 究竟什么是 ROS?
  • 它是如何工作的
  • 分布式控制和计算
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档