点击蓝字 关注我们
本文转载自蓝桥云课合作作者:机器马,文末有小惊喜哦~
01
ROS 是什么
机器人操作系统(ROS)是一种用于编写机器人软件的灵活框架。它是工具,库和协议的集合,旨在简化各种机器人平台上,去构建复杂而强大的机器人。
ROS 是 Robot Operating System 的简写,翻译过来就是机器人操作系统。它是一个软件框架,目的是提供开发平台,工具及生态给开发人员,让开发人员快速的去开发强大的机器人系统。
(图片源于网络,侵删)
02
框架介绍
系统基本架构,总的来说,整个 ROS 的项目在部署运行过程中,分为几个部分:环境、 执行器、 传感器、 软件结构。
环境
包含了软件环境和硬件环境。通常一个ROS的机器人,需要一个开发主板用于运算和控制操作。
例如,我们用树莓派作为开发板,用来作为这个机器人的运算和控制操作,那么这个就是软件所运行的硬件环境。
开发板上通常需要有操作系统,所装的操作系统属于系统环境。当然开发板上可能会外接一些其他硬件,如摄像头。那么这些硬件也属于硬件环境。
执行器
执行器主要作用是给操作系统发送一些指令,通过指令去控制硬件操作。例如发送指令给开发板,让开发板外接的陀机转动,驱动物体运动。
执行器更像是硬件驱动的输入。
传感器
在硬件环境中,可能会安装一些环境探测的硬件,例如温度感应器。这些硬件感应器会将感觉的数据发布出来,传感器其实扮演的就是这些硬件发布数据的传播者,更像是硬件驱动的输出。
软件结构
这里所说的软件结构是指,ROS 机器人运行时部署的软件及软件间的关系。
机器人运行起来后,内部会有很多单元程序运行,每个单元程序做很小的事情。有的小程序负责读取硬件驱动传递的数据,有的负责处理读取的数据,有的负责判断数据,有的负责发出指令…
总之,ROS 将复杂的程序分解成了很小的一部分,每部分干很少的活,每个部分还可以复用。
03
ROS 软件结构组成
ROS 分为 ROS Master 和 ROS Node。
ROS Master
ROS Node
具备单一功能的可执行程序;
可以单独编译,可执行、可管理;
存放在 package 中。
04
ROS 哲学
Peer to peer
点对点的设计
Node节点单元
采用了分布式网络结构
节点间通过 RPC + TCP/UDP 进行通讯
Distributed
Multi-lingual
Light-weight
Free and open-source
免费并且开源
BSD 许可,可修改,可复用,可商用
开源使软件进步
05
文件系统
工作目录结构为:
Workspace,Package,Node 是工程结构中的几个关键词,也是核心概念。
以上视图我们初步的认知他们的包含关系。
1.标准的 Workspace 工作目录结构如下:
2.完整的机构示意图如下:
3.工作目录理解
生活中,企业通过部门管理员工。
人多瞎胡乱,鸡多不下蛋。一旦项目变大,组织结构和规范就变的非常重要。
ros 的这种结构划分,和公司结构划分是一个道理。功能复杂的时候进行管理划分,规范开发,让开发效率提升,解决一些耦合。
06
工作目录说明
工作空间 workspace
我们在开发一个 ROS 项目的时候,是以工作空间来代表一个项目的。
工作单元 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 启动后,首先点击 open。然后找到工作空间,在工作空间的 src 中找到要打开的 package。
特别要注意的是,目前 ROS Melodic 版本还不支持 python3,要等到 ROS N 版才会支持。
因此,我们选择环境的时候选择 python2.x 版本。默认编写的 py 文件是不具备执行权限的,我们需要手动讲文件权限修改为可执行。
调试运行代码
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的名称,第二个参数是节点名称)
07
蓝桥云课专属福利
作者机器马联合蓝桥云课上线了《ROS 机器人操作系统进阶实战》,通过精心设计的案例,分析技术要点、理解运行原理,以达到举一反三的效果,从而应用到自己的机器人开发工作中去。
现扫码加入课程,可领取 3 日标准会员,即八折优惠。
戳戳“阅读原文”直达课程页面!