ROS核心框架介绍

描述

ROS核心框架

对于第一个问题,我也没仔细研究过源码,核心代码基本由python和C++组成,运用了xmlrpc机制,每个运行的节点可以理解成一个进程。进程间通讯有些是共享内存的方式(比如message_filter),有些应该是通过socket。

不过ROS的核心框架也就是ros-base主要由Willow Garage公司和一些开发者设计、提供以及维护,它提供了一些分布式计算的基本工具。

sudo apt install ros-melodic-ros-base

分布式计算框架可以理解为ROS的所有节点运行时需要一个主控制器ROS Master(通过roscore指令开启),ROS Master通过RPC(Remote Procedure Call Protocol,远程过程调用)提供了登记列表和对其他计算图表的查找。

没有控制器,节点将无法找到其他节点,交换消息或调用服务。节点与节点之间的连接是直接的,控制器就像一个DNS(Domain Name System)服务器。

主控制器

ROS的框架还是挺复杂的,光看一些理论性的介绍可能还有点概念,但真正去实现里面肯定还有不少细节问题。

真正在应用ROS框架时,其实也有一些不足的地方,比如:

1、ROS节点相互之间通信时如何知道另外一个节点的状态,是宕掉了还是正常,因为它强依赖于于中心节点ROS Master。本身在系统中频繁创建话题就不是一件很好的事,会造成多少内存碎片。

在使用ros::Subscriber sub = n.subscribe(“chatter”, 1000,chatterCallback)时,这个1000是队列消息的缓存数目,如果是图像或者点云比较大的数据,就不要随便写1000了,不然内存会被消耗光。

2、系统中存在大量话题和数据时,本地传输的数据延时大而不确定,远程传输的数据更是受带宽和处理性能的影响。对于机器人的控制而言,想要达到精确更多,通信延时就要做得更小,而ROS这种通信机制实时性和稳定性不太好。

3、ROS的msg采用md5码去进行校验,如果一个人改了没通知另外一个人,经常导致另外一个人的包运行不起来的尴尬局面。

4、ROS与可视化界面通信时,有时不知道是界面还是ROS机制问题,界面会莫名闪退(rviz就经常出现这样的问题)。

5、关于ROS的动态参数保存问题,比如在rqt_reconfigure上调好的参数如何在重启roscore后加载调试后的参数。我曾花费过很久的时间,参见《在ROS中处理yaml文件》和《ROS动态调参(dynamic
reconfigure)客户端服务端之C++ Python实现》

但也没有很好地解决。很多功能可能仅适用于给开发者用,但当作产品去使用还是有很多地方值得去优化。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分