ROS基本信息汇总

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话题的信息。

$ 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作为后缀的文件
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