机器人操作系统ROS1简要介绍,翻译自以下仓库:
ROS-Tutorials
原仓库是一系列的jupyter notebook,可以直接在jupyter环境下运行程序示例。
ROS 机器人操作系统
ROS是机器人操作系统Robot Operating System的缩写。
ROS是一个被广泛应用于商业和学术研究的免费的开源机器人技术软件框架。所谓“软件框架”,在此可以简单理解为ROS提供了一系列的软件工具和软件设计规则,来让机器人开发者在此基础上进行机器人软件的开发设计。
ROS主要有以下功能特点:
- 进程间的消息传递接口
- 操作系统式的功能:这些功能包括多线程管理,底层设备控制,程序包管理和对硬件抽象等
- 支持c++和python等高级语言,并提供了一列基于这些语言的工具
- 丰富的第三方库:OpenCV、PCL等库均有支持ROS的接口
- 丰富的现成算法:包括AMCL、SLAM、A star、Dijkstra等流行的机器人算法
- 社区支持及时:使用的人多,因此网上的资源和支持也多
ROS从2007年发展至今,已经陆续推出了很多版本。每个版本有一个独特的名字,如indigo、kinetic、melodic等。
ROS的Logo永远是: 乌龟,各种各样的乌龟。
ROS的各个版本及发布时间如下图:
在ubuntu 16.04系统中安装ros-kinetic的过程介绍请参见Linux命令行操作及Shell编程基础
下图展示了一个ROS的基本框图:
节点Node1和节点Node2可以看做是机器人的两个ROS框架下的程序,当任何一个ROS程序启动时,该节点将与称为ROS master的ROS程序进行通信。一个系统中通常只需要启动用一个固定ip的ROS master程序。该节点将其所有信息发送到ROS master,包括其发送或接收的数据类型。发送数据的节点称为publisher,接收数据的节点称为subscriber。当然,一个节点可以既接收数据也发送数据。ROS Master就拥有了在计算机上运行的所有发布者publisher和订阅者subscriber的信息。如果节点1发送称为“A”的特定数据,而节点2需要相同名称的数据,则ROS master将此信息告知节点1和节点2,以便它们可以彼此通信。
ROS的几个基本概念:
-
ROS nodes: 使用ROS API的程序
-
ROS master: 连接ROS nodes的中间程序
-
ROS parameter server: 通常与ROS master一起运行的程序,用户可以在此程序中存储各种参数或值,并且所有节点都可以访问它。
-
ROS topics: ROS节点用来发送消息的总线,用户可以任意命名,例如某节点发送速度命令的ROS topic可以命名为cmd_vel,其他节点可以通过这个名称获取这条消息。
-
ROS message: ROS节点在ROS topic中发布的消息。
-
ROS service: 不同于ROS topic话题的发布/订阅机制,ROS service服务使用的是请求/应答机制,即具有ROS service服务功能的节点只有在另一个节点给它发送请求的时候才执行某种功能,并返回某种应答。执行服务的节点被称为server,发送请求的节点被称为client。
-
ROS bags: ROS的此项功能相当于一个录音机,可以将节点发布的信息录制成bag格式的数据文件,再在以后需要的时候播放这些数据文件而不需要再运行该节点。
ROS命令行工具:
-
roscore: 当我们在命令行输入roscore时,ROS master就运行起来了,于此同时ROS parameter server和一个log记录节点也会启动。运行此命令后,我们可以运行任何其他ROS程序。所以通常,我们都在一个单独的terminal中启动roscore,再在其他terminal里运行后续的ROS程序。
-
rosnode: rosnode命令用来查看ROS节点的一些信息,常用的命令比如:
rosnode list
返回所有运行中的节点的名称
rosnode info node_name
查看名为node_name的ROS节点的所有信息,包括输入输出、进程pid等。
- rostopic: rostopic是一个非常常用的用来查看现有的ROS话题信息的命令,常用的用法有:
rostopic list
返回所有正在发布、订阅的ROS话题名称
rostopic info topic_name
返回名为topic_name的ROS话题的所有信息,包括哪些节点发布了该话题,哪些节点订阅了该话题
rostopic hz topic_name
查看名为topic_name的ROS话题的发布频率
rostopic echo topic_name
把名为topic_name的ROS话题的内容实时显示在运行此条命令的terminal中
rostopic pub topic_name msg_type data
向名为topic_name的ROS话题发布格式为msg_type的数据,数据内容是data,例如以下命令:
rostopic pub /hello std_msgs/String "Hello"
表示向/hello这个ROS话题发布“Hello”的内容,格式为字符串std_msgs/String
- rosrun: 启动一个ROS节点的命令,用法为:
rosrun ros_pkg_name node_name
其中,ros_pkg_name为节点所在ROS文件夹的名称,node_name为节点名称
- roslaunch: 有时如果一次想启动的ROS节点过多,很难一一启动它们。在这种情况下,我们可以使用roslaunch文件来批量启动ROS节点。roslaunch是一种XML格式的文件,我们可以把想启动的节点、各个节点需要的参数、输入的数据都写在这个文件中。而且使用roslaunch启动,就不再需要额外的terminal来启动roscore了。用法如下:
roslaunch ros_pkg_name launch_file_name
其中,ros_pkg_name为roslaunch文件所在的ROS文件夹的名称。
下一节,简单认识ROS node:02_ROS_Nodes