怕什么真理无穷,进一寸有一寸的欢喜。——读《胡适谈读书》
规控前奏——ROS相关
1.ROS概述
ROS是一个强大的工具,我们应该熟练使用它,而不被它所束缚。ROS的通信机制类似于MQTT,采用分布式的话题通讯和服务通讯模式。话题用于发送和接收数据,服务则是请求-响应式的。参数服务器提供全局变量功能。
ROS不仅提供通信机制,还包括开发工具、应用功能包和庞大的生态系统。开发工具如rqt_graph可视化节点关系,rostopic/rosservice查看话题/服务,rosmsg/rossrv管理消息/服务类型。应用功能包可直接移植使用,节省开发时间。
分析新功能包的步骤:首先浏览目录结构,查看package.xml和CMakeLists.txt了解功能和依赖;然后检查话题/服务的数据格式,研究launch文件中的节点关系;最后启动功能包,通过rqt_graph验证分析结果。
熟练使用ROS工具、移植应用功能包、组合搭配不同功能,才是掌握ROS的关键所在。
2.ROS通信机制(划重点!)
感觉ROS Master节点管理器的模式可以类比到mqtt,它们两个都是分布式的通讯;
微信的及时通讯等也使用了基于MQTT的消息推送机制,使用发布/订阅模式进行消息传输,降低了系统耦合度。使用TCP/IP协议通信,提供不同服务质量(QoS)的消息发布订阅。消息分为主题和内容两个逻辑部分。
感觉话题通讯就是发送数据和接收数据,只是丢出去和接收的关系;感觉服务通讯就是我给你数据,你给我反馈,没有反馈就是失败和错误;参数编程模式:参数服务器(Parameter Server),允许在节点之间共享参数变量,实现全局配置的功能。其实就是一个全局变量……
ROS是一种高级的机器人编程环境,其主要组成部分包括通信机制、开发工具、应用功能以及一个完整的生态系统。
通讯机制:这是ROS的核心部分,它允许不同的软件组件(称为节点)在一个共享的网络环境中进行交流和协作。这些节点由节点管理器管理。
节点:节点是ROS中进行任务处理的基本单位,每个节点都会执行一个特定的任务。不同的节点可以通过消息的方式相互通信。
节点管理器:节点管理器(roscore)负责连接和管理所有的节点。它会记录节点的信息,并确保它们能够相互找到并进行通信。
话题(Topics)和服务(Services):这是ROS的两种主要通讯方式。话题是一种发布/订阅的通讯方式,一个节点可以发布消息到某个话题上,其他节点可以订阅这个话题来接收消息。而服务则是一种同步的请求/响应的通讯方式,一个节点可以向另一个节点请求服务,等待对方的响应。
开发工具:ROS 提供了一套完整的开发工具,帮助开发者更有效地开发和调试软件。
应用功能:ROS 定义了一系列的应用级功能,比如导航、感知和操控等,帮助开发者构建复杂的机器人应用。
生态系统:除了上述的软件组件,ROS 还有一个健康的社区和丰富的软件资源,帮助开发者快速开发和部署复杂的机器人系统。
3.ROS开发工具
ROS提供了rqt_graph这个工具,它能够生成节点关系图,直观地展现出当前运行的各个节点之间的连接情况,充分反映了整个系统的通信拓扑结构。使用rqt_graph,就能一目了然地观察到系统是如何被整合并运行起来的。
4.运行ROS系统实例
为了直观地理解ROS系统的运行机制,启动键盘控制示例,并运行rqt_graph可视化工具。节点关系图清晰地展现了系统各个节点之间的数据流动过程,我一目了然地看到了系统是如何被整合并协同工作的。至少通过节点关系图,大致把握了整个系统的运行逻辑和节点交互的方式。
然后进一步了解这些节点之间传递的具体数据内容。节点之间的通信主要依赖于话题(Topic)和服务(Service)两种通信模式。要查看话题的数据格式和内容,可以使用ROS提供的rostopic工具。
而既然有rostopic工具用于管理话题通信,自然也应该存在类似的rosservice工具,用于检查和调用服务通信的请求响应数据。通过这些工具,就能够逐步深入理解ROS系统的本质运行原理。
ROS(Robot Operating System)的入门学习,其中包括ROS的通讯机制和工具的使用。ROS的通讯机制通过msg和srv的格式来定义,这些格式由rosmsg或rossrv工具来决定。
这些工具只是ROS系统中的一部分,要想熟练掌握ROS,你需要了解和掌握更多的工具,例如rviz、gazebo、Moveit等。ROS的工具体系十分强大和全面。
这里的”ROS的应用功能”指的是功能包,这些功能包可以被移植到你自己的系统中使用。当你需要让两个或以上的功能包一起工作时,你就需要进行一些调配。
换言之,ROS提供了许多已经建好的”轮子”供我们使用,
5.应用功能包使用 (划重点!)
在拿到一个新的、陌生的功能包的时候,我的习惯,先是tree一下,看一下这个功能包里面都有哪些组成;然后是看package.xml,这个文件可以让我大致知道这个功能包能做什么,依赖了什么;接着是CMakeList.txt,这里我可以看到依赖包、消息、服务、动作、配置,甚至是需要编译的文件、测试节点、文档等等内容。在看完package.xml和CMakeList.txt以后,对这个功能包有了一个大概的猜想。
然后是查看话题、服务等等内容,看看数据格式是什么,内容是什么;再然后就是看launch文件,看launch文件的每个node和param,了解在这个功能包里面的节点关系是什么样的。
最后就是启动这个功能包,rqt_graph验证自己的猜想。至此,一个功能包的分析大致结束。

以上内容根据博客:失眠,聊聊自己搞ROS的心得体会吧 进行补充与修改。