电子说
近来找到的实习主要是做智能车控制,用到的也就是ROS机器人操作系统,ROS需要运行在一个操作系统上,这个操作系统常用的就是Linux,而公司用的就是Ubuntu,所以Ubuntu-ROS组合就是实习的主要学习内容了。所以我就新开了一个坑,网络上ROS的资源很丰富,我在此只是用以分享学习笔记。
1. ROS基本介绍
ROS是主流的机器人操作系统
官方将ROS解释为框架、工具、功能和社区。
ROS实际上相当于一个 软件工具集 ,采用分布式框架,通信框架是其主要组成部分,可将多个单独设计的进程(节点)组合起来并同时运行。
各节点可实现各种不同的功能,并通过ROS这一桥梁实现相互通信。这样的特点使其拓展性好,复用率高,极大地提高了庞大和冗杂的机器人设计过程的效率。
ROS能给开发人员提供可视化界面工具,包含诸如Gazebo、Rviz等用于仿真和调试的基本工具,以及各种基础程序包(控制、路径、规划等),只需在其上设计所要实现的特殊功能的部分并将它们组合起来即可。
2. 为什么选择Ubuntu系统
软件是机器人的核心。
机器人应用软件需要运行在一个操作系统上, 该操作系统可以提供与机器人作动器和传感器通信的功能 。基于Linux的操作系统在与底层硬件交互的过程中具有极大的灵活性,并且提供相关许可允许用户根据机器人应用对其进行修改。在这种应用背景下,Ubuntu快速响应能力、轻量级属性及高度安全性的优点得以展现。
当前,Ubuntu-ROS组合已成为机器人编程的一个理想选择。
3. ROS框架
从根本上说,ROS是两个程序或进程间通信的框架。
For example,如果程序A想要向程序B发送数据,并且程序B也想要向程序A发送数据,那么可以轻松地用ROS实现这项工作。
一个机器人可能有许多传感器、作动器和计算单元。怎样才能做到控制这么多作动器及这么多传感器数据呢?我们可以只用一个程序完成这些吗?这当然可以。但是这并不是一个好方法。
更好的解决方案是我们可以编写多个独立的程序来处理传感器数据、向作动器发送控制指令,但是这就需要在这些程序之间进行数据交换,而这恰恰就是我们使用ROS的场景。
两个程序分别被标记为节点1和节点2。当程序启动时,节点便会和名为ROS Master的ROS程序通信。节点将所有信息发给ROS Master,包括它发送和收到的消息类型、本节点路由信息等。发送信息的节点称为发布节点(Publisher Nodes),接收信息的节点称为订阅节点(Subscriber Nodes)。ROS Master拥有在计算机上正在运行的所有发送节点和接收节点的信息。如果节点1发送某个名为A的数据,而节点2正好订阅了该消息,那么ROS Master就向两个节点广播彼此的节点信息(注意:不是消息)以帮助它们建立连接,这样两个节点就可以互相通信了。
ROS节点可以彼此间互相传送不同类型的数据,这些数据可以包含像整数、浮点数、字符串等这类简单类型的数据。这些节点间相互传递的不同类型的数据称为 ROS消息(Messages) 。有了ROS消息,我们就可以在节点之间传递各种类型的数据了。这些消息通过一种类似于数据总线或者路径标识的媒介进行传播,我们称为ROS话题(Topics)。每一条话题都有自己的名字,比如一个可以传输字符串数据的名为“chatter”的话题。
如果一个ROS节点想通过话题广播消息,那么它只需要给ROS话题发送消息即可,消息中就包含了消息的数据类型(所以不用另外告知topics 数据的类型)。
图4-12中,节点1和节点2就是通过ROS话题发送和接受消息的。当ROS Master交换完两个节点的信息之后,两个节点间消息的发送和接收过程就开始了。
5. ROS中的一些名词
ROS节点(Node) :使用ROS API进行运算的进程。
ROS主机(Master) :连接ROS节点的媒介程序。
** ROS参数服务器(Parameter Server)** :指通常与ROS Master一起运行的一个程序。使用者在此服务器上存储不同的参数,所有的节点都可以访问它,使用者可以设置参数的保密性。如果某个参数是公共的,那么所有节点都可以访问;但如果某个参数具有私有属性,那么只有特定的节点才可以访问这个参数。
ROS话题(Topic) :即“总线”,ROS节点可以通过该总线发送或接收信息。一个节点可以发布或者接收任意数量的话题。
ROS消息(Message) :消息基本上都是通过话题传送的。ROS含有许多内建的消息类型,当然使用者也可以定义他们自己的消息类型。
全部0条评论
快来发表一下你的评论吧 !