ROS实操入门系列(一)架构以及环境(图文并茂)

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)

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

(ROS Node)

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

ROS 哲学

  1. Peer to peer
    点对点的设计。
    Node节点单元
    采用了分布式网络结构
    节点间通过RPC + TCP/UDP进行通讯
  2. Distributed
    分散协同式布局。可以将ROS同时部署到多台机器上,让多台机器进行通讯。
  3. Multi-lingual
    多编程语言的支持。
    可以采用python,c++,lisp等语言进行开发。
    遵循协议进行编码,和编程语言无关
  4. Light-weight
    组件工具包丰富。ros提供了丰富的开发工具包
  5. Free and open-source
    免费并且开源。
    BSD许可。可修改,可复用,可商用。
    开源使软件进步

文件系统

工作目录结构在这里插入图片描述
Workspace,Package,Node是工程结构中的几个关键词,也是核心概念。以上视图我们初步的认知他们的包含关系。

  1. 标准的Workspace工作目录结构如下:在这里插入图片描述
  2. 完整的机构示意图如下:
    在这里插入图片描述
  3. 工作目录理解在这里插入图片描述
    生活中,企业通过部门管理员工。
    人多瞎胡乱,鸡多不下蛋,一旦项目变大,组织结构和规范就变的非常重要。ros的这种结构划分,和公司结构划分是一个道理。功能复杂的时候进行管理划分,规范开发,让开发效率提升,解决一些耦合。

工作目录说明

  1. 工作空间workspace,我们在开发一个ROS项目的时候,是以工作空间来代表一个项目的。
    workspace: 工作空间
    build:ros编译打包的结果产出目录。我们不需要对这个文件夹做任何编辑操作,属于自动生成。
    devel: 开发所需要的目录
    src:存放package的目录
    CMakeLists.txt: 整个工作空间编译的脚本。此文件我们通常不用去做修改操作。
  2. 工作单元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
  1. 使用clion打开package
    clion启动后,首先点击open,
    然后找到工作空间,在工作空间的src中找到要打开的package
  2. 新建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坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。

在这里插入图片描述

  • 7
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值