ROS基础知识


  • administrators

    ROS 简介

    1. 什么是ROS
      ROS 是 Robot Operation System 的简称。是专门为机器人控制开发的系统。和一般的操作系统相比增加了软件包管理,信息通信框架等。同时这个系统对硬件进行了抽象使得各个组件之间的耦合更低,程序开发也更加方便快捷。

    2. ROS 能在哪些平台上使用
      ROS官方版本基于Ubuntu进行开发。所以无论是arm架构还是x86架构都可以使用。即使你所使用的平台无法安装Ubuntu或者Debian,只要能够安装Linux系统就可以从源码编译安装ROS。OSX也可以安装ROS,不过是测试版本,安装使用过程中可能会遇到问题,并不推荐大家使用。Windows的ROS已经实现,但并未完全开发完成。

    3. ROS的版本区别
      ROS每年5月发布一个版本。其中单数年份发布为短期版本,支持时间为2年。双数年份发布的版本为长期支持版,支持时间为5年。最新的长期支持版是Kinetic Kame。现在一般网上的教程是基于Hydro或者 Indigo。这些教程和Jade和Kinetic版本是通用的。
      不同版本之间并不完全通用。比如你的机器人的系统是Indigo的,但是你的本地操作系统是Jade的那么系统间通信就有可能会出现消息格式不匹配的情况。所以不同系统间的版本尽量保持一致。

    4. ROS的学习路线
      ROS开发中主要使用的语言是C++和Python,你需要对这两种语言都比较熟悉。同时ROS基于Ubuntu操作系统,这也要求你对Ubuntu比较熟悉。
      首先你可以先读完这篇文章,对于ROS的架构和基本概念有一个初步的认识。然后看官方wiki中的Tutorial
      同时Learning ROS for Robotics Programming Second Edition也是一个不错的选择。
      你也可以按照这个ROS思维导图的方式来学习。
      在对ROS比较熟悉之后,如果你想了解更多关于ROS设计方面的东西可以看看REP
      如果想要了解关于ROS2方面的信息可以看这里
      在实际使用中会遇到很多问题,欢迎在我们的ROS交流群中提问(538456117)
      当然想要更深入的了解ROS,阅读源代码也是一个不错的选择
      ROS源代码
      ROS2源代码

    1. ROS的未来
      ROS虽然大大方便了机器人开发,在业内有很广泛的应用,但是实际使用中还是有挺多问题。比如稳定性,网络带宽和多机器的情况下的自动连接等等。这些功能都会在ROS2中实现。随着ROS的不断发展,相信其在机器人行业会有越来越好的发展前景。

    ROS的架构

    ROS与其说是操作系统其实更像一个通信框架。ROS的基本单元是节点(Node)。节点之间可以通过订阅和发布Topic进行通信。节点的基本信息会存储在Master里面。下面以一个例子具体说明。假如我们现在有一个激光雷达,然后我们想要通过图形界面显示雷达的数据。那么整个结构就如下图所示

    0_1506330911799_QQ截图20170925154958.png

    激光雷达有一个节点叫做hokuyo,图形界面有一个节点叫做viewer。激光雷达节点从传感器读出数据之后,首先告诉Master自己在发布一个叫做scan的topic。然后在本地监听2345端口,等待其他节点连接。图形界面节点viewer启动之后,首先告诉Master自己在订阅一个叫做scan的topic。这时候Master就会告诉viewer节点谁在发布scan。Viewer获得到hokuyo的地址和端口信息后和hokuyo节点建立TCP连接。这样激光雷达的数据就从hokuyo节点发送至viewer节点了。
    通过这种架构可以实现节点的分布式处理功能。即不同的节点不要求一定在同一个机器人上。比如上例中的激光雷达节点和viewer节点就可以在不同的机器人上。也可以进一步实现多台机器人的调度。

    ROS的基本概念

    从上例我们可以看出ROS中有以下几个比较重要的基本概念

    1. Master
      Master就是存放各种节点和topic信息的地方。节点之间通过Master了解到对方的信息。同时在Master的帮助下节点之间建立网络连接。
    2. Node
      基本的ROS计算单元。
    3. Topic
      节点之间的通信通道
    4. Parameter Server
      参数服务器。在使用过程中可能不同的节点间要共享一些参数。这些参数就可以放在参数服务器里面。其作用就类似于不同节点公用的全局变量。在上面的例子中没有用到参数服务器。

    ROS的安装

    下面以Kinetic版本为例说明ROS的安装方法。

    1. 安装Ubuntu 16.04
    2. 添加ROS源
    sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
    
    1. 添加源的key
    sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
    
    1. 安装
    sudo apt-get update
    sudo apt-get install ros-kinetic-desktop-full
    
    1. 初始化rosdep
    sudo rosdep init
    rosdep update
    

    ROS的环境变量

    ROS运行时依赖一些环境变量,所以我们要把其添加到自己的终端配置文件中。

    echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
    source ~/.bashrc
    

    这样就会在bash中添加source /opt/ros/kinetic/setup.bash这样一行语句。每次打开一个终端都会执行上面的脚本。这个脚本会设置ROS相关的一些环境变量。

    下一步

    ROS tutorial