# learnros **Repository Path**: sacomplex/learnros ## Basic Information - **Project Name**: learnros - **Description**: 学习ROS的笔记:ROS1, ROS2 - **Primary Language**: C++ - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-29 - **Last Updated**: 2026-06-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # learnros ## ROS2 与 ROS1 在以下方面差异巨大: | 方面 | ROS1 | ROS2 | | :--------- | :-------------------- | :------------------------- | | 构建系统 | catkin | ament (colcon) | | 客户端库 | roscpp / rospy | rclcpp / rclpy | | 节点初始化 | `ros::init()` | `rclcpp::init()` | | 消息生成 | .msg → 自动生成头文件 | 相同,但 CMake 不同 | | 通信中间件 | TCPROS/UDPROS | DDS(默认) | | Bag 工具 | rosbag | ros2 bag (SQLite3/MCAP) | | 测试框架 | rostest (gtest) | ament_cmake_gtest / pytest | | 可视化 | rqt / rviz | rqt2 / rviz2 | ### 核心概念与架构 ROS 1(Noetic/Melodic)与 ROS 2(Humble/Iron/Rolling)在核心架构上最主要的区别在于其通信中间件。ROS 1依赖一个中央节点 `roscore` 进行管理,而 ROS 2 采用了去中心化的 DDS 架构,从根本上解决了 ROS 1 的单点故障问题,并带来了实时性、安全性和跨平台支持等关键改进。理解这个基础架构差异至关重要。 ### 构建系统与工具链 从 ROS 1 迁移到 ROS 2,你需要适应全新的构建系统和工具链,这直接影响你搭建开发环境和编译代码的方式。 | 特性 | ROS 1 (Noetic/Melodic) | ROS 2 (Humble/Iron/Rolling) | 简要说明 | | :----------------- | :--------------------------------------------------------- | :----------------------------------------------------------- | :----------------------------------------------------------- | | **构建系统** | Catkin | Ament | Ament 是专为 ROS 2 设计的新构建系统,更现代化。 | | **构建工具** | `catkin_make`, `catkin_tools` | `colcon` | Colcon 是所有 ROS 2 包的统一构建入口,类似编译器的“总指挥”。 | | **主客户端库** | `roscpp` / `rospy` | `rclcpp` / `rclpy` | 这是你编写 C++ 代码时会直接调用的核心库,API 有变化,但逻辑思想相通。 | | **CMakeLists.txt** | 查找 `catkin` 包 | 查找 `ament_cmake`,使用 `ament_target_dependencies` 链接依赖 | 这是编写功能包时最直接的代码级变化之一。 | | **核心通信库** | `ros::init`, `ros::NodeHandle` | `rclcpp::init`, `rclc:Node::make_shared` | 创建节点和管理通信的 API 发生了变化。 | | **核心命令行工具** | `roscore`, `rostopic`, `rosnode`, `rosservice`, `rosparam` | `ros2 run`, `ros2 topic`, `ros2 node`, `ros2 service`, `ros2 param` | 所有命令都以 `ros2` 开头,更统一。 | | **可视化工具** | `rqt`, `rviz` | `rqt2`, `rviz2` | 新版工具增加了对 DDS 等新特性的支持。 | | **模拟工具** | Gazebo Classic(较常用) | Gazebo Ignition / Garden(新版) | 尽管仍在过渡,但新项目强烈建议使用新版 Gazebo。 | ### 通信中间件与架构 架构的进化带来了更强大的通信能力,这是 ROS 2 实现质的飞跃的核心。 - **ROS 1**: 基于 `roscore` 的 **TCPROS/UDPROS** 通信。`roscore` 作为中央节点进行管理,存在**单点故障**风险,且实时性支持有限。 - **ROS 2**: 采用 **DDS (Data Distribution Service)** 作为通信中间件。 - **去中心化**:无 `roscore`,节点通过 DDS 自动发现,提高了系统鲁棒性。 - **QoS 策略**:提供 `可靠`/`尽力而为` 等丰富的服务质量策略,可满足不同场景的通信可靠性需求。 - **安全性**:支持 DDS-Security 标准,提供加密、认证等安全机制。 - **实时性**:支持实时操作系统 (RTOS),适用于对延迟敏感的控制任务。 ### 数据录制与存储 (`rosbag`) 数据录制方式的变化直接影响你的数据采集与回放流程。 - **ROS 1**: 数据录制成单个 `.bag` 文件,格式是自研的二进制格式。 - **ROS 2**: 使用 `rosbag2` 工具,默认存储为 **SQLite 数据库文件**或高效的 **MCAP 格式**的文件夹结构。新格式扩展性、查询性能和跨平台兼容性更好。 - **⚠️ 关键注意**:ROS 1 和 ROS 2 的 bag 文件**格式不兼容,不能直接互相播放**。如果历史数据在 ROS 1,后续切换版本时数据迁移必须预先规划。 ### 版本选择建议 首先明确你需要使用的 ROS 2 版本: - **Humble Hawksbill (推荐)**:目标是 **Ubuntu 22.04**,这是一个**长期支持版(LTS)**,官方支持至 **2027 年 5 月**。它拥有最庞大的社区用户群和最丰富的教程,是新项目和开发者的最稳妥选择。 - **Iron Irwini (不推荐)**:目标是 **Ubuntu 22.04**,非 LTS 版本,支持已于 **2024 年 11 月**结束,不太适合新手。 - **Rolling (不推荐)**:是滚动发行版,包含最新功能,**API 变化频繁**且 bug 可能较多,非常**不适合新手学习或用于实际项目**。 对于绝大多数 ROS 新手,从 **ROS 2 Humble** 开始学习并用于你的项目,是当下最合适的选择。 # 工具 - https://ranchhandrobotics.com/rde-ros-2/ - https://ranchhandrobotics.com/rde-ros-1/