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实现》
但也没有很好地解决。很多功能可能仅适用于给开发者用,但当作产品去使用还是有很多地方值得去优化。
-
机器人
+关注
关注
210文章
28053浏览量
205731 -
主控制器
+关注
关注
2文章
28浏览量
10887 -
ROS
+关注
关注
1文章
276浏览量
16930
发布评论请先 登录
相关推荐
评论