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

  • 快捷键

     # 查看环境中是否有包
     rospack list
     ​
     # 如果没有
     ~/.bashrc

ROS基本工作环境搭建

ROS需要部署在Ubuntu等环境中,若未安装可到之前的文章中安装,通过不同的Ubuntu版本下载对应的ROS

版本 代号 ROS版本
Ubuntu 14.04 Trusty Tahr ROS
Ubuntu 16.04 Xenial Xerus ROS
Ubuntu 18.04 Bionic Beaver ROS
Ubuntu 20.04 Focal Fossa ROS1
Ubuntu 22.04 jammy Jellyfish ROS1
Ubuntu 24.04 Noble Numbat ROS2
  • ros一键安装工具(注意-O大写)

     wget http://fishros.com/install -O fishros && . fishros
  • 创建工作空间及功能包目录

     mkdir -p ~/catkin_ws/src
  • 初始化工作空间

     cd ~/catkin_ws/src
     catkin_init_workspace
  • 编译工作空间

     cd ~/catkin_ws/
     catkin_make -DCMAKE_EXPORT_COMPILE_COMMANDS=1
  • 配置环境变量(使终端能正确识别和使用 ROS 的命令和包)

     # 暂时性配置:
     source devel/setup.bash
     # 永久配置如下:
     gedit ~/.bashrc
     #在末尾添加 username为自己的文件名
     `source /home/username/catkin_ws/devel/setup.bash`
     # 保存文件后使其生效
     source ~/.bashrc
     # 树莓派官方推荐的另一种配置方式,确实更加便捷
     echo "source ~/ros_ws/devel/setup.bash" >> ~/.bashrc
     source ~/.bashrc
  • 创建功能包

    功能包是用于存放每个节点程序的文件夹,一般存放于src目录

     cd ~/ros_ws/src
     catkin_create_pkg learn_topic std_msgs rospy roscpp geometry_msgs turtlesim
     # 解释一下命令行的组成:
     # `catkin_create_pkg:创建命令
     # `learn_topic:功能包的名称
     # `roscpp、rospy、geometry_msgs turtlesim:这个是功能包的一下依赖库,也可以后边需要的时候补充到功能包目录下的CMakeLists.txt文件中
  • 功能包文件夹说明

    include:存放需要编译程序的头文件

    src:存放编译节点程序的源码文件

    CMakeLists.txt:编译所需要的文件,其中包括声明需要连接哪些库,需要哪些依赖以及生成哪些程序等等

    package.xml:声明了编译需要的一些依赖以功能包的一些信息,包括功能包版本、功能包创建的作者等等

    在后边,我们会学习到如何编写一个节点程序,会有C++版本和Python版本,一般的,C++版本的程序源码是存放在src,而Python版本的源码存放在scripts文件夹,这个文件夹是自己在功能包路径下创建的,可以输入以下命令进行创建,mkdir scripts

    包括后边会提及到到的launch文件和自定义的消息文件,都是需要在功能包的目录下创建相对应的launch文件和msg文件夹进行存放。

  • roscore

    在运行所有的ros程序前,需要启动roscore(在后边运行launch文件的时候则不需要,launch文件启动时会启动roscore),roscore只能运行一个,如果在多个终端启动roscore,则会提示已启动roscore

    终端输入roscore

  • rosrun

     # rosrun是启动ros节点程序的命令,前边的roscore比较特殊,终端输入即可启动,但是其他的ros节点程序,大多数都属有rosrun来启动,命令格式如下:
     # pkg_name:功能包名字,后边可执行程序的功能包文件夹的名字
     executable_program:可执行程序的名字,可以是C++编译生成的文件,也可以是Python编写的文件末尾是.py可执行文件。
     rosrun pkg_name executable_program
     ​
     # 举例,以经典的小海龟为例,在启动roscore后,我们在另一个终端输入,
     rosrun turtlesim turtlesim_node
     ​
     # 启动成功后,会出现一只小海龟,我们通过rosnode list 来查看下当前的节点有哪些,终端输入,
     rosnode list
     ​
     # 相比于之前的/rosout多了个/turtlesim,同样可以利用rosnode info 工具来查看节点信息,终端输入,
     rosnode info /turtlesim
     ​
     # 发布的话题以及相关的数据类型
     Publications: 
         /rosout_agg [rosgraph_msgs/Log]
     ​
     # 订阅的话题以及相关的数据类型
     Subscriptions: 
         /rosout [unknown type]
     ​
     # 提供的服务以及相关的数据类型
     Services: 
         /rosout/get_loggers
         /rosout/set_logger_level
  • vscode

    下载vscode->下载deb(浏览器或者apt-get install code)->双击即可->终端键入code

    安装插件

    C/C++

    C/C++ Extension Pack

    C/C++ Themes

    Python

    Python Debugger

    Pylance

    CMake

    Code Runner

    Remote-SSH

    Robot Developer Extensions for ROS 1

ROS简介

  • ROS及其工作空间定义

    ROS(Robot Operating System,简称··1·1·1·1·1·1·1·······“ROS”)是一个适用于机器人的开源的操作系统。

    它提供了操作系统应有的服务,包括硬件抽象底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。

    ROS 的主要目标是为机器人研究和开发提供代码复用的支持。

    ROS是一个分布式的进程(也就是“节点”)框架,这些进程被封装在易于被分享和发布的程序包和功能包中。

    ROS工作空间本质上是一个连接了操作系统与 ROS 程序的中间件框架,便于进行模块化设计与组织管理 ROS 功能包(Package),一个系统一般只运行一个 ROS 工作空间,一个 ROS工作空间可设计多个功能包。每个 ROS 功能包是算法与功能的集合,功能包含节点(Node)、消息类型(Message)、服务(Service)、配置文件等。节点作为一个独立进程是ROS 可执行的最小计算单位,通过话题、服务或动作实现与其他节点通信。话题为 ROS节点间通信信道,遵循发布-订阅(Pub/Sub)模式,一个节点可以发布与订阅一个或多个话题。

    ROS 工作空间可通过 rosrun rqt_graph rqt_graph 指令查看当前 ROS 工作空间的工作节点

  • ROS的主要特点

    分布式架构(每一个工作进程都看作一个节点,使用节点管理器统一管理),

    多语言支持(如C++、Python等),

    良好的伸缩性(既可以写一个节点,也可以通过roslaunch将很多节点组织成一个更大的工程),

    源码开放(ROS遵循BSD协议,对个体和商业应用及修改完全免费)。

ROS整体架构

开源社区级 : 主要包括开发人员知识、代码、算法共享。

文件系统级 : 用于描述可以在硬盘上查到的代码及可执行程序,

计算图级 : 体现进程与进程、进程与系统之间的通讯。

ROS计算图集

  • 节点

    节点是主要的计算执行进程。ROS是有很多节点组成的,多个节点启动后,可以通过下边指令查看各个节点之间的话题通讯。

    rqt_graph

  • 消息

    节点之间通过消息实现彼此的逻辑联系与数据交换。

  • 话题(主题)

    话题是一种传递消息(发布/订阅)的方式。每一条消息都要发布到相应的主题上,每一个话题都是强类型的。ROS的话题消息可以使用TCP/IP或UDP传输,ROS默认使用的传输方式是TCP/IP。基于TCP传输成为TCPROS,是一种长连接方式;基于UDP传输的成为UDPROS,是一种低延迟、高效率的传输方式,但容易丢失数据,适合于远程操作。

  • 服务

    服务用于请求应答模型,也必须有一个唯一的名称。当一个节点提供某个服务时,所有的节点都可以通过使用ROS客户端所编写的代码与之通讯。

  • 消息记录包

    消息记录包是一种用于保存和回放ROS消息数据的文件格式,保存在.bag文件中。是一种用于存储数据的重要机制。

  • 参数服务器

    参数服务器是可通过网络访问的共享的多变量字典,通过关键字存储在节点管理器上。

  • 节点管理器(Master)

    节点管理器用于主题、服务名称的注册和查找等。在整个ROS系统中如果没有节点管理器,就不会有节点之间的通讯。

文件系统集

功能包之间可以配置依赖关系。如果功能包A依赖功能包B,那么在ROS构建系统时,B一定要早于A的构建,并且A可以使用B中的头文件和库文件。

文件系统级的概念如下:

  • 功能包清单:

    这个清单是指明功能包的依赖关系、源文件编译标志信息等。功能包中的package.xml文件就是一个功能包清单。

  • 功能包:

    功能包是ROS系统中软件组织的基本形式,包含运行的节点以及配置文件等。

  • 综合功能包

    将几个功能包组织在一起,即可形成综合功能包。

  • 消息类型

    ROS中节点之间发送消息时需要事先进行消息说明。ROS中提供了标准类型消息,也可以自行定义。消息类型的说明存储在功能包下的msg文件内。

  • 服务类型

    定义了在ROS系统中由每个进程提供的关于服务请求和响应的数据结构。

通讯机制

  • Topic

    ros中广为使用的是异步的 publish-subscribe 通讯模式。Topic 一般 用于单向,消息流通讯。Topic 一般拥有很强的类型定义:一种类型的topic只能接受/ 发送特定数据类型(message type)的message。Publisher 没有被要求类型一致性,但是接受时subscriber会检查类型 的md5,进而报错。

  • Service

    service 用于处理ros通讯中的同步通讯,采用server/client 语义。每个service type拥 有 request 与 response两部分,对于service中的 server,ros不会检查重名(name conflict),只有最后注册的server会生效,与client建立连接。

  • Action

    action使用多个topic组成,用于定义任务,任务定义包括目标(Goal)、任务执行过程状态反馈(Feedback)和结果(Result)等。编译action将会自动产生7个结构体分别为:Action、ActionGoal、ActionFeedback、ActionResult、Goal、Feedback、Result结构体。

    Action的特点:

    一种问答通讯机制

    带有连续反馈

    可以在任务中终止进行

    基于ROS的消息机制实现

    Action的接口:

    goal:发布任务目标

    cancel:请求取消任务

    status:通知客户端当前状态

    feedback:周期反馈任务运行的监控数据

    result:向客户端发送任务的执行结果,只发布一次。

    通讯模式特点对比

特点 Topic Service Action
响应机制 结果响应 进度响应,结果响应
同步性 异步 同步 异步
通讯模型 PublisherSubscriber ClientServer ClientServer
Node对应关系 多对多 多(Client)对一(Server) 多(Client)对一(Server)

常用组件

launch启动文件;TF坐标变换;Rviz;Gazebo;QT工具箱;Navigation;MoveIt!

  • launch:启动文件(Launch File)是ROS中一种同时启动多个节点的途径,它还可以自动启动ROS Master节点管理器,并且可以实现每个节点的各种配置,为多个节点的操作提供很大便利。

  • TF坐标变换:机器人本体和机器人的工作环境中往往存在大量的组件元素,在机器人设计和机器人应用中都会涉及不同组件的位置和姿态,TF是一个让用户随时间跟踪多个坐标系的功能包,它使用树形数据结构,根据时间缓冲并维护多个坐标系之间的坐标变换关系,可以帮助开发者在任意时间、在坐标系间完成点、向量等坐标的变换。

  • QT工具箱:为了方便可视化调试和显示,ROS提供了一个Qt架构的后台图形工具套件——rqt_common_plugins,其中包含不少实用工具:日志输出工具(rqt_console)、计算图可视化工具(rqt_graph)、数据绘图工具(rqt_plot)、参数动态配置工具(rqt_reconfigure)

  • Rviz:rviz是一款三维可视化工具,很好地兼容了各种基于ROS软件框架的机器人平台。在rviz中,可以使用XML对机器人、周围物体等任何实物进行尺寸、质量、位置、材质、关节等属性的描述,并且在界面中呈现出来。同时,rviz还可以通过图形化方式,实时显示机器人传感器的信息、机器人的运动状态、周围环境的变化等。

  • Gazebo:Gazebo是一个功能强大的三维物理仿真平台,具备强大的物理引擎、高质量的图形渲染、方便的编程与图形接口,最重要的还有其具备开源免费的特性。虽然Gazebo中的机器人模型与rviz使用的模型相同,但是需要在模型中加入机器人和周围环境的物理属性,例如质量、摩擦系数、弹性系数等。机器人的传感器信息也可以通过插件的形式加入仿真环境、以可视化的方式显示。

  • Navigation:navigation是ROS的二维导航功能包,简单来说,就是根据输入的里程计等传感器的信息流和机器人的全局位置,通过导航算法,计算得出安全可靠的机器人速度控制指令。

  • Moveit:Moveit!功能包是最常用的工具包,主要用来进行轨迹规划。Moveit!配置助手用来配置一些在规划中需要用到的文件,非常关键。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐