【ROS机器人开发实践】ROS架构

1、ROS架构设计

三个层次:OS层、中间层、应用层
1、OS层:
并不是一个传统意义上的操作系统,需要依托于Linux系统(如Ubuntu、macOS、Arch等)
2、中间层:
Linux其中最为重要的就是基于TCPROS/UDPROS的通信系统,ROS的通信系统基于TCP/UDP网络,在此之上进行了在此封装,也就是TCPROS/UDPROS。通信系统使用发布/订阅、客户端/服务器等模型,实现多种通信机制的数据传输。
通信机制之上,ROS提供了大量机器人开发相关的库,如数据类型定义、坐标变化、运动控制等,可以提供非应用层使用。
3、应用层:
在应用层,ROS需要运行一个管理者——Master,负责管理整个系统的正常运行。ROS社区内共享了大量的机器人应用功能包,功能包内的模块以节点为单位运行。

从系统实现的角度来看,ROS也可以分为:文件系统、计算图、开源社区

2、计算图

2、1节点

节点就是一些执行运算任务的进程,一个系统一般由多个节点组成,也可以称为“软件模块”。

2、2消息

节点之间最重要的通信机制就是基于发布/订阅模型的消息通信。每一个消息都是一种严格的数据结构,支持标准数据类型(整点、浮点型、布尔型等),也支持嵌套结构和数组(类似于C语言的struct),还可以根据需求由开发者自主定义。

2、3话题

消息以一种发布/订阅(Publish/Subscribe)的方式传递。一个节点可以针对一个给定的话题(Topic)发布消息(Talker),也可以关注某个话题并订阅特定类型的数据(Listener)。发布者和订阅者并不了解彼此的存在,系统中可能同时有多个节点发布或者订阅同一个话题的消息。

2、4服务

基于话题的发布/订阅模型是一种很灵活的通信模式,但是对于双向的同步传输模式并不适合。在ROS中,我们称这种同步传输模式为服务(Service),其基于客户端/服务器模型,包含两个部分的通信数据类型:一个用于请求,一个用于应答。与话题不同的是,ROS中只允许有一个节点提供指定命名的服务。ROS中只允许有一个节点提供指定命名的服务。

2、5节点管理器

ROS Master通过远程过程调用(RPC)提供登记列表和对其他计算图表的查找功能,帮助ROS节点之间相互查找、建立连接,同时还为系统提供参数服务器,管理全局参数。

3、文件系统

功能包(Package):功能包是ROS软件中的基本单元,包含ROS节点、库、配置文件等。
功能包清单(Package Manifest):每个功能包都包含一个名为package.xml的功能包清单,用于记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等。
元功能包(Meta Package):主要作用是组织多个用于同一目的的功能包。(例:一个ROS导航的元功能包中会包含建模、定位、导航等多个功能包)
元功能包清单:类似于功能包清单,不同之处在于元功能包清单中可能会包含运行时需要依赖的功能包或者声明引用的标签。
消息类型:msg
服务类型:srv
代码:code
ROS文件系统

3、1功能包

文件夹功能如下:
config:放置功能包中的配置文件
include:放置功能包中需要用到的头文件
scripts:放置可以直接运行的python脚本
src:放置需要编译的C++代码
launch:放置功能包中的所有启动文件
msg:放置功能包自定义的消息类型
srv:放置功能包自定义的服务类型
action:放置功能包自定义的动作指令
CMakeLists.txt:编译器编译功能包的规则
package.xml:功能包清单

<build_depend></build_depend>标签定义了功能包中代码编译所依赖的其他功能包。
<run_depend></run_depend>标签定义了功能包中可执行程序运行时所依赖的其他功能包。

ROS的常用命令

命令作用
catkin_create_pkg创建功能包
rospack获取功能包的信息
catkin_make编译工作空间中的功能包
rosdep自动安装功能包依赖的其他包
roscd功能包目录跳转
roscp拷贝功能包中的文件
rosed编辑功能包中的文件
rosrun运行功能包中的可执行文件
roslaunch运行启动文件

3、2元功能包

元功能包是一种特殊的功能包,质保函一个package.xml元功能包清单文件。虽然元功能包清单的package.xml文件与功能包的package.xml文件类似,但是需要包含一个引用的标签如下:
<export>
<metapackage/>
</export>
此外,元功能包清单不需要<build_depend>标签声明编译过程依赖的其他功能包,只需要使用<run_depend>标签声明功能包运行时依赖的其他功能包。

4、开源社区

5、1ROS的通信机制

分布式通信机制:话题通信机制、服务通信机制、参数管理机制

5、1话题通信机制

  1. Talker注册
  2. Listener注册
  3. ROS Master进行信息匹配
  4. Listener发送链接请求
  5. Talker确认连接请求
  6. Listener尝试与Talker建立网络连接
  7. Talker向Listener发布数据

5、2服务通信机制

  1. Talker注册
  2. Listener注册
  3. ROS Master进行信息匹配
  4. Listener与Talker建立网络连接
  5. Talker向Listener发布服务应答数据

5、3参数管理机制

  1. Talker设置变量
  2. Listener查询参数值
  3. ROS Master向Listener发送参数值

6、话题与服务的区别

话题是ROS中基于发布/订阅模式的异步通信模式,这种方式将信息的产生和使用双方解耦,常用语不断更新的、含有较少逻辑处理的数据通信
服务多用于处理ROS中的同步通信,采用客户端/服务器模型,常用语数据量较小但有强逻辑处理的数据交换。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS机器人操作系统,Robot Operating System)是一个开源的机器人软件平台,提供了一系列的工具、库和约定,用于简化机器人软件的开发、部署和管理。 在CSDN(中国最大的IT技术社区)上,有很多关于ROS机器人开发实践的相关文章和教程。这些文章和教程涵盖了ROS的基础知识、常用工具的使用、常见机器人应用的开发等方面。 在ROS机器人开发实践中,首先需要了解ROS的基础概念和架构,包括ROS节点、ROS话题、ROS服务等。然后可以学习使用ROS的工具,如ROS命令行工具和ROS可视化工具(如RViz和RQt)等,这些工具可以帮助开发者进行机器人功能的测试和调试。 在实践中,可以通过编写ROS节点来开发机器人的各个功能模块。比如,可以编写一个节点来控制机器人的运动,通过订阅激光扫描数据和发布运动控制指令来实现自主导航功能。还可以编写一个节点来处理摄像头采集的图像数据,进行图像识别和目标跟踪等功能开发。 此外,还可以利用ROS的社区资源,如ROS包和ROS消息的共享,来快速搭建和开发机器人应用。CSDN上有很多开发者分享的ROS包和教程,可以提供给其他开发者作为参考和借鉴。 总之,ROS机器人开发实践是一个充满挑战但又非常有趣和有意义的领域。通过在CSDN上学习和交流,开发者可以更好地掌握ROS开发技术和实践经验,进而开发出更强大、智能和实用的机器人应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值