学习 ROS 机器人没有前途?!

2023-05-16

8a9d83fe492185ff73e4c586e47f2986.png

点击蓝字 关注我们

79ce6bd43910fe93e641c69a851ac3e9.png

本文转载自蓝桥云课合作作者:机器马,文末有小惊喜哦~

c6c2f904043213838aff48453647708b.png

01

ROS 是什么

机器人操作系统(ROS)是一种用于编写机器人软件的灵活框架。它是工具,库和协议的集合,旨在简化各种机器人平台上,去构建复杂而强大的机器人。

fcb9067c34881d0844ecd7e5beb9a15a.png

ROS 是 Robot Operating System 的简写,翻译过来就是机器人操作系统。它是一个软件框架,目的是提供开发平台,工具及生态给开发人员,让开发人员快速的去开发强大的机器人系统。

b7193c5d784433b2dbd07cbce8d5d0ca.png

(图片源于网络,侵删)

cf0dded2c3abb432c927389ad486d33c.png

02

框架介绍

系统基本架构,总的来说,整个 ROS 的项目在部署运行过程中,分为几个部分:环境、 执行器、 传感器、 软件结构。

c8df7bc99655ec146f91c69b4aa5f7a7.png

环境

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

例如,我们用树莓派作为开发板,用来作为这个机器人的运算和控制操作,那么这个就是软件所运行的硬件环境。

开发板上通常需要有操作系统,所装的操作系统属于系统环境。当然开发板上可能会外接一些其他硬件,如摄像头。那么这些硬件也属于硬件环境。

执行器

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

执行器更像是硬件驱动的输入。

传感器

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

软件结构

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

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

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

65e16dd71584f7baa7c7efaeb2decbb0.png

03

ROS 软件结构组成

ROS 分为 ROS Master 和 ROS Node。

ROS Master

  • 管理 Node 节点间进行通讯的

  • 每个 Node 节点都需要到 Ros Master 中进行通讯

  • 通 roscore 命令可以启动 ROS Master,启动节点前,必须启动 ROS Master。(启动 ROS Master 命令 : roscore)

ROS Node

  • 具备单一功能的可执行程序;

  • 可以单独编译,可执行、可管理;

  • 存放在 package 中。

7f02787afbba5fa834668d63c737ea38.png

04

ROS 哲学

Peer to peer

点对点的设计

Node节点单元

  • 采用了分布式网络结构

  • 节点间通过 RPC + TCP/UDP 进行通讯

Distributed

  • 分散协同式布局

  • 可以将 ROS 同时部署到多台机器上,让多台机器进行通讯

Multi-lingual

  • 多编程语言的支持

  • 可以采用 python,c++,lisp 等语言进行开发

  • 遵循协议进行编码,和编程语言无关

Light-weight

  • 组件工具包丰富

  • ros 提供了丰富的开发工具包

Free and open-source

  • 免费并且开源

  • BSD 许可,可修改,可复用,可商用

  • 开源使软件进步

a7eec4b59a19ae5d09f5fa760fb53e36.png

05

文件系统

工作目录结构为:

fa720953dbdb211ab40cd0d190c28fd2.png

Workspace,Package,Node 是工程结构中的几个关键词,也是核心概念

以上视图我们初步的认知他们的包含关系。

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

c8967b0b9b4e9cd46f4caf4222738b46.png

2.完整的机构示意图如下:

64270bd9ad95223f92ee63efe35d4d71.png

3.工作目录理解

4bbdcb89d4b3d135436e4b41be3c82ff.png

生活中,企业通过部门管理员工。

人多瞎胡乱,鸡多不下蛋。一旦项目变大,组织结构和规范就变的非常重要。

ros 的这种结构划分,和公司结构划分是一个道理。功能复杂的时候进行管理划分,规范开发,让开发效率提升,解决一些耦合。

191f2f669daacfd116ba88f80fae7dbc.png

06

工作目录说明

工作空间 workspace

我们在开发一个 ROS 项目的时候,是以工作空间来代表一个项目的。

  • workspace:工作空间;

  • 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。

workspace 创建

1. 新建工作空间目录结构 
   mkdir -p first_ws/src
   
2. 编译工作空间
   cd first_ws
   catkin_make
   
   (来到创建的工作空间目录下,调用ros的名命令catkin_make,将工作空间进行编译。
   编译后,会得到工作空间的文件结构,build,devel,CMakeLists.txt都会自动生成。catkin_make是ROS的编译工具,我们会经常用到)

package 创建

1. 来到workspace的src目录下
   cd first_ws/src
2. 通过catkin创建package
    catkin_create_pkg firstros roscpp rospy rosmsg
    
       (参数解释:catkin_create_pkg是创建package的命令。运行以上命令,会新建好package的目录,并且在目录中创建CMakeLists.txt,package.xml,src,include等文件和  目录


    第一个参数firstros是指创建的package名称,可以根据自己的实际需求去设定。


    后面的参数roscpp,rospy,rosmsg是指当前创建的这个package需要提供哪些环境依赖。


    roscpp是对c++的一种依赖,有了它就可以用c++开发ros程序。


    rospy是对python的一种依赖,有了它就可以用python开发ros程序。


    rosmsg是Node间通讯的消息协议依赖,有了它就可以让节点间进行消息通讯。


    注意:通常在开发过程中,这三个依赖都是必备的。)

使用Clion开发package

1. 启动clion
     cd ~/clion/bin
     ./clion.sh
     开启命令行工具,来到工作空间目录下,设置开发环境。此操作非常重要。devel目录中的setup.bash是用于开发环境中,方便找到开发依赖的。来到clion的安装目录下,通过命令启动clion
  • 使用clion打开package

clion 启动后,首先点击 open。然后找到工作空间,在工作空间的 src 中找到要打开的 package。

  • 新建 python 文件

特别要注意的是,目前 ROS Melodic 版本还不支持 python3,要等到 ROS N 版才会支持。

因此,我们选择环境的时候选择 python2.x 版本。默认编写的 py 文件是不具备执行权限的,我们需要手动讲文件权限修改为可执行。

350dcc32e83f72551ab7ff6be3436a9a.png

调试运行代码

1. 启动命令行,来到工作空间目录下,编译项目
   cd first_ws
   catkin_make
   
   编译的过程,会将新建的package进行编译。
   在编写python版本程序时,这一操作可以省略。
   但是建议养成良好习惯,还是进行编译。
   
2. 启动ROS Master
   roscore
   
   打开新的命令行,启动ROS master
   ROS节点启动前,必须启动ros master
   
3. 运行节点
   启动编译好的node节点,有两种方式可以运行。
     1. 通过clion工具直接运行
     2. 通过命令行运行
       cd first_ws
    source devel/setup.bash   (做这一步的操作是为了让rosrun 命令找到刚刚编译好的node,新打开的窗口如果没有把当前工程需要的环境source 进去的话, 就       需要重新source)
    rosrun firstros test.py   (rosrun命令后跟第一个参数是package的名称,第二个参数是节点名称)

a9a038fb60ea9248501e591f1d73d462.png

07

蓝桥云课专属福利

作者机器马联合蓝桥云课上线了《ROS 机器人操作系统进阶实战》,通过精心设计的案例,分析技术要点、理解运行原理,以达到举一反三的效果,从而应用到自己的机器人开发工作中去。

f63b25f6f599364b06bff789e50ec178.png

现扫码加入课程,可领取 3 日标准会员,即八折优惠。

0404c4fc67b251379ea1eaf55a511a21.png

7e2b6d3a720743e72ef14ed1f3366d88.gif

戳戳“阅读原文”直达课程页面!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

学习 ROS 机器人没有前途?! 的相关文章

随机推荐

  • 在ubuntu 11.04下编写驱动程序

    在ubuntu11 04下直接就可以编写驱动程序 xff0c 并进行编译 hello c include 34 linux init h 34 include 34 linux module h 34 static int hello in
  • ROS的优势与不足(除了ROS 机器人自主定位导航还能怎么做?)

    导读 xff1a 随着这两年国内机器人的升温 xff0c 自主定位导航技术作为机器人智能化的第一步正不断引起行业内的重视 为了实现这一功能 xff0c 不少厂家选择采用机器人操作系统ROS xff08 Robot Operation Sys
  • C++版本发展史

    1 C 43 43 98 2 C 43 43 03 3 C 43 43 11 3 1 nullptr 3 2 auto 3 3 decltype 3 4 初始化列表 3 5 范围for循环 3 6 右值引用 3 7 字符串字面量 3 8 n
  • 分布式数据库难题(三):数据一致性

    1 什么是数据一致性 一直以来 xff0c 在 分布式系统 和 数据库 这两个学科中 xff0c 一致性 xff08 Consistency xff09 都是重要概念 xff0c 但它表达的内容却并不相同 对于分布式系统而言 xff0c 一
  • 分布式数据库难题(四):单机事务

    1 ACID的含义 在数据库中 xff0c 事务 是由多个操作构成的序列 1970 年詹姆斯 格雷 xff08 Jim Gray xff09 提出了事务的 ACID 四大特性 xff0c 将广义上的事务一致性具化到了原子性 一致性 隔离性和
  • 对一个整数进行因式分解,求出所有质因数

    1 题目描述 给定一个正整数N xff0c 对N进行质因数分解 xff0c 求解N的所有质因数 2 解题思路 xff08 1 xff09 2 是很特殊的 xff0c 必须单独列出 xff08 2 xff09 必须先判断是否质数 因为如果是质
  • Windows10下安装Ubuntu18.04LTS详细教程

    这篇文章分享自己在Windows10系统下安装VMware虚拟机 xff0c 然后在VMware中安装Ubuntu 18 04 LTS的详细过程 之所以选择在虚拟机中安装Ubuntu xff0c 主要是可以不影响自己电脑的正常使用 xff0
  • 我的2011 写给小白

    许久前就想写这篇日志了 xff0c 但是一直以各种理由搪塞着 xff0c 没空闲 xff0c 再加上该死的期末考试 xff0c 唉 xff0c 真是愁煞人也 xff0c 现在好了 xff0c 什么都完事了 xff0c 也淡定了 xff0c
  • Pixhawk的历史

    发展历程 xff1a APM gt PX4FMU IO gt Pixhawk xff1a 1 Arduino简介 Arduino就是主要以以AVR单片机为核心控制器的单片机应用开发板 xff08 当然也有其他核心的例如STM32版本的但是不
  • 姿态解算基础:欧拉角、方向余弦、四元数

    什么是姿态解算 xff1a 飞行器的姿态解算过程涉及到两个坐标系 xff0c 一个是运载体的机体坐标系 xff0c 该坐标系与运载体固连 xff0c 当运载体转动的时候 xff0c 这个坐标系也跟着转动 xff0c 我们假设运载体的坐标系为
  • 姿态解算进阶:互补滤波(陀螺仪、加速度计、地磁计数据融合)

    互补滤波原理 xff1a 在四轴入门理论知识那节我们说 xff0c 加速度计和磁传感器都是极易受外部干扰的传感器 xff0c 都只能得到2维的角度关系 xff0c 但是测量值随时间的变化相对较小 xff0c 结合加速度计和磁传感器可以得到3
  • C++实现线程池

    本文转载自 xff1a https blog csdn net caoshangpa article details 80374651 1 为什么需要线程池技术 目前的大多数网络服务器 xff0c 包括Web服务器 Email服务器以及数据
  • 详解coredump

    1 什么是coredump xff1a 2 开启或关闭core文件的生成 xff1a 3 core文件的存储位置和文件名 xff1a 4 造成程序core的原因 xff08 参考 xff09 xff1a 5 用GDB调试coredump x
  • C++中二进制、字符串、十六进制、十进制之间的转换

    1 十进制和二进制相互转换 2 字符串和二进制相互转换 3 字符串和十进制相互转换 4 十进制和十六进制相互转换 5 二进制和十六进制 1 十进制和二进制相互转换 xff08 1 xff09 十进制转二进制 int a 61 10 bits
  • 解决 docker: Invalid containerPort: 5000 .

    复制粘贴的命令报这个错误 xff0c 结果手敲了一下就好了 可能就是 v 那里字符有点问题 xff0c 或者多个空格之类的 看了下其他人说的解决办法 xff0c 说也有可能是大写字母的问题 学习不要图省事 xff0c 真的 xff01
  • linux输入yum后提示: -bash: /usr/bin/yum: No such file or directory的解决方法

    一 首先了解Linux系统下这两个命令的区别 yum xff1a 属于 xff1a RedHat系列 常见系统有 xff1a Redhat Centos Fedora等 apt get xff1a 属于 xff1a Debian系列 常见系
  • OpenCV矩形检测

    点击我爱计算机视觉标星 xff0c 更快获取CVML新技术 今天在52CV交流群里有朋友问到矩形检测的问题 xff0c 恰好前几天做了一个与此相关的项目 xff0c 调研了一下相关的算法 xff08 期间被某带bug的开源代码坑了很久 xf
  • 修改树莓派系统的虚拟内存大小(SWAP)

    树莓派默认的虚拟内存大小才100M xff0c 有时候我们需要扩大它 xff0c 树莓派的虚拟内存配置文件和debian默认的位置不一样 xff0c 所以这里我们修改的是 etc dphys swapfile sudo nano etc d
  • Python爬虫—request模块与验证码识别

    相关文章链接 xff1a Python爬虫 爬虫基础简介 Python爬虫 数据解析及案例 xff08 4K图片爬取 xff09 一 request模块 1 1 概念 python中原生的一种基于网络请求的模块 xff0c 功能非常强大 x
  • 学习 ROS 机器人没有前途?!

    点击蓝字 关注我们 本文转载自蓝桥云课合作作者 xff1a 机器马 xff0c 文末有小惊喜哦 01 ROS 是什么 机器人操作系统 xff08 ROS xff09 是一种用于编写机器人软件的灵活框架 它是工具 xff0c 库和协议的集合