一、ROS简介
概要:
ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序,ROS在某方面类似于“机器人框架”。
ROS设计者将ROS表述为ROS=Plumbing + Tools + Capabilities + Ecosystem,即ROS是通信机制,工具依赖包,机器人高层技能以及机器人生态系统的集合体。
ROS的设计目标:
代码复用
分布式:ROS是进程(也称节点)的分布式框架。ROS中的进程可分布于不同主机,不同主机协同工作,从而分散计算压力。
松耦合:ROS中的功能模块封装为独立的功能包或元功能包,便于分享。功能包内的模块以节点为单位运行,以ROS标准的I/O函数作为接口,开发者无需关注模块的内部实现,只要了解接口规则就能够实现复用,这样就实现了模块间点对点的松耦合连接。
语言独立性:ROS目前支持Java、C++、Python等。
精简、易于测试、大型应用、丰富的组件化工具包、免费且开源。
ROS架构:
立足于不同的角度,对ROS架构的描述也是不同的,一般可从设计者、维护者、系统与ROS自身四个方面描述。
1.从设计者的角度描述:
ROS设计者讲ROS表述为ROS=Plumbing + Tools + Capabilities + Ecosystem。
Plumbing:通信机制,实现不同节点之间的交互。
Tools:代表工具软件包,ROS中的开发和调试工具。
Capabilities:代表机器人高层技能,ROS中某些功能的集合,例如导航。
Ecosystem:代表机器人生态系统(跨地域、跨硬件与软件的ROS联盟)。
2.从维护者的角度描述ROS架构:
main:核心部分,主要由Willow Garage和一些开发者设计、提供及维护。它包括一些分布式计算的基本工具以及整个ROS的核心程序。
universe:全球范围内的代码,由不同国家的ROS社区组织开发和维护。其中一种式库的代码,如OpenCV、PCL等;库的上一层是从功能角度提供的代码,如人脸识别,它们调用其下层的库;最上层的代码是应用级代码,让机器人完成某一确定的功能。
3.从系统的角度描述ROS架构:
(1)OS层,即经典意义的操作系统。
ROS只是元操作系统,需要依托真正意义的操作系统。目前与ROS兼容性最好的是Linux的Ubuntu,macOS和Windows也支持ROS的较新版本。
(2)中间层,是ROS封装的关于机器人开发的中间件,例如:
基于TCP/UDP 继续封装的TCPROS/UDPROS通信系统。
用于进程间通信的Nodelet,它为数据的实时传输提供支持。
机器人开发实现库,例如数据类型定义、坐标变换、运动控制等。
(3)应用层,主要是功能包以及功能包内的节点,例如master、turtlesim的控制与运动节点等。
4.从ROS自身的角度描述ROS架构:
(1)文件系统。ROS文件系统指的是在硬盘上组织ROS源代码的形式。
(2)计算图。ROS分布式系统中不同进程之间需要进行数据交互,计算图可以点对点的网络形式表现数据交互过程,计算图中的重要概念有节点(node)、消息(message)、主题(topic)和服务(service)。
(3)开源社区。ROS的社区级概念是ROS网络上进行代码发布的一种表现形式。
发行版(distribution)。ROS发行版是可以独立安装、带有版本号的一系列综合功能包。ROS发行版起到与Linux发行版类似的作用,这使得ROS软件安装更加容易,而且能够通过一个软件集合维持一致的版本。
软件库(repository)。ROS依赖于共享开源代码与软件库的网站或主机服务,在这里不同的机构能够发布和分享各自的机器人软件与程序。
ROS维基(ROS wiki)。用于记录有关ROS系统信息的主要论坛。任何人都可以注册账户、贡献自己的文件、提供更正或更新、编写教程等。网址是http://wiki.ros.org/。
错误提交系统(bug ticket system)。如果用户发现问题或者想提出一个新功能,可以利用ROS提供的这个资源做这些。
邮件列表(mailing list)。ROS用户邮件列表是关于ROS的主要交流渠道,能够像论坛一样交流ROS软件更新到ROS软件使用中的各种疑问或信息。网址是http://lists.ros.org/。
ROS 问答(ROS answer)。用户可以使用这个资源提问题。网址是http:// answers.ros.org/questions/。
博客(blog)。用户可以看到定期更新、照片和新闻。网址是http://www.ros.org/news/。不过博客系统现在已经由ROS社区取而代之,网址是http://discourse ros.org/
ROS文件系统
ROS文件系统指的是在硬盘上ROS源代码的组织形式,其结构大致如图所示。
第一层是workspace,它是自定义的工作空间。
第二层如下:
src:源码。
build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态和静态链接库、可执行文件等。
第三层是package,即功能包,它是ROS的基本单元,包含多个节点、库与配置文件。包名中的字母均为小写,且只能由字母、数字与下画线组成。
第四层如下:
CMakeLists.txt:配置编译规则,例如源文件、依赖项、目标文件。
package.xml:包信息,例如包名、版本、作者、依赖项等(在以前的版本manifest.xml)。 scripts:存储Python文件。 msg:消息通信格式文件。 srv:服务通信格式文件。 include:头文件。 src:存储C++源文件。 launch:可一次性运行多个节点。 action:动作格式文件。 config:配置信息。
ROS文件系统相关命令
1.与增加功能包有关的命令:
catkin_create_pkg 自定义包名 依赖包 创建新的ROS功能包
sudo apt install xxx 安装ROS功能包
2.删除功能包的命令:
sudo apt purge xxx
3.与查找有关的命令:
rospack list 列出所有功能包
rospack find 包名 查找某个功能包是否存在,如果存在则返回安装路径
roscd 包名 进入某个功能包
rosls 包名 列出某个包下的文件
apt search xxx 搜索某个功能包
4.修改功能包文件的命令:
rosed 包名 文件名
需要安装vim。
5.执行:
(1)roscore:roscore是ROS的系统先决条件节点和程序的集合,必须运行roscore才能使ROS节点进行通信。roscore将启动ROS Master、ROS参数服务器和rosout日志节点。命令格式如下:
roscore
也可指定端口号:
roscore -p xxxx
(2) rosrun:运行指定的ROS节点的命令如下:
rosrun 包名 可执行文件名
(3)roslaunch:执行某个包下的launch文件
roslaunch 包名 launch 文件名
二、ROS配置
一、Ubuntu20.04
安装略。
二、ROS系统安装
一、法一(需科技)
版本:Noetic
三、APT源(应用商店的使用)
(注意版本选择)
下载步骤实例:
寻找rqt_robot_steering软件包
1.打开终端,输入:sudo apt install ros-noetic-rqt-robot-steering
2.打开另一个终端,启动ROS,输入:roscore
出现上图则成功启动。
3.回到上一个终端,输入:rosrun rqt_robot_steering rqt_robot_steering
如图。
运行小乌龟:
1.打开新的终端,输入:rosrun turtlesim turtlesim_node
2.
完毕。
四、在Github上寻找安装ROS软件包
注:一、二进行一次即可。
与APT不同的是,Github上的软件包为源码,需要编译才能运行,所以需要先建立一个工作空间,来进行源代码的编译。
一、建立工作空间:
1.打开终端,输入:mkdir catkin_ws
2.输入:cd catkin_ws
3.输入:mkdir src
源代码工程需要放置在src子目录里面才能正常编译。
二、安装工具
1.继续使用上一个终端,输入:cd src
2.输入:sudo apt install git
三、下载源码包,进行编译
举例:
1.在网站搜索栏中输入:wpr_simulation
2.继续使用上一个终端程序,(注意需要在src子目录下)
输入:git clone (复制的链接)
下载完成。
3. 进入scripts文件(通常放置脚本文件和python程序):使用脚本安装编译需要的依赖库。
右键,点击在终端中打开,输入:./install_for_noetic.sh
4.打开新的终端,在catkin_ws目录下运行catkin_make进行编译。
5.打开软件
注:首先把catkin_ws工作空间里的环境参数加载到终端程序里,否则运行会提示找不到软件包。
进入终端:进入catkin_ws,输入source ~/catkin_ws/devel/setup.bash
输入:roslaunch wpr_simulation wpb_simple.launch(要编译的软件)
成功后出现三维界面(即下载软件)
四、设置工作空间环境参数的source指令,添加到终端程序初始化的脚本~/.bashrc文件中,这样每次打开终端就可以马上运行ROS程序。
1.在终端中输入gedit ~/.bashrc
2.进行图中操作。
五、以下步骤可以找到ROS软件包源码。
五、使用开发工具VS Code
一、下载
1.在官网下载Ubuntu版本软件包(.deb)
2.
3.输入:sudo dpkg -i code(tab键补全)
4.输入code启动
二、导入工作空间
注:应导入catkin_ws目录下的src文件夹
快捷键:ctrl+shift+B 编译文件
六、使用超级终端Terminator
快捷键:
七、文件夹展示
三、ROS节点配置
一、Node节点和Package包
最小的进程单元就是节点(node)。
一个软件包里可以有多个可执行文件,可执行文件在运行之后就成了一个进程(process),这个进程在ROS中就叫做节点。
包是ROS代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或其他构件。
二、实现简单的包和节点
以实现超声波传感器的节点为例:
1.工作空间设置
详见四、在Github上寻找安装ROS软件包
2.创建Package包
(1)打开终端,输入:
1.cd catkin_ws/src/
2.catkin_create_pkg ssr_pkg rospy roscpp std_msgs
创建在~/catkin_ws/src文件夹里
catkin_create_pkg <包名> <依赖项列表>
rospy:python;roscpp:c++;std_msgs:标准消息包。
结果如下图
打开VSCode
3.回访依赖项
前文提到的依赖项rospy 、roscpp 、std_msgs也为Package包。
在终端输入
1.roscd roscpp
2.ls
3.code package.xml
证明依赖项roscpp等为Package软件包。
其文件目录
此目录下存放的均为Package包,都可直接运行,而catkin工作空间中的软件包都是源码文件,需要编译成可执行文件才能运行。
4.创建Node节点
##
上图操作为解决误报语法错误问题方法,删除后重新打开VScode即可。
##
上图表明为保存,保存快捷键 ctrl+s,小圆点变成“x”后保存成功。编译之前必须保存!
5.源码编译
(1)打开CMakeLists.txt文件(描述编译条件的配置文件)添加编译规则,
保存,ctrl+shift+B编译。如下则成功。
注:若没有编译快捷键,可以打开新的终端,输入:
1.cd catkin_ws
2.catkin_make
同样能完成编译操作。
6.Node节点运行
(1)启动ROS核心,打开终端输入:
roscore
(2)运行节点 ,打开新的终端,输入:
rosrun ssr_pkg chao_node
rosrun <包名> <节点文件名>
如下图则成功
改成正式的ROS节点:如图
保存,编译,运行
四、参考资料
《ROS机器人理论与实践》——清华大学出版社,赵虚左等著。
ROS快速入门教程——机器人工匠阿杰。https://www.bilibili.com/video/BV1BP4y1o7pw/?spm_id_from=333.999.0.0
维基百科
百度百科