ROS是什么

ROS(Robot Operating System,下文简称“ROS”)是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。 ROS 的主要目标是为机器人研究和开发提供代码复用的支持。ROS是一个分布式的进程(也就是“节点”)框架,这些进程被封装在易于被分享和发布的程序包和功能包中。ROS也支持一种类似于代码储存库的联合系统,这个系统也可以实现工程的协作及发布。这个设计可以使一个工程的开发和实现从文件系统到用户接口完全独立决策(不受ROS限制)。同时,所有的工程都可以被ROS的基础工具整合在一起。

ROS中的几个常用概念

  • Node(节点) 执行一些运算任务的进程,数据传输和处理的程序,可以理解为C++或者Python程序主函数所在的程序。
  • Message(消息) 节点之间是通过传送消息进行通讯的,每一个消息都是一个严格的数据结构。即支持标准的数据类型(整型,浮点型,布尔型等等)和原始数组类型。也可以包含任意嵌套的结构和数组(类似于C语言的结构structs)。比如GPS采集到位置消息,温度计采集到的温度等,任何数据都能作为message。
  • Topic(主题) 消息是以一种发布/订阅的方式进行传递的。一个节点可以在一个给定的主题中发布消息。另外的节点针对某个主题关注与订阅特定类型的数据。可以同时有多个节点发布或者订阅同一个主题的消息。
  • Service(服务) 虽然基于话题的发布/订阅模型是很灵活的通讯模式,但是它广播式的路径规划对于可以简化节点设计的同步传输模式并不适合。在ROS中,我们称之为一个服务,用一个字符串和一对严格规范的消息定义:一个用于请求,一个用于回应。这类似于web服务器,web服务器是由URIs定义的,同时带有完整定义类型的请求和回复文档。需要注意的是,不像话题,只有一个节点可以以任意独有的名字广播一个服务:只有一个服务可以称之为“分类象征”,比如说,任意一个给出的URI地址只能有一个web服务器。
  • Discovery(发现) ROS2里是没有master的,那么各节点之间是怎么知道彼此存在的呢?这就靠一种自动发现的机制——Discovery。什么意思呢?简单来说,当一个节点启动后,首先在网络中发条广播,大声告诉这个世界我来了,其他节点听到之后,也纷纷反馈各自的信息,这样一来二去也就联系上了。当然,万一哪个节点掉线了怎们办?没关系,每个节点都会周期性的发布广播,告诉其他节点他还在线,就算要下线,他也会广播告诉其他节点他要走了,下次再聊。总之,发现(Discovery)可以理解为一种身份声明和响应的机制。
  • Package(包) ROS的软件以包的方式组织起来。包包含节点、ROS依赖库、数据套、配置文件、第三方软件、或者任何其他逻辑构成。包的目标是提供一种易于使用的结构以便于软件的重复使用。
  • Stack(堆) 堆是包的集合,它提供一个完整的功能,像“navigation stack”。Stack与版本号关联,同时也是如何发行ROS软件方式的关键。

ROS常用组件

  • launch启动文件 通过XML文件实现多节点的配置和启动。
  • TF坐标变换 管理机器人系统中繁杂的坐标系变换关系。
  • Qt工具箱 提供多种机器人开发的可视化工具,如日志输出、计算图可视化、数据绘图、参数动态配置等功能。
  • rviz三维可视化平台 实现机器人开发过程中多种数据的可视化显示,并且可通过插件机制无限扩展。
  • gazebo仿真环境 创建仿真环境并实现带有物理属性的机器人仿真。
  • rosbag数据记录与回放 记录并回放ROS系统中运行时的所有话题信息,方便后期调试使用。

ROS常用命令

  • 查看ROS_PACKAGE_PATH环境变量 $ echo $ROS_PACKAGE_PATH /opt/ros/melodic/share

  • rosnode 命令 rosnode 显示当前运行的ROS节点信息 rosnode list 获得运行节点列表 rosnode info node-name 获得特定节点的信息 rosnode ping node-name 测试节点是否连通 rosnode ping –all 测试所有节点 rosnode kill node-name 终止节点

  • rostopic 命令 rostopic命令工具能让你获取有关ROS话题的信息。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$ rostopic -h
rostopic is a command-line tool for printing information about ROS Topics.

Commands:
rostopic bw display bandwidth used by topic
rostopic delay display delay of topic from timestamp in header
rostopic echo print messages to screen
rostopic find find topics by type
rostopic hz display publishing rate of topic
rostopic info print information about active topic
rostopic list list active topics
rostopic pub publish data to topic
rostopic type print topic or field type

Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'
  • rosbag 命令 rosbag 将ROS系统运行过程中的数据录制到一个.bag文件中,然后可以通过回放数据来重现相似的运行过程.退出录制时按Ctrl-C退出该命令,你应该会看到在当前目录下一个以年份、日期和时间命名并以.bag作为后缀的文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
titan@titan-ubuntu1:~$ rosbag -h
Usage: rosbag <subcommand> [options] [args]

A bag is a file format in ROS for storing ROS message data. The rosbag command can record, replay and manipulate bags.

Available subcommands:
check Determine whether a bag is playable in the current system, or if it can be migrated.
compress Compress one or more bag files.
decompress Decompress one or more bag files.
decrypt Decrypt one or more bag files.
encrypt Encrypt one or more bag files.
filter Filter the contents of the bag.
fix Repair the messages in a bag file so that it can be played in the current system.
help
info Summarize the contents of one or more bag files.
play Play back the contents of one or more bag files in a time-synchronized fashion.
record Record a bag file with the contents of specified topics.
reindex Reindexes one or more bag files.

For additional information, see http://wiki.ros.org/rosbag

参考文档

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