一、ros2的相关概念
ROS 2(Robot Operating System 2)是一个用于机器人开发的开源平台,它提供了一系列工具和库,用于构建机器人应用程序。相较于前身ROS(ROS 1),ROS 2在设计上考虑了更多的实时性、安全性和可靠性因素,因此适用于更广泛的应用场景和硬件平台。
以下是ROS 2的一些关键特点和概念:
-
分布式架构:ROS 2支持分布式架构,允许节点在多个物理机器上运行,通过网络进行通信。这种架构支持更复杂和大规模的机器人系统。
-
实时性:ROS 2引入了实时通信机制,如数据流控制(DDS),以支持严格的实时需求。这使得ROS 2能够在需要高实时性的应用中发挥作用,如自动驾驶、工业自动化等领域。
-
跨平台支持:ROS 2被设计为跨多种操作系统平台(如Linux、Windows、macOS等)和不同体系结构(如x86、ARM等)运行。
-
多语言支持:ROS 2提供了对多种编程语言的支持,包括C++、Python等,使得开发者可以根据自己的偏好和需求选择合适的编程语言进行开发。
-
通信协议:ROS 2使用快速数据分发(Fast DDS)作为默认的通信中间件,支持可靠和不可靠的数据传输,以及QoS(Quality of Service)配置,以满足不同应用场景的需求。
-
工具和库:ROS 2提供了丰富的工具和库,用于开发、调试和测试机器人应用程序,包括仿真工具(如Gazebo)、视觉库(如OpenCV)和导航库(如Navigation2)等。
-
社区支持:ROS 2拥有一个活跃的全球社区,提供了大量的文档、教程和开源项目,帮助开发者快速上手和解决问题。
二、ros如何通信?
1.Node(节点)
在ROS的世界里,最小的进程单元就是节点(node)。一个软件包里可以有多个可执行文件,可执行文件在运行之后就成了一个进程(process),这个进程在ROS中就叫做节点。 从程序角度来说,node就是一个可执行文件(通常为C++编译生成的可执行文件、Python脚本)被执行,加载到了内存之中;从功能角度来说,通常一个node负责者机器人的某一个单独的功能。由于机器人的功能模块非常复杂,我们往往不会把所有功能都集中到一个node上,而会采用分布式的方式,把鸡蛋放到不同的篮子里。例如有一个node来控制底盘轮子的运动,有一个node驱动摄像头获取图像,有一个node驱动激光雷达,有一个node根据传感器信息进行路径规划……这样做可以降低程序发生崩溃的可能性,试想一下如果把所有功能都写到一个程序中,模块间的通信、异常处理将会很麻烦。
2.master
由于机器人的元器件很多,功能庞大,因此实际运行时往往会运行众多的node,负责感知世界、控制运动、决策和计算等功能。那么如何合理的进行调配、管理这些node?这就要利用ROS提供给我们的节点管理器master, master在整个网络通信架构里相当于管理中心,管理着各个node。node首先在master处进行注册,之后master会将该node纳入整个ROS程序中。node之间的通信也是先由master进行“牵线”,才能两两的进行点对点通信。当ROS程序启动时,第一步首先启动master,由节点管理器处理依次启动node。
3.launch文件
机器人是一个系统工程,通常一个机器人运行操作时要开启很多个node,对于一个复杂的机器人的启动操作应该怎么做呢?当然,我们并不需要每个节点依次进行rosrun,ROS为我们提供了一个命令能一次性启动master和多个node。该命令是: