ROS 系列学习教程(总目录)
ROS2 系列学习教程(总目录)
一、从ROS1到ROS2
ROS最初的目的是让机器人研发者专注于自己擅长的领域,其他模块则直接复用相关领域更专业研发团队的实现,实现不同研发团队间的共享和协作,提升机器人的研发效率。
但最初的ROS是面向科研领域的,有一些局限性,如今机器人商业需求日趋突显,最初的ROS也因丰富功能的集成使得原始建构和设计的不足愈发明显,所以ROS的研发团队重新设计了更加优秀的ROS2。
ROS2不是ROS1的简单升级,而是借鉴了ROS1成功案例基础上的一个全新的机器人操作系统。
二、ROS2 版本发布
ROS 每年的 5月23日 都会发布一个版本,奇数年份是短期支持版,生命周期到第二年的11月,偶数年份是长期支持版,生命周期到五年的5月。而且他的名字是按照字母表顺序排列的。
下面是目前的ROS发行版列表(截止到2024年):
Distro | Release date | Logo | EOL date |
---|---|---|---|
Jazzy Jalisco | May 23rd, 2024 | May 2029 | |
Iron Irwini | May 23rd, 2023 | November 2024 | |
Humble Hawksbill | May 23rd, 2022 | May 2027 | |
Galactic Geochelone | May 23rd, 2021 | December 9th, 2022 | |
Foxy Fitzroy | June 5th, 2020 | June 20th, 2023 | |
Eloquent Elusor | November 22nd, 2019 | November 2020 | |
Dashing Diademata | May 31st, 2019 | May 2021 | |
Crystal Clemmys | December 14th, 2018 | December 2019 | |
Bouncy Bolson | July 2nd, 2018 | July 2019 | |
Ardent Apalone | December 8th, 2017 | December 2018 | |
beta3 | September 13th, 2017 | December 2017 | |
beta2 | July 5th, 2017 | September 2017 | |
beta1 | December 19th, 2016 | Jul 2017 | |
alpha1 - alpha8 | August 31th, 2015 | December 2016 |
三、ROS2 相关项目
ROS1拥有丰富的生态系统,随着ROS2的成熟,一些原有ROS1的生态也随之更新了ROS2版本。
3.1 核心库源码
- ros2/ros2: 这个仓库包含了ROS2的核心元数据和一些基本的安装脚本。
- ros2/ros2cli: 提供了一套强大的命令行工具。这些工具使得开发者能够通过命令行界面与ROS 2系统进行交互,从而简化开发和调试过程。
- ros2/rclcpp: rclcpp是ROS2的C++客户端库,提供了ROS2的核心功能。
- ros2/rclpy: rclpy是ROS2的Python客户端库,提供了ROS2的核心功能。
- ros2/ros2_tracing: 用于跟踪和分析ROS 2系统中的消息传递和节点交互。它可以帮助开发者更好地了解系统的性能和行为。
- ros2/rmw: rmw是ROS Middleware Interface的缩写,它是ROS2的中间件抽象层,允许ROS2与不同的中间件(如DDS实现)进行交互。
- ros2/system_tests: 包含ROS2的各种系统测试。
3.2 重要工具和组件
-
ros2/rviz: 三维可视化工具,用于显示和调试机器人系统的各种数据。
-
ros2/rosbag2: 用于记录和回放ROS2的消息数据。
-
ros2/geometry2: 包含ROS2中的几何库,如 tf2 和 kdl_parser。
-
ros2/navigation2: ROS2中的导航堆栈,用于移动机器人的路径规划和避障。
-
ros2/moveit: MoveIt2是ROS2中的运动规划框架,用于控制机械臂和其他运动部件。它提供了多种规划算法和工具,支持碰撞检测、轨迹生成等功能。
-
ros2/ros1_bridge: 用于在ROS1和ROS2之间进行消息传递。它支持双向通信,方便了从ROS1到ROS2的迁移。
-
ros2_control: 用于实现ROS2的机器人实时控制。它支持多种硬件接口和控制算法,适用于各种类型的机器人控制系统。
-
ros2/gazebo_ros_pkgs: Gazebo与ROS2的集成包,用于仿真。
-
ros2/realtime_support: 包含ROS2的实时支持库和工具。
-
ros2/demos: 包含ROS2的各种示例和演示。
-
ros2/ros2_documentation: ros2文档。
3.3 其他ROS2相关项目
- Gazebo
- 项目简介:Gazebo是一个3D物理模拟器,常用于机器人仿真。它支持ROS2,可以与ROS2节点无缝集成,提供逼真的物理环境和传感器模拟。
- 官方网站:Gazebo
- ROS2 OpenVINO
- 项目简介:ROS2 OpenVINO是Intel提供的计算机视觉和神经网络优化工具包的ROS2版本。它支持多平台开发,适用于需要高性能图像处理和深度学习的应用。
- 官方网站:Intel ROS2 Projects
- ROS2 RealSense Camera
- 项目简介:ROS2 RealSense Camera是Intel提供的ROS2驱动程序,用于支持Intel RealSense摄像头。它提供了丰富的传感器数据和图像处理功能。
- 官方网站:Intel ROS2 RealSense
- ros2ai
- 项目简介:ros2ai是一个开源项目,旨在简化ROS2与AI的交互。它提供了一个命令行接口,支持通过语音或文本与机器人进行智能对话,利用OpenAI的自然语言处理能力。
- 项目地址:ros2ai
- ROS2-WebRTC
- 项目简介:ROS2-WebRTC是一个项目,用于在ROS2中实现WebRTC通信。它支持实时音视频传输,适用于远程操作和监控场景。
- 项目地址:ROS2-WebRTC
四、ROS2 优越性
与ROS1相比,ROS2在多个方面展现了显著的优越性。这些改进不仅提升了开发者的使用体验,也使ROS2更加适应现代机器人技术的需求。
1. 分布式架构
去中心化:ROS2放弃了ROS1中的中心化master节点,采用了去中心化的节点发现机制。这意味着即使某个节点失效,也不会影响其他节点之间的通信,从而提高了系统的健壮性和可靠性。
ROS1与 ROS2 架构对比:
2. 实时性和高性能
DDS通信协议:ROS2使用DDS (Data Distribution Service) 作为底层通信协议,DDS是一种专为实时系统设计的数据分发/订阅标准,支持零拷贝数据传输,大大减少了CPU和内存的开销,提高了通信效率和实时性。
实时控制:ROS2更适合需要高实时性和确定性响应的应用场景,如工业自动化和无人驾驶。
3. 跨平台支持
多操作系统支持:ROS2不仅支持Linux和MacOS,还增加了对Windows和RTOS(实时操作系统)的支持,使得ROS2能够在更广泛的平台上运行,提高了开发的灵活性和适用范围。
4. 安全性
增强的安全性:ROS2在设计时就考虑到了安全性,提供了数据加密、访问控制和权限管理等功能,使得ROS2更适合用于需要高安全标准的工业和商业应用。
5. 模块化和可扩展性
灵活的模块化设计:ROS2的架构更加模块化,允许开发者更容易地组合和重用代码。此外,ROS2支持在同一可执行文件中创建多个节点,提供了更高的灵活性和模块化设计。
6. 生命周期管理
节点生命周期管理:ROS2引入了节点生命周期的概念,允许开发者更好地控制节点的启动和关闭顺序,这对于复杂的机器人系统尤为重要。
7. 启动和配置
Python启动文件:ROS2使用Python编写的launch文件,相比ROS1中的XML格式,提供了更多的功能性和灵活性,使得启动和配置更加直观和便捷。
8. 编译系统
Ament编译系统:ROS2采用了新的编译系统Ament,相比ROS1中的catkin,Ament更高效,支持跨平台编译,并能更好地集成现代构建工具链。
9. 参数管理和调试
高级参数管理:ROS2提供了更高级的参数声明和动态重载功能,支持节点级别的参数声明和默认值设定,简化了参数管理。
丰富的调试工具:ROS2提供了更多的调试工具和日志记录功能,帮助开发者更快地定位和解决问题。
10. 社区和支持
不断增长的社区:尽管ROS1的社区更大,但ROS2的社区正在迅速增长。随着越来越多的项目迁移到ROS2,相关的工具、库和文档也在不断增加,提供了更多的资源和支持。
11. 未来兼容性
支持新兴技术:ROS2的设计更加现代化,支持新兴的技术和标准,如现代C++语言特性、Web服务等,确保了ROS2在未来的发展中保持领先地位。
12. 更好的开发体验
现代编程语言支持:ROS2鼓励使用现代的编程语言特性,如C++11及以上版本,以及Python 3.5及以上版本,提供了更好的开发体验和更高的代码质量。
命令行工具改进:ROS2的命令行工具更加直观和一致,每个命令都有明确的意义,使得学习和使用更加容易。