zoukankan      html  css  js  c++  java
  • 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 机器人操作系统进阶实战》第一章,感兴趣的话点击链接查看课程了解详情哦!

  • 相关阅读:
    nextLine() 、nextInt()的跳过问题
    Spring事务管理
    常见web错误码
    connect()函数
    int main(int argc,char*argv[])
    cin.getline函数
    TCP数据报结构以及三次握手(图解)
    TCP报文首部
    strtol函数
    MySQL简介
  • 原文地址:https://www.cnblogs.com/shiyanlou/p/14151138.html
Copyright © 2011-2022 走看看