Simon Shi的小站

人工智能,机器学习, 强化学习,大模型,自动驾驶

0%

ROS 入门介绍

ROS (Robot Operating System) 是一套用于机器人软件开发的框架,它并不是一个真正的操作系统,而是一套中间件。ROS 的第一个版本 ROS 1(通常简称为 ROS)是在 2010 年左右发布的,而 ROS 2 则是在 ROS 1 的基础上进行了重大的改进和重构,于 2015 年开始发布早期版本,并逐步发展成熟。

下面列出了 ROS 1 和 ROS 2 之间的一些主要区别:

1. 分布式通信模型

  • ROS 1 使用了基于 TCP/IP 的节点间通信方式,其中主要的通信机制包括:
    • Topics (主题): 发布/订阅模式。
    • Services (服务): 请求/响应模式。
    • Parameters (参数): 全局参数服务器。
    • Actions (动作): 长期任务的请求/响应模式。
  • ROS 2 也采用了类似的通信机制,但是底层通信协议从 ROS 1 的 TCP/IP 改为了 DDS (Data Distribution Service),这是一种更为先进的实时数据传输协议。DDS 的使用使得 ROS 2 能够更好地支持实时性要求高的场景,并且能够更轻松地跨越不同的网络拓扑结构。

2. 多线程支持

  • ROS 1 主要依赖于单线程模型,尽管可以通过多进程或多节点的方式来实现并发处理,但在单个节点内部实现多线程支持比较困难。
  • ROS 2 改进了对多线程的支持,使得在同一节点内可以更方便地利用多核处理器的能力。

3. 安全性和可靠性

  • ROS 1 在安全方面存在一些限制,例如没有内置的安全认证机制。
  • ROS 2 强化了安全特性,提供了认证、加密等机制,增强了系统的安全性。

4. 实时支持

  • ROS 1 在实时性方面有所欠缺,尤其是在网络延迟和确定性方面。
  • ROS 2 通过采用 DDS 作为通信基础,并且在设计上考虑了实时性需求,因此更适合于实时系统。

5. 语言支持

  • ROS 1 主要支持 C++ 和 Python,但大部分核心功能都是用 C++ 编写的。
  • ROS 2 同样支持 C++ 和 Python,但在设计上更加灵活,理论上可以支持更多的编程语言。

6. 系统架构

  • ROS 1 有一个名为 master 的中心节点来协调各个节点之间的通信。
  • ROS 2 采用了无中心节点的设计,所有节点都可以直接互相通信。

7. 内存管理

  • ROS 1 在内存管理和生命周期管理方面有一些局限性。
  • ROS 2 改进了这些方面,提供了更好的内存管理策略,比如自动垃圾回收。

8. 社区和支持

  • ROS 1 有着庞大的用户基础和丰富的软件包库。
  • ROS 2 的社区正在不断成长,虽然初期可能软件包较少,但随着 ROS 2 的成熟,越来越多的开发者和组织转向 ROS 2,它的生态系统也在迅速扩大。

9. 生命周期

  • ROS 1 已经停止官方支持和开发,但仍有一些社区支持的版本。
  • ROS 2 是目前 ROS 社区发展的重点方向,有长期的支持计划和稳定的版本更新。

10. 跨平台能力

  • ROS 1 支持多种操作系统,但主要针对 Linux。
  • ROS 2 在设计上更加注重跨平台兼容性,支持 Windows、macOS 和多种 Linux 发行版。

综上所述,ROS 2 是对 ROS 1 的全面升级,旨在解决 ROS 1 存在的问题,并增强其在现代机器人开发中的适用性和灵活性。如果您正计划新的机器人项目或者需要更高级的功能,建议选择 ROS 2。而对于已经使用 ROS 1 的项目,如果不需要上述提到的新特性,则可以继续使用 ROS 1,同时考虑未来的迁移计划。

ROS 区别

ROS Noetic中确实没有使用ament作为构建系统,而是使用了catkin工具。因此,您遇到的问题可能与ROS 2相关,而ROS Noetic则使用了不同的方法来处理订阅和回调函数。

  • 对于ROS Noetic:使用ros::NodeHandleros::Subscriberboost::function
  • 对于ROS 2:使用rclcpp::Noderclcpp::Subscriptionstd::bind