ROS系列文章目录
文章目录
前言
一、turtlesim功能包与创建功能包
还记得安装ROS环境时,最后用键盘控制的小乌龟turtlesim来验证是否安装成功。这是我在学习时接触到第一个ROS功能包——turtlesim。该功能包的核心是turtlesim_node节点,它提供一个可视化的乌龟仿真器,可以实现很多ROS基础功能的测试。
每一个ROS功能包都是一个独立的功能,其中可能包含一个或者多个节点,这些功能对外使用话题、服务、参数等作为接口。其他开发者在使用这个功能包时,可以不用关注内部的代码实现,只需要知道这些接口的类型和作用,就可以集成到自己的系统中。也就是说你不必知道它是如何实现的,只需要关注如何用好它。
下图中创建功能包
catkin_create_pkg # 创建功能包
cd ~/catkin_ws/src # 打开名为catkin_ws下src
cd ~/catkin_ws # 打开名为catkin_ws的工作空间
catkin_make # 编译catkin工作空间
source ~/catkin_ws/devel/setup.bash # 设置环境变量
二、创建工作空间和覆盖工作空间
1.工作空间(workspace)是一个存放工程开发相关文件的文件夹。
空间名 | 作用 |
---|---|
src(代码空间) | 用来存储所有ROS功能包的源码文件 |
build(编译空间) | 用来存储工作空间编译过程中产生的缓存信息和中间文件 |
devel(开发空间) | 用来放置编译生成的可执行文件 |
install(安装空间) | 将可执行文件安装到该空间中,运行该空间中的环境变量脚本 |
下图中就创建了catkin_ws下的代码空间src
mkdir -p ~/catkin_ws/src # 创建名为catkin_ws下的src代码空间
cd ~/catkin_ws/src # 打开工作空间catkin_ws下的src代码空间
catkin_init_workspace # 初始化工作空间
cd ~/catkin_ws/ # 打开工作空间catkin_ws
catkin_make # 对工作空间进行编译
source devel/setup.bash # 设置环境变量
echo $ ROS_PACKAGE_PATH # 查询工作空间的环境变量
2.但是当出现不同的工作空间中可能存在相同命名的功能包,如果这些工作空间的环境变量都已经设置,那么在使用该功能包的时候,是否会发生冲突?如果不会,ROS又会帮我们选择哪一个功能包呢?
在ROS机器人开发实践这本书中是这样解释的:
ROS的工作空间有一个机制——Overlaying,即工作空间的覆盖。所有工作空间的路径会依次在ROS_PACKAGE_PATH环境变量中记录,当设置多个工作空间的环境变量后,新设置的路径在ROS_PACKAGE_PATH中会自动放置在最前端。在运行时,ROS会优先查找最前端的工作空间中是否存在指定的功能包,如果不存在,就顺序向后查找其他工作空间,直到最后一个工作空间为止。
三、开发环境的选择
Eclipse是一款全能的集成开发环境,适合各种编程语言的项目开发,而且通过丰富的插件可以无限扩展IDE的功能。但是Eclipse本身基于Java开发,虽然不需要通过安装程序安装,但是需要Java运行环境的支持,所以首先需要确保计算机的Ubuntu系统中安装了Java环境。
对于我个人来说,我并不熟悉Java。所以我会选择对ROS更加友好的Roboware,RoboWare是一款直观、简单,并且易于操作的ROS集成开发环境,可进行ROS工作空间及包的管理、代码编辑、构建及调试。
如果有使用过Visual Studio Code的经验,也非常建议使用。
四、话题通信中的Publisher与Subscriber
Publisher的主要作用是:针对指定话题发布特定数据类型的消息。
主要流程:
1.初始化ROS节点。
2.向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型。
3.按照一定频率循环发布消息。
Subscriber的主要作用是:订阅指定话题发布者已发布的消息。
主要流程:
1.初始化ROS节点。
2.订阅需要的话题。
3.循环等待话题消息,接收到消息后进入回调函数。
4.在回调函数中完成消息处理。
ROS中的编译器使用的是CMake,编译规则通过功能包中的CMakeLists.txt文件设置,使用catkin命令创建的功能包中会自动生成该文件
五、服务通信中的Server和Client
服务(Service)是节点之间同步通信的一种方式,允许客户端(Client)节点发布请求(Request),由服务端(Server)节点处理后反馈应(Response)。
服务中的Server类似于话题中的Subscriber
请求流程:
1.初始化ROS节点。
2.创建Server实例。
3.循环等待服务请求,进入回调函数。
4.在回调函数中完成服务功能的处理并反馈应答数据。
六、ROS中的命名空间
ROS中的节点、参数、话题和服务统称为计算图源,其命名方式采用灵活的分层结构,便于在复杂的系统中集成和复用。
名称类型 | 用法举例 |
---|---|
基础(base)名称 | 例如:base |
全局(global)名称 | 例如:/global/name |
相对(relative)名称 | 例如:relative/name |
私有(private)名称 | 例如:~private/name |
七、分布式多机通信
ROS是一种分布式软件框架,节点之间通过松耦合的方式进行组合,在很多应用场景下,节点可以运行在不同的计算平台上,通过Topic、Service进行通信。
如果双向网络都畅通,就说明底层网络的通信已经没问题,接下来设置ROS相关的环境变量即可。
总结
以上就是本文的内容,本文介绍了ROS的turtlesim功能包,工作空间,开发环境,命名空间,及分布式通信等内容,本文写的比较粗糙,之后会补上缺失的部分重要内容。参考资料:
(1)《ROS机器人开发实践》 胡春旭著
(2) ROS官网 http://wiki.ros.org/melodic/Installation/Ubuntu
(3) 百度百科 https://baike.baidu.com/
如需转载请注明:转自CSDN甦傑
欢迎持续关注 我的ROS专栏