ROS 机器人操作系统进阶实战

ROS(Robot Operating System) 是一个开源的机器人操作系统,目的是提供开发平台、工具及生态给开发人员,可以让开发人员快速开发。本课程通过精心设计的案例,分析技术要点、理解运行原理,以达到举一反三的效果,从而应用到自己的机器人开发工作中去。

本课程将详细介绍 ROS 的使用,课程包括了 Topic 通讯,Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。

实验介绍

在进行 ROS 项目开发前,首先介绍下整个 ROS 项目在部署运行过程中分为几个部分,以及了解工程结构中 Workspace、Package、Node 它们之间的包含关系。

知识点

  • 架构介绍
  • 文件目录结构
  • Workspace 创建
  • Package 创建

架构介绍

系统基本架构

总体来说,整个 ROS 项目在部署运行过程中,分为以下几个部分:

  • 环境
    包含硬件环境和软件环境。通常一个 ROS 机器人,需要一个开发主板用于运算和控制操作。

例如我们用树莓派作为开发板,用于机器人的运算和控制操作,那么这就是软件所运行的硬件环境。当然开发板上可能会外接一些其它硬件,如摄像头,那么这些也属于硬件环境。

开发板上通常需要有操作系统,所装的操作系统属于软件环境。

  • 执行器
    执行器的主要作用是给操作系统发送一些指令,通过指令去控制硬件操作。例如发送指令给开发板,让开发板外接的舵机转动,然后驱动物体运动。执行器更像是硬件驱动的输入。

  • 传感器
    在硬件环境中,可能会安装一些环境探测的硬件,例如温度感应器。这些硬件感应器会将感觉的数据发布出来,传感器其实扮演的就是这些硬件发布数据的传播者,更像是硬件驱动的输出。

  • 软件结构
    这里所说的软件结构是指,ROS 机器人运行时部署的软件及软件间的关系。

机器人运行起来后,内部会有很多单元程序运行,每个单元程序做很小的事情。比如读取硬件驱动传递的数据、处理读取的数据、判断数据、发出指令等。

总之,ROS 将复杂的程序分解成了很小的一部分,每部分干很少的活,这样每个部分还可以复用。

ROS 软件结构组成

我们开发的每个节点都需要到 ROS Master 中去注册,如下图所示:

ROS Master:

  • 管理 Node 节点间的通讯。
  • 每个 Node 节点都需要到 Ros Master 中进行注册。

启动节点前,必须启动 ROS Master。命令为 roscore

ROS Node:
我们在 ROS 中所做的其实就是开发节点工作:

  • 具备单一功能的可执行程序。
  • 可以单独编译,可执行,可管理。
  • 存放在 package 中。

文件系统

工作目录结构

Workspace、Package、Node 是工程结构中的几个关键词,也是核心概念。以下图片展示了三者之间的关系:

标准的 Workspace 工作目录结构如下:

工作目录理解

类似在企业中通过部门管理员工,俗话说人多瞎胡乱、鸡多不下蛋。一旦项目变得复杂后,组织结构化和规范化就变得非常重要。

工作目录说明

我们在开发一个 ROS 项目时,是以工作空间(workspace)来表示一个项目,一个工作空间包含如下 5 个部分:

  • build:ROS 编译打包的结果产出目录。我们不需要对这个文件夹做任何编辑操作,属于自动生成。
  • devel:开发所需要的目录。
  • src:存放 package 的目录。
  • CMakeLists.txt:整个工作空间编译的脚本。此文件我们通常不用修改。
  • package:工作单元。

一个项目可以创建多个工作单元(package),一个工作单元包含如下几个部分:

  • pkg1:package 的名称,开发过程中根据自己实际情况进行创建设定。
  • CMakeLists.txt:当前 package 的编译脚本。通常需要为 c++ 代码添加编译时的依赖、执行等操作。
  • package.xml:package 相关信息。通常添加一些 ros 库的支持。
  • include 文件夹:存放 c++ 头文件。
  • config 文件夹:存放参数配置文件,格式为 yaml。
  • launch 文件夹:存放 .launch 文件。
  • src:c++ 源代码。
  • scripts:Python 源代码。
  • srv:存放定义的 service。
  • msg:存放自定义的消息协议。
  • action:存放自定义的 action。

实验总结

通过上面的实验,我们熟悉了 ROS 的系统架构以及 ROS 文件系统层次中的关键概念,并讲解了 Clion Python 环境的搭建与配置,使我们更加清晰的了解 ROS 的运行机制、能够更高效的编写程序。

本实验完整代码下载:

wget https://labfile.oss.aliyuncs.com/courses/2947/code1.tar.gz
# 解压缩,使用如下命令
tar -zxf code1.tar.gz

以上选自新课《ROS 机器人操作系统进阶实战》第一章,感兴趣的话点击链接查看课程了解详情哦!

原文地址:https://www.cnblogs.com/shiyanlou/p/14151138.html