复习笔记之——ROS(robot operating system)

很久之前就学过ROS了,一直有相关的项目开发,但是后面没用一段时间后,对于ROS细节的东西几乎都忘了。故此写下这篇学习笔记(应该说复习笔记),作为以后复习用。

本博文虽然以ROS命名,但更多的算是直接操作ROS,用turtlebot机器人。后面我会补上更加详细的ROS安装(甚至是linux安装)的教程。好下面进入正文

 

目录

ROS的基本介绍

ROS学习资料

Learning TurtleBot and ROS

what is ros?

what will you need?

Linux与ROS安装

Testing TurtleBot Installation

Setting Up Networking

获取IP

ROS文件框架介绍(引自本人的硕士论文)

ROS文件系统级

ROS计算图级

基于可见光定位的ROS功能包的运行流程


 


ROS的基本介绍

ROS软件平台被开发的根本原因都是想让全世界的机器人研究人员们齐心协力解决机器人软件过于繁多和复杂而造成的问题。

例如,当实现机器人识别周围情况的功能的时候,硬件种类繁多的问题和要用在实际生活中的问题是会带来困难的部分。有些对人来说很简单的事情对机器人来说是很困难的问题,因为要实现机器人的传感、识别、绘制地图、动作规划等功能。因此学校的研究室或公司难以做到这些所有的功能。但如果全世界的相关领域的从事人员们都各自分享自己的专长部分,让其他研究团队使用的话情况就大不一样了。

ROS不需要完全重新开发已有的系统和程序,而是通过加入一些标准化的代码就能对已有的非ROS程序进行ROS化的转化。并且很多通用的工具和软件都有提供,因此可以专注于自己感兴趣或想贡献的部分,这反而可以节省开发和维护所需的时间。

ROS的五个特点:

  • 第一, 程序的可重用性。 专注于自己想要开发的部分,对剩下的功能可以下载相关功能包来使用。相反,也可以将自己开发出来的程序和其他人分享,让他们也可以使用。比如,美国的NASA为了控制宇宙空间站里使用的Robonaout29机器人,除了使用自行开发的程序,还结合了可以在多种操作系统使用的ROS和具有实时控制、消息通信修复、可靠性等特点的OROCOS,得以在宇宙中执行任务。
  • 第二, 是基于通信的程序。 为了提供一种服务,很多时候在同一个框架里编写很多程序:从传感器或舵机的硬件驱动到传感、识别和动作等所有种类的程序。但为了重用机器人软件,根据每个处理器的用途将其分成更小的部分。根据平台的不同,我们将此称为组件化或节点化。必须由划分为最小执行单元的节点之间发送和接收数据,而平台具有关于该数据通信的所有一般信息。而且,这与最小的单位进程连接到网络的物联网(IoT)的概念一致,因此可以用作物联网平台。并且,被划分成最小执行单元的程序可以进行小单元的调试,这非常有助于找出错误。
  • 第三, 提供开发工具。ROS提供调试相关的工具-2维绘图和3维视觉化工具RViz,所以无需亲手准备机器人开发所需的开发工具,可以直接拿来使用。例如,在机器人开发中,可视化机器人的模型的情况比较多,通过遵守规定的信息格式,可以直接确认机器人的模型,并且还提供3D仿真器,因此易于扩展到仿真实验。另外,最近比较受人关注的点云(point cloud)形式也可以从英特尔的RealSense或微软的Kinect获得的3D距离信息转化过来。此外,实验中使用的数据可以被记录下来,因此需要的时候随时都可以重现实验当时的情况。像这样,ROS的一个重要特点是通过为机器人开发提供必要的软件工具,使开发的便利性达到最大化。
  • 第四, 活跃的开发者社区。至今比较封闭的机器人学界和机器人业界都因为前述的功能而走向重视互相之间的合作的方向。其目的可能各自相异,但实际的合作正在通过这种软件平台发生着。其核心是开源软件平台的社区。例如,以ROS为例,到2017年自愿开发和共享的功能包数量超过了5,000个,而解释如何使用它的wiki页面超过1.7万个,这些都由用户个别参与。 而在社区中非常重要的问题和答案已有超过24,000个,用户们通过这些建立着互惠互利的开发者社区。讨论超越了单纯的对于用法的议题,人们在寻找机器人工程软件的必要因素,并摸索出规则。
  • 第五, 生态系统的形成。前面提到的智能手机平台革命是由Android和iOS等软件平台创造的生态系统造成的。这一趋势在机器人领域延续着。起初,各种硬件技术泛滥,却没有能整合它们的操作系统。在这种情况下,如上所述,各种软件平台已经出现,最受瞩目的ROS现在已经开始构建生态系统。这个正在形成的生态系统里,机器人硬件领域的开发者、ROS开发运营团队、应用软件开发者以及用户也能像机器人公司和传感器公司一样从中受益。起步虽然微不足道,但考虑到逐渐增多的用户数量和机器人公司,以及急剧增加的相关工具和库,我期待在不久的将来将会形成一个圆满的生态系统。

复习笔记之——ROS(robot operating system)_第1张图片

ROS的目标是“建立一个在全球范围内协作开发机器人软件的环境!”

 

ROS学习资料

ROS入门教程

https://www.ncnynl.com/archives/201608/496.html(创客)

http://wiki.ros.org/cn/ROS/Tutorials(wiki)

turtlebot2咖啡机(之前有个英文版本的课程,但是不知道为啥最近打不开了~~~)

http://learn.turtlebot.com/

https://www.ncnynl.com/archives/201609/776.html

turtlebot3

https://www.ncnynl.com/archives/201702/1388.html

turtlebot官网(通过官网可以学习到更多)

https://www.turtlebot.com/

ROS的官网

https://www.ros.org/

ROS中的turtlebot仿真

http://learn.turtlebot.com/2015/02/03/1/

 

Learning TurtleBot and ROS

本部分其实是关于如何直接操作ROS的

ROS作为一个分布式框架。其实在不用写代码的情况下,已经可以实现好多功能。包括:SLAM、IMU等。后面介绍到的VLC定位功能包是本人后面开发的,并不能直接调用,代码还没release出来

what is ros?

The Robot Operating System (ROS) is a flexible framework for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.

ROS是一个开放源代码的机器人元操作系统。它提供了我们对操作系统期望的服务,包括硬件抽象、低级设备控制、常用功能的实现、进程之间的消息传递以及功能包管理。它还提供了用于在多台计算机之间获取、构建、编写和运行代码的工具和库。

ROS包括一个类似于操作系统的硬件抽象,但它不是一个传统的操作系统,它具有可用于异构硬件的特性。此外,它是一个机器人软件平台,提供了专门为机器人开发应用程序的各种开发环境。

ROS是一个元操作系统(Meta-Operating System)。元操作系统不是一个明确定义的术语,而是一个利用应用程序和分布式计算资源之间的虚拟化层来运用分布式计算资源来执行调度、加载、监视、错误处理等任务的系统。(注意ROS并不同于linxu、windows、Android等操作系统)。是一种利用现有的操作系统(如linux)以使用进程管理系统、文件系统、用户界面、程序实用程序(编译器、线程模型等)此外,它还以库的形式提供了机器人应用程序所需的多数不同类型的硬件之间的数据传输/接收、调度和错误处理等功能。这个概念也被称为中间件(Middleware)或软件框架(Software framework)。

复习笔记之——ROS(robot operating system)_第2张图片

ROS还可以实现在不同操作系统之间的通信

复习笔记之——ROS(robot operating system)_第3张图片

ROS组建

复习笔记之——ROS(robot operating system)_第4张图片

注意:ROS虽然支持多种操作系统,但正式支持的只有Ubuntu,而对其它版本仅提供安装方法。之前本人的团队也试过开发基于手机Android系统的ROS功能包,但是后面由于功能不齐全,稳定性不好而搁置了。

 

what will you need?

  1. 带有Kobuki 移动基站的turtlebots(后面改为用turtlebot3了).
  2. 上网本:turtlebots兼容上网本。如果你想购买自己的上网本,必须小于21厘米宽的才适合放在在架子上。(在turtlebot3中已经不需要两个笔记本了。因为turtlebot3已经用树莓派代替了上网本,但是树莓派的处理能力太弱了。像本人做VLC定位,捕获的图片就必须回传到工作站中才可以了)
  3. 停靠站:我们建议购买扩展坞等turtlebot可以自主充电本身,当它检测到它所需要的功率。这是作为一个可选项。
  4. 工作站:第二台计算机与一个体面的图形卡和足够的内存的三维模拟(4 GB+ 以上内存)(其实就是主要的控制端了)。
  5. 路由器:无线路由器允许工作站和turtlebot通过本地IP通信。

Linux与ROS安装

查看linux的版本

lsb_release -a

查看ros的版本

roscore

接下来会写博客介绍ROS的安装

Testing TurtleBot Installation

roscore

打开一个新的终端,输入

roslaunch turtlebot_bringup minimal.launch 

再打开一个新的终端,通过键盘控制

roslaunch turtlebot_teleop keyboard_teleop.launch

Setting Up Networking

要配置完网络才可以实现工作站与机器人通信

Make sure both TurtleBot and the workstation are connected to the same router.

获取IP

  1. 在工作站和Turtlebot都要同步时钟
    sudo apt-get install chrony
    sudo ntpdate ntp.ubuntu.com
  2. 获取Turtlebot和工作站的IP地址,在终端执行:
    ifconfig
  3. 查看SSh状态

    sudo service ssh status

    如果显示ssh: unrecognized service,没安装ssh,则安装:

    sudo apt-get install openssh-server

     

  4. 工作站远程登录Turtlebot上网本,在终端执行

    ssh turtlebot@[ip_of_turtlebot]

     

  5. You should export the variables inside your work space setup script.

    echo export ROS_MASTER_URI=http://IP_OF_TURTLEBOT:11311 >> ~/.bashrc
    echo export ROS_HOSTNAME=IP_OF_PC >> ~/.bashrc

    注意:IP_OF_TURTLEBOT为turtlebot的Ip地址,IP_OF_PC为工作站的IP地址

验证

工作站
ssh turtlebot@[ip_of_turtlebot]
roslaunch turtlebot_bringup minimal.launch
再在工作站运行
roslaunch turtlebot_teleop keyboard_teleop.launch

 

ROS文件框架介绍(引自本人的硕士论文)

ROS系统是用于机器人的一种开源的后操作系统(次级操作系统)。它提供类似于操作系统所提供的功能,也提供一些工具程序和库用于获取、构建、编写和运行多机整合的程序。ROS还提供了许多基本库和工具来帮助开发机器人应用程序。从本质上,ROS是运行在Linux等计算机操作系统上的、面向机器人特点的运行支撑软件和软件工具集。ROS的最大的优点是有利于机器人程序开发中代码的重复利用,集成了众多的开源第三方库,如导航系统、图像处理库等,开发者只需要专注于开发自己的核心算法而不需要花费额外的精力实现已有的功能。

       ROS是一种分布式的框架,执行程序可以分别独立设计、再实时的结合起来,进程之间按照功能包和功能包集的方式分组,因而可以容易地分享和发布,无需改动就能够在不同的机器人上复用代码。ROS系统的架构主要分为三部分:文件系统级、计算图级和开源社区级。

ROS文件系统级

ROS的文件架构按下图所示组织:

  1. 工作空间(workspace):包含了源文件空间(放置功能包、项目)、编译空间(为功能包和项目保持缓存信息、配置以及其他中间文件)、开发空间(用于保存编译后的程序)。
  2. 功能包(Package):是ROS软件组织的基本形式。一个功能包具有用于创建ROS程序的最小结构和最小内容。它可以包含ROS运行的进程(节点)、配置文件等。ROS也允许使用自己版本的功能包代替安装版本。
  3. 功能包清单(package.xml):功能包清单提供关于功能包、许可信息、依赖关系、编译标志等。
  4. 综合功能包:将几个具有某些功能的功能包组织在一起,即为综合功能包。用于引用其他功能特性类似的功能包,如导航包等。
  5. 综合功能包清单:类似于普通功能包清单。
  6. 消息类型(Message type):消息是一个进程发送到其他进程的信息。在对应的功能包文件下有消息文件。ROS通过使用一种简化的消息类型描述语言来描述ROS节点发布数据值。因此ROS能够使用多种编程语言生成不同类型消息的源代码。ROS消息中的一种特殊数据类型就是报文头,主要用于添加时间戳、坐标位置等。报文头还允许对消息进行编号。通过在报文头内部附加信息,可以知道哪个节点发出的消息,或可以添加一些能够被ROS处理的其他功能。
  7. 服务类型(Service (srv) type):定义了在ROS中由每个进程提供的关于服务请求和响应的数据结构,以实现节点之间的请求/响应通信。
  8. 动作类型(Action type):定义了在ROS中由每个进程提供的关于服务的目标、结构和响应的数据结构,以实现节点间的服务的目标、结构和响应。

复习笔记之——ROS(robot operating system)_第5张图片

ROS计算图级

计算图是ROS处理数据的一种点对点的网络形式。ROS会创建一个连接到所有进程的网络。在系统中的任何节点都可以访问此网络,并通过该网络与其他节点进行交互,获取其他节点发布的信息,并将自身数据发布到网络上。如下图所示

复习笔记之——ROS(robot operating system)_第6张图片

  • 节点(Node)是各自独立的可执行的文件。如果需要一个可以与其他节点进行交互的进程,则需要创建一个节点,并将此节点连接到ROS网络。在通常情况下,系统包含能够实现不同功能的多个节点。每个节点具备特定的单一的功能。
  • 节点管理器(Master)用于节点的名称注册和查找以及节点、服务、消息之间的通信等。由于ROS本身就是一个分布式网络系统,可以在某一台计算机上运行节点管理器,在该管理器或其他计算机上运行节点。节点管理器的作用是使ROS节点之间的互相查找以及通信。如下图所示。

复习笔记之——ROS(robot operating system)_第7张图片

  • 参数服务器(Parameter Server)能够使数据通过关键词存储在一个系统的核心位置。通过使用参数,就能在运行时配置节点或改变节点的工作任务。
  • 消息(Message)节点通过消息完成彼此间的通信。消息包含了一个节点发送到其他节点的信息数据。同时也可以基于标准消息开发自定义消息(如5.2节中所定义的VLC节点消息)。
  • 话题(topic)是节点间用来传输数据的总线。每个消息都必须有一个名称来被ROS网络路由。每一条消息都要发布到相应的话题。当一个节点发送数据时,称为该节点正在向话题发布消息。节点可以通过订阅某个话题,接收来自其他节点的消息。一个节点可以订阅某个话题而不需要该节点同时发布该话题。这就保证了消息的发布者和订阅者之间的解耦,发布者和订阅者间完全无需知晓对方的存在。同一个话题可以有多个发布者与订阅者。如下图所示。

复习笔记之——ROS(robot operating system)_第8张图片

  • 服务(Service)在发布话题时,正在发送的数据能够以多对多的方式交互。但当需要从某个节点获得一个请求或答应时,就不能通过话题来实现了。在这种情况下,服务能够运行两个节点间直接进行交互。此外,服务必须有唯一的名称。当一个节点提供某个服务时,所有的节点都可以通过使用ROS客户端库编写的代码与其进行通信。
  • 动作(Action)是在需要像服务那样的双向请求的情况下,使用的消息通信方式,不同于服务之处是在处理请求之后需要很长的响应,并且需要中途反馈值。动作文件也非常类似于服务,目标(goal)和结果(result)对应于请求和响应。此外,还添加了对应于中途的反馈(feedback)。它由一个设置动作目标(goal)的动作客户端(action client)和一个动作服务器(action server),动作服务器根据目标执行动作,并发送反馈和结果。动作客户端和动作服务器之间进行异步双向消息通信。 节点之间的通信如下图所示。

复习笔记之——ROS(robot operating system)_第9张图片

 

基于可见光定位的ROS功能包的运行流程

本人设计了基于ROS的VLC导航功能包。并且在19年广东省大挑战杯中获得了特等奖。本人的硕士毕业论文以及相关的paper(将要publish)都有相关的算法原理、节点的设置介绍。后面会将维护好的代码release出来,在此仅仅列出使用流程,供团队的成员使用。

首先打开新的终端,ssh链接机器人

ssh [email protected]   
密码 burger

打开终端  输入

 roscore 

 roslaunch turtlebot3_bringup turtlebot3_robot.launch

运行这一条如果检测到roscore没开启会自动开启roscore的,这条命令的用处是启动turtlebot3运行所需的所有相关组件,如果只是需要开启ROS而不需要遥控机器人运动的话可以只用roscore

打开新终端,键盘控制机器人

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

这条命令可以运行在本机也可以运行在ssh到机器人的终端上,两种操作不同之处在于软件包运行的宿主不同,而最终的操作效果是一样的

打开新终端,ssh到机器人(在机器人上开启camera节点)

rosrun mvcam mvcam

打开新终端,使用窗口界面查看图像:

rosrun image_view image_view image:=/camera/image

(可选,在本机运行    !警告,查看图像会造成定位变慢)

打开新终端,启动VLC节点所使用的命令:

rosrun vlc_locator publisher

(在本机上运行,该节点有运行依赖,依赖于相机通过节点/camera/image所传递的图像,需要相机节点运行后定位节点才能运行)
打开新终端,查看坐标纸图像:

rosrun image_view image_view image:=/camera/image_show

(可选,在本机运行)

复习笔记之——ROS(robot operating system)_第10张图片

 

你可能感兴趣的:(可见光通信,ROS,移动机器人)