ROS实操入门系列(一)架构以及环境
ROS 是什么
本文开发环境
架构介绍
ROS 软件结构组成
ROS 哲学
文件系统
工作目录说明
Workspace创建
Package创建
使用Clion开发package
调试运行代码
请期待我的下一篇文章-------ROS入门系列(二)小乌龟操控原理及代码控制小乌龟走圆形路线(Topic干货警告!!!)
https://www.lanqiao.cn/courses/2947,提供准备好的云主机ros环境,进行实操,课程包括了 Topic 通讯, Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。
ROS 是什么
The Robot Operating System (ROS) is a flexible framework for writing robot software. It is a collection of tools, libraries, and conventions that aim to simplify the task of creating complex and robust robot behavior across a wide variety of robotic platforms.

机器人操作系统(ROS)是一种用于编写机器人软件的灵活框架。 它是工具,库和协议的集合,旨在简化各种机器人平台上,去构建复杂而强大的机器人。
ROS 是 Robot Operating System的简写,翻译过来就是机器人操作系统。它是一个软件框架,目的是提供开发平台,工具及生态给开发人员,让开发人员快速的去开发强大的机器人系统。

本文开发环境
ROS: Melodic版本
Ubuntu: 18.04版本
开发工具: clion

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

(环境)
包含了软件环境和硬件环境。通常一个ROS的机器人,需要一个开发主板用于运算和控制操作。例如,我们用树莓派作为开发板,用来作为这个机器人的运算和控制操作,那么这个就是软件所运行的硬件环境。开发板上通常需要有操作系统,所装的操作系统属于系统环境。当然开发板上可能会外接一些其他硬件,如摄像头。那么这些硬件也属于硬件环境。
(执行器)
执行器主要作用是给操作系统发送一些指令,通过指令取控制硬件操作。例如发送指令给开发板,让开发板外接的陀机转动,驱动物体运动。执行器更像是硬件驱动的输入。
(传感器)
在硬件环境中,可能会安装一些环境探测的硬件,例如温度感应器。这些硬件感应器会将感觉的数据发布出来,传感器其实扮演的就是这些硬件发布数据的传播者,更像是硬件驱动的输出。
(软件结构)
这里所说的软件结构是指,ROS机器人运行时部署的软件及软件间的关系。
机器人运行起来后,内部会有很多单元程序运行,每个单元程序做很小的事情。有的小程序负责读取硬件驱动传递的数据,有的负责处理读取的数据,有的负责判断数据,有的负责发出指令…

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

ROS 软件结构组成
ROS Master和ROS Node

(ROS Master)

管理Node节点间进行通讯的
每个Node节点都需要到Ros Master中进行通讯
通roscore命令可以启动ROS Master,启动节点前,必须启动ROS Master。(启动ROS Master命令 : roscore)
(ROS Node)

具备单一功能的可执行程序
可以单独编译,可执行,可管理
存放在package中
ROS 哲学
Peer to peer
点对点的设计。
Node节点单元
采用了分布式网络结构
节点间通过RPC + TCP/UDP进行通讯
Distributed
分散协同式布局。可以将ROS同时部署到多台机器上,让多台机器进行通讯。
Multi-lingual
多编程语言的支持。
可以采用python,c++,lisp等语言进行开发。
遵循协议进行编码,和编程语言无关
Light-weight
组件工具包丰富。ros提供了丰富的开发工具包
Free and open-source
免费并且开源。
BSD许可。可修改,可复用,可商用。
开源使软件进步
文件系统
工作目录结构

Workspace,Package,Node是工程结构中的几个关键词,也是核心概念。以上视图我们初步的认知他们的包含关系。

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

完整的机构示意图如下:

工作目录理解

生活中,企业通过部门管理员工。
人多瞎胡乱,鸡多不下蛋,一旦项目变大,组织结构和规范就变的非常重要。ros的这种结构划分,和公司结构划分是一个道理。功能复杂的时候进行管理划分,规范开发,让开发效率提升,解决一些耦合。
工作目录说明
工作空间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文件是不具备执行权限的。我们需要手动讲文件权限修改为可执行。

 

调试运行代码

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的名称,第二个参数是节点名称)

请期待我的下一篇文章-------ROS入门系列(二)小乌龟操控原理及代码控制小乌龟走圆形路线(Topic干货警告!!!)
https://www.lanqiao.cn/courses/2947,提供准备好的云主机ros环境,进行实操,课程包括了 Topic 通讯, Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。