ROS学习笔记(三)——ROS的简单了解

本文介绍了ROS(机器人操作系统)的松耦合结构及其带来的优势,详细解释了ROS的六大核心组成部分:节点、节点管理器、话题通信、服务、参数及文件系统。通过这些介绍,读者能够更好地理解ROS的工作原理及其在机器人开发中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS学习笔记(三)——ROS的简单了解

一.关于ROS我们首先要了解到它是松耦合结构。

   这种结构方式也给它带来了许多优点:

(1)、分布式的结构

​     ROS中,一个节点代表一个进程,每个节点的功能可以单独完成,节点间可以按照不同的通信协议进行通信,而且节点的位置不固定,便于实现多机协同工作。

(2)、支持语言广泛

​     ROS不同节点的编程语言可以不同,比如一个节点用python,另一个节点可以用C++,支持C++、python、Java等。

(3)、支持多种组件化工具

​     例如rosbag(数据记录工具)、rviz(3D数据可视化工具)等

(4)、开源又免费

​     因为ROS遵循BSD的许可协议,所以可以随意修改和商业使用,所以满足我们需要的功能包数量也会不断增加。

二.详细讲讲ROS的组成成分

(1).节点(Node)

特点:

​     执行具体任务的进程、可独立完成相关功能。

​     不同节点可使用不同的编程语言,位置不固定可分布在不同主机上运行。

​    节点在系统中的名称必须是唯一的,否则会导致功能紊乱。

(2).节点管理器(ROS Master)

​     简单来说就是ROS所有节点的管理者,帮助不同节点间创建联系。

在这里插入图片描述

如图,举个小例子:

​     当Camera Node接收到数据后,会向ROSMaster发送相关的图像数据(注册),而Image Node会向ROSMaster发送请求图像数据的信息(注册),此时ROSMaster就会对两个节点的输入和需求进行匹配,如果合适,则帮助两个节点建立相应的通信。

(3).话题通信(异步通信)

​    是节点间用来传输数据的重要形式。

结构大致如下:

在这里插入图片描述

​    publisher对应上上图的Camer Node,不断的给ROSMaster 发布(publish)对应的数据,而Subscriber对应的是上上图中的ImageNode,不断向ROSMaster订阅(subscribe)对应的数据。

​    其中,不管是发送的数据(Message)是图像还是指令,都是有自己的数据定义的,比如图像就有RGB属性。如果某些数据无法满足我们需求,则我们可以自定义数据(std_msgs)。

​     节点关系:多对多

​    一般用于数据传输,具有缓冲区

(4)服务(Service同步通信机制)

结构如下:

         在这里插入图片描述

​     其中,结构使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回应答数据。使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。数据传输是请求一次,调用一次。

​    节点关系:一对多

​    一般用于逻辑处理,无缓冲区

(5).参数(parameter)

​     ROSMaster中有一个参数服务器,它可以用于保存一部分参数用作全局共享字典(数据类型可多样)。适合存储静态、非二进制的配置参数,不适合存储动态配置的数据。

(6).文件系统

​     功能包(Package):ROS软件中的基本单元,包含节点源码、配置文件、数据定义等

​     功能包清单(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等

​     元功能包(Meta Packages):组织多个用于同一目的功能包

ifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等

​     元功能包(Meta Packages):组织多个用于同一目的功能包

         在这里插入图片描述
Ros学习笔记系列(一):_风声向寂的博客-优快云博客

ROS学习笔记(二)——python、C++编译器以及ROS的安装_风声向寂的博客-优快云博客
ROS学习笔记(四)——ROS命令行工具使用讲解_风声向寂的博客-优快云博客
ROS学习笔记(五)——工作空间和功能包_风声向寂的博客-优快云博客
Ros学习笔记(六)——Publisher代码实现_风声向寂的博客-优快云博客
ROS学习笔记(七)——各部分代码实现(二)_风声向寂的博客-优快云博客
Ros学习笔记(八)——各部分代码实现(三)_风声向寂的博客-优快云博客

11.21学习笔记

### ROS 机器人操作系统:教程、安装与使用指南 ROS(Robot Operating System)是一个用于开发机器人应用程序的开源元操作系统。它提供了硬件抽象、底层设备控制、实现常见功能的库以及消息传递机制。以下将涵盖 ROS 的安装、配置、使用入门以及学习资源。 #### 安装 ROS 安装 ROS 的过程通常包括以下几个步骤: 1. **添加 ROS 软件源** 在 Ubuntu 系统中,首先需要将 ROS 的官方软件源添加到系统中,以便通过 apt-get 安装 ROS 相关包。 2. **安装 ROS 系统核心组件** 安装完成后,使用如下命令安装 ROS 的核心组件,例如 `ros-desktop-full` 包含了完整的桌面功能和仿真工具: ```bash sudo apt-get install ros-<distro>-desktop-full ``` 其中 `<distro>` 是 ROS 的发行版名称,例如 `noetic` 或 `melodic`。 3. **初始化 rosdep** ROS 使用 `rosdep` 工具来安装系统依赖项,安装完 ROS 后需要初始化并更新: ```bash sudo rosdep init rosdep update ``` 4. **配置环境变量** 为了在终端中方便使用 ROS 命令,需要将 ROS 的环境变量添加到 shell 配置文件中。例如,在 `.bashrc` 文件中添加以下内容: ```bash source /opt/ros/<distro>/setup.bash ``` 如果使用的是 zsh,则需要将上述命令添加到 `.zshrc` 文件中: ```bash source /opt/ros/<distro>/setup.zsh ``` 然后运行 `source ~/.bashrc` 或 `source ~/.zshrc` 使配置生效 [^2]。 #### 配置 ROS 工作空间 ROS 支持创建工作空间来组织和编译自己的功能包。创建一个 catkin 工作空间的基本步骤如下: 1. **创建工作空间目录结构** 在用户目录下创建一个名为 `catkin_ws` 的目录,并在其下创建 `src` 子目录: ```bash mkdir -p ~/catkin_ws/src cd ~/catkin_ws/ catkin_make ``` 2. **配置工作空间环境** 编译完成后,需要将工作空间的环境变量添加到 `.bashrc` 或 `.zshrc` 文件中: ```bash echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc ``` #### 使用 ROS ROS 的核心概念包括节点(Node)、话题(Topic)、服务(Service)和参数服务器(Parameter Server)。 - **节点** 是 ROS 中的最小执行单元,通常是一个 C++ 或 Python 程序。 - **话题** 是节点之间通信的通道,一个节点可以发布消息到某个话题,另一个节点可以订阅该话题接收消息。 - **服务** 提供了一种请求-响应式的通信方式。 - **参数服务器** 用于存储和检索全局参数。 以下是一个简单ROS C++ 节点示例,它发布一个字符串消息到名为 `chatter` 的话题: ```cpp #include "ros/ros.h" #include "std_msgs/String.h" int main(int argc, char **argv) { // 初始化 ROS 节点 ros::init(argc, argv, "talker"); ros::NodeHandle n; // 创建一个发布者对象,发布到 chatter 话题 ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000); ros::Rate loop_rate(10); // 10Hz while (ros::ok()) { std_msgs::String msg; msg.data = "Hello World"; chatter_pub.publish(msg); // 发布消息 ros::spinOnce(); // 处理回调函数 loop_rate.sleep(); // 控制循环频率 } return 0; } ``` #### ROS 中的回调机制 在 ROS 中,`ros::spin()` 会进入一个自循环,尽可能快地调用消息回调函数。如果没有消息到达,它不会占用太多 CPU 资源。当 `ros::ok()` 返回 false 时,`ros::spin()` 会跳出循环。这可能是因为调用了 `ros::shutdown()`,或者用户按下了 Ctrl-C,或者节点被人为关闭 [^4]。 #### 学习资源 - **官方文档**:ROS 官方网站提供了详细的安装指南、教程和 API 文档。 - **社区教程**:ROS 社区提供了丰富的教程,包括 ROS 的基本概念、节点通信、传感器数据处理等。 - **示例功能包**:ROS 提供了许多示例功能包,如 `ros_tutorials` 和 `roscpp_tutorials`,用户可以通过这些示例学习如何编写自己的 ROS 节点 [^5]。 #### 相关问题 1. 如何在 ROS 中创建一个简单的订阅者节点? 2. 如何使用 ROS 的参数服务器进行全局参数配置? 3. ROS 中的 `catkin_make` 和 `catkin build` 有什么区别? 4. 如何在 ROS 中实现两个节点之间的服务通信? 5. 如何调试 ROS 节点并查看话题发布的内容?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值