DAY 2 ROS介绍

前言

在过去还没有 ROS 的年代,我们要去设计一款机器人是非常困难的,而这边的机器人是一个统称,并非只单针对人型、轮型、服务型等机器人。假设我们想要去设计一款机器人,我们需要完成以下这些项目,才能制造出我们要的机器人,那有哪些呢?

  • 机械结构
  • 电子电路
  • 通讯协定
  • 驱动程序
  • 组装测试
  • 控制程序

可以看到这个工作量是十分巨大的,如果你是一位机器人工程师,你可能变成这样


图片来源(壹读)

当你遇到在运作时突然发现某一个部分罢工了,你可能会直接发疯,然而我们在设计的机器人其实跟古老时期的电脑一样,没有作业系统可以来协助我们,所以需要直接来控制硬体来进行除错、写程序等等作业,当出现作业系统後,我们只需要根据作业系统来提供驱动就好,ROS 便是沿着这条老路再进行的。

我们希望所有的硬体开发商,像是雷达、底盘、摄影机等等的硬体设备,都可以透过一个平台来让我们直接调用就可以使用,不用每次都自己造轮子来让我们的程序码跑起来,逢甲某资讯系教授名言:自己造轮子是浪费时间的事情。所以我们如果有现成的可以帮助你减少写程序时间的工具,为何不用呢? 而 ROS 的出现便是帮助我们达成这件事情。

历史

说了这麽多,那到底什麽是 ROS , 我们先从他的历史说起,在2000多年时,由 Leland Stanford Junior University 的一个人工智慧实验室 STAIR(Stanford Artificial Intelligence Robot),开发了一套机器人软件系统框架,接下来在 2007 年时, ROS 项目正式启动,由 Willow Garage 与 STAIR 共同合作来开发 ROS ,而 Willow Garage 这个组织以开发出 PR2 和 TutleBot 2 等 机器人而闻名,在 2010 年时发布了 ROS 1.0,由此开始便陆续新增了许多的版本,再发展的过程也有无数的研发人员将他们的研究贡献到 ROS 项目中,这也是 ROS 到现在仍然是维持着 BSD 协议的原因,在 2013年後 ROS 改由开源基金会 Open Source Robotics Foundation(OSRF)继续维护

下面这张图就是从以前到现在的所有版本,你可以发现他每一代的都是以乌龟来进行绘制,而每一个版本都有一个官方推荐的作业系统版本,所以你可以根据你的作业系统来进行安装。这边要注意的是 ROS 是有分成短期支援跟长期支援板,这边建议都使用长期支援板,会比较保险。在 2018 年时,ROS 正式进入 2.0 的时代。

ROS版本 发布时间
Noetic Ninjemys 2020.5
Melodic Morenia 2018.5
Lunar Loggerhead 2017.5
Kinetic Kame 2016.5
Jade Turtle 2015.5
Indigo lgloo 2014.7
Hydro Medusa 2013.9
Groovy Galapagos 2012.12
Fuerte Turtle 2012.4
Electric Emys 2011.8
Diamondback 2011.3
C Turtle 2010.8
Box TurtleBox Turtle 2010.3

介绍

讲道这边我们开始来说 ROS 是什麽,大家不要以为他名称中有作业系统这几个字,就认为他是一个作业系统,但其实并不是这样的,其实呢他只是最为我们程序码跟系统的中间沟通层,只不过它提供了一些类似作业系统的功能,我们才将他称作作业系统,那他提供了哪一些功能呢?

  • 硬体抽象
  • 底层设备控制
  • 常用涵式的调用
  • 程序(进程)间的消息传递
  • 与套件管理

而在 ROS 官方所提到的 ROS 是由以下四点组合而成

框架

我们有时候只 ROS ,有时後指的只有通讯框架这一个部分,而框架指的是说,有人去订定了一个既有的规范,我们只需要跟着规则走就好,而 ROS 定订了一个分布式的架构,可以同时执行多个程序,而每一个程序又可以单独的去设计,然後放在一起去把他们给组合起来。

而在 ROS 中我们不会以程序来进行命名,而是以 Node 节点来进行使用。

以上面这张图为例,robot 是一个 node , laser 是一个 node , map 也是一个 node,以此类推,而 ROS 便是提供了一个框架(可以让他们互相沟通的桥梁)来管理这些 Node。

那为甚麽要这样做呢? 假设我今天要去更换我的 laser , 我只需要把 laser 这个 node 替换掉就好,不用去动到其他的部分,该给的 api 就是那些,甚至不用去改通讯协定,我发送跟旧版的 laser 相同 type 的讯息过去就好,这点在开发上是非常好用的。

套件(工具)

在工具的部分 ROS 有许多种开源工具,可以用来做一些模拟、数据可视化、图形介面、数据纪录等等

  • Gazeboo

  • RVIZ

功能

ROS 也提供了许多的功能,像是 控制、规划、视觉、建图等等,假设我们现在想要开发一台会做人脸辨识,然後看到人会跟着你走的行李箱,我们只需写一下人脸辨识的部分,行走、路径规划等等的 ROS 都有基本的涵式库可以直接调用,这可以加速我们写程序的速度,而且只需撰写我们擅长的部份就好。

社区

那我们去哪边找这些套件呢? 一个方法是去官网的 wiki ,上面有各式各样的内容和教程,第二个是 GITHUB,上面都有教学、文档来供我们查看。

总结

介绍的部分先到这边告一段落,最後给大家看一下 ROS 10 周年所拍的纪念影片,明天开始来进行 ROS 安装!!

#Arm Arm Platforms


<<:  Day 3 : HTML - 快速打出HTML的代码,超好用的Emmet语法!

>>:  认清新创的生老病死

【Day 30】Google Apps Script - 延伸篇 -系列回顾与学习资源整理

Google Apps Script 网站又改版了,Google 一直在发展这个平台,还会愈来愈好...

【Day 26】关於 Deno 与 NodeJS 的这些年和那些事

前言 可能看这系列的读者会觉得,这主题也太跳了吧~~Deno 不是基於 Typescript 的语...

Day28 - this&Object Prototypes Ch3 Objects - Review

Object contents existence "myKey" in my...

Day25:看看猪走路

在初学Java的时候,常常会有以下的输入输出范例出现: Scanner sc = new Scann...

Day27:今天我们来聊一下将Microsoft 365 Defender 连接到 Azure Sentinel

Microsoft 365 security portal提供目标导向的使用者介面,以降低Micro...