ROS基础

ROS简介

ROS是一个用于机器人的开源的元操作系统。它提供了您期望从操作系统获得的服务:包括硬件抽象、底层设备控制、常用功能的实现、进程间消息传递和包管理。它还提供了跨平台的工具和库,这些工具和库可用于获取、构建、编写和运行代码。ROS在某些方面类似于“机器人框架”,如Player、YARP、Orocos、CARMEN、Orca、MOOS和Microsoft Robotics Studio。ROS运行时“图”是一个使用ROS通信基础设施松散耦合的进程对等网络(可能分布在多台机器上)。ROS实现了多种不同风格的通信,包括通过服务的同步RPC风格通信、通过主题的异步数据流以及参数服务器上的数据存储。ROS不是一个实时框架,尽管可以将ROS与实时代码集成。Willow Garage PR2机器人使用一个名为pr2_etherCAT的系统,该系统在实时进程中传输ROS消息。ROS还可以与Orocos实时工具包无缝集成。

以上咨询来自ROS wiki《What is ROS?

概括一下:

  1. ROS是一个机器人领域的元操作系统。也就是说,它并不是真正意义上的操作系统,其底层的任务调度、编译、设备驱动等还是由它的原生操作系统Ubuntu Linux完成。ROS实际上是运行在Ubuntu Linux上的亚操作系统,或者说软件框架,但提供硬件抽象、函数调用、进程管理这些类似操作系统的功能,也提供用于获取、编译、跨平台的函数和工具。
  2. ROS的核心思想就是将机器人的软件功能做成一个个节点,节点之间通过互相发送消息进行沟通。这些节点可以部署在同一台主机上,也可以部署在不同主机上,甚至还可以部署在互联网上。ROS网络通信机制中的主节点(master)负责对网络中各个节点之间的通信过程进行管理调度,同时提供一个用于配置网络中全局参数的服务
  3. ROS是松耦合软件框架,利用分布式通信机制实现节点间的进程通信。ROS的软件代码以松耦合方式组织,开发过程灵活,管理维护方便。
  4. ROS具有丰富的开源功能库。ROS是基于BSD(Berkeley Software Distribution,伯克利软件发行)协议的开源软件,允许任何人修改、重用、重发布以及在商业和闭源产品中使用,使用ROS能够快捷地搭建自己的机器人原型。

ROS的架构

ROS在计算机系统中的位置

在这里插入图片描述
ROS实际上是运行在Ubuntu Linux上的亚操作系统,或者说软件框架,其底层的任务调度、编译、设备驱动等还是由它的原生操作系统Ubuntu Linux完成。但ROS提供硬件抽象、函数调用、进程管理这些类似操作系统的功能,也提供用于获取、编译、跨平台的函数和工具。

ROS系统计算图架构

在这里插入图片描述

  • ROS中可执行程序的基本单位叫节点(node),节点之间通过消息机制进行通信,这样就组成了一张网状图,也叫计算图。
  • 节点是可执行程序,通常也叫进程。ROS功能包中创建的每个可执行程序在被启动加载到系统进程中后,就是一个ROS节点。
  • 节点之间通过收发消息进行通信,消息收发机制分为话题(topic)、服务(service)和动作(action)三种。
  • 计算图中的节点、话题、服务、动作都要有唯一名称作为标识。
  • ROS利用节点将代码和功能解耦,提高了系统的容错性和可维护性。所以最好让每个节点都具有特定的单一功能,而不是创建一个包罗万象的庞大节点。
  • 数据包(rosbag)是ROS中专门用来保存和回放话题中数据的文件,可以将一些难以收集的传感器数据用数据包录制下来,然后反复回放来进行算法性能调试。
  • 参数服务器能够为整个ROS网络中的节点提供便于修改的参数。参数可以认为是节点中可供外部修改的全局变量,有静态参数和动态参数。静态参数一般用于在节点启动时设置节点工作模式;动态参数可以用于在节点运行时动态配置节点或改变节点工作状态,比如电机控制节点里的PID控制参数。
  • 主节点负责各个节点之间通信过程的调度管理。因此主节点必须要最先启动,可以通过roscore命令启动。

ROS文件系统结构

在这里插入图片描述

  1. 工作空间是一个包含功能包、编译包和编译后可执行文件的文件夹,用户可以根据自己的需要创建多个工作空间,在每个工作空间中开发不同用途的功能包。
    • src文件夹放置各个功能包和配置功能包的CMake配置文件CMakeLists.txt。
    • build文件夹放置编译CMake和catkin功能包时产生的缓存、配置、中间文件等。
    • devel文件夹放置编译好的可执行程序,这些可执行程序是不需要安装就能直接运行的。
  2. 功能包是ROS中软件组织的基本形式,具有创建ROS程序的最小结构和最少内容,它包含ROS节点源码、脚本、配置文件等。
    • CMakeLists.txt是功能包配置文件,用于编译Cmake功能包编译时的编译配置。
    • package.xml是功能包清单文件,用xml的标签格式标记该功能包的各类相关信息,比如包的名称、开发者信息、依赖关系等,主要是为了使功能包的安装和分发更容易。
    • include/<pkg_name>是功能包头文件目录,可以把功能包程序中包含的*.h头文件放在这里。include目录之所以还要加一级路径<pkg_name>是为了更好地区分自己定义的头文件和系统标准头文件,<pkg_name>用实际功能包的名称替代。不过这个文件夹不是必要项,比如有些程序没有头文件。
    • msg、srv和action这三个文件夹分别用于存放非标准话题消息、服务消息和动作消息的定义文件。ROS支持用户自定义消息通信过程中使用的消息类型。这些自定义消息不是必要的,比如程序只使用标准消息类型。
    • scripts目录存放Bash、Python等脚本文件,为非必要项。
    • launch目录存放节点的启动文件,*.launch文件用于启动一个或多个节点,在含有多个节点的大型项目中很有用,为非必要项。
    • src目录存放功能包节点所对应的源代码,一个功能包中可以有多个节点程序来完成不同的功能,每个节点程序都可以单独运行。

ROS命令行工具

ROS提供了命令行工具,能在shell终端直接输入命令并使用,其类似于Linux命令。

运行相关的命令

  • roscore 启动主节点,可以通过roscore --help查看详细用法。
  • rosrun 运行单个节点,可以通过rosrun --help查看详细用法。
  • roslaunch 同时启动多个节点,可以通过roslaunch --help查看详细用法。

信息显示相关的命令

  • rosnode 是与节点相关的命令,可以通过rosnode --help查看详细用法。
  • rostopic 是与话题相关的命令,可以通过rostopic --help查看详细用法。
  • rosservice 是与服务相关的命令,可以通过rosservice --help查看详细用法。
  • rosparam 是与参数相关的命令,可以通过rosparam --help查看详细用法。
  • rosmsg 是与消息类型相关的命令,可以通过rosmsg --help查看详细用法。
  • rossrv 是与服务类型相关的命令,可以通过rossrv --help查看详细用法。
  • rosbag 是与数据包相关的命令,可以通过rosbag --help查看详细用法。

catkin操作相关的命令

  • catkin_init_workspace 初始化catkin工作空间,可以通过catkin_init_workspace --help查看详细用法。
  • catkin_create_pkg 创建功能包,可以通过catkin_create_pkg --help查看详细用法。
  • catkin_make 编译功能包,可以通过catkin_make --help查看详细用法。

功能包操作相关的命令

  • rospack 查询功能包信息, 可以通过rospack --help查看详细用法。
  • rosinstall 安装功能包更新, 可以通过rosinstall --help查看详细用法。
  • rosdep 是功能包依赖的命令, 可以通过rosdep --help查看详细用法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值