ROS机器人开发实践阅读笔记之ROS中需要掌握的基础操作

ROS系列文章目录

  1. ROS是什么及ROS的安装
  2. ROS的架构是如何设计的
  3. ROS中需要掌握的基础操作
  4. ROS中有哪些常用的组件
  5. 如何用ROS搭建一个机器人平台
  6. 如何用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会优先查找最前端的工作空间中是否存在指定的功能包,如果不存在,就顺序向后查找其他工作空间,直到最后一个工作空间为止。


三、开发环境的选择

两种选择EclipseRoboware

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进行通信。

ping
从机IP
主机IP
ping

如果双向网络都畅通,就说明底层网络的通信已经没问题,接下来设置ROS相关的环境变量即可。


总结

以上就是本文的内容,本文介绍了ROS的turtlesim功能包,工作空间,开发环境,命名空间,及分布式通信等内容,本文写的比较粗糙,之后会补上缺失的部分重要内容。

参考资料:
(1)《ROS机器人开发实践》 胡春旭著
(2) ROS官网 http://wiki.ros.org/melodic/Installation/Ubuntu
(3) 百度百科 https://baike.baidu.com/

如需转载请注明:转自CSDN甦傑

欢迎持续关注 我的ROS专栏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值