在过去还没有 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语法!
Google Apps Script 网站又改版了,Google 一直在发展这个平台,还会愈来愈好...
前言 可能看这系列的读者会觉得,这主题也太跳了吧~~Deno 不是基於 Typescript 的语...
Object contents existence "myKey" in my...
在初学Java的时候,常常会有以下的输入输出范例出现: Scanner sc = new Scann...
Microsoft 365 security portal提供目标导向的使用者介面,以降低Micro...