A-A+

老王说ROS(6)如何设计node

2015年04月12日 note, ROS 评论 1 条 阅读 5,415 次

image description

image description

继续ros。
(6)如何设计node

先把大坑tf和slam这些硬货留着,等我慢慢想,上了岁数就要捡软的捏,那就继续捏把node。有前五次试探性进攻,这次就该动点真格的了:把node给设计了。同时也给非业务的事情打个结,给业务的设计开个头。

设计一个东西,当然不是算计,首先要知道设计的东西是什么,其次再说它要干什么,最后才是如何干。

1)node是什么?
要知道一个东西是什么,抽象很关键。所谓抽象,就是从深处来,不往深处走,就在上面飘着,就不干活,就动嘴,就玩文字游戏。想这么任性是很难的,抽象不容易;但抽象的结果是明确的,那就是概念。所以,我们可以从给node下定义的角度来完成抽象。

好吧,node可以这样定义:node是一个提供了外部接口、内部有结构、用于实现业务的进程。

三个关键词:提供外部接口;内部有结构;实现业务。

这也太抽象了吧,跟废话一样,我也这么认为,但绝对不是废话,因为,从这些废话出发,可以做如下整理:

node提供的接口有三种:message-based的p/s interface,rpc-based的service interface,data-based的parameter interface。

node的内部结构可以分两种:按时间周期工作,由事件驱动工作。

不过,node实现的业务有无数种。无数种?不会吧,有什么不会的?杀猪杀屁股都是一大类杀法。不过,也是可以总结的。

2)要node做什么
当然是干活了,干各种活,可以说是无穷尽也。但只要敢抽象,不去想负什么样的具体责任,那也是可以说出个道道来的。因此,

从抽象的角度来说,node要干的活可以分为:
data的生产者、消费者、加工者;
event的发起者、响应者;
service的提供者、需求者;
configuration的接受者、设定者;
其他基础服务者,如计算节点管理、数据记录、数据显示、系统异常检测与处理等等。

头好疼呀, 分这么多类干什么,有必要想这些嘛,我不就是采个传感器的数嘛,采完了用消息发布了不就得了,想那么多干嘛。说实在的,我也没有很好的理由反驳,也没有必要反驳,因为我觉着实践和理论是一体的,如果你实践成功了,说明你理论也成功了,但如果你总是靠运气,那还是了解一下吧。因为,这的确是设计好一个node的基础。

说的更有说服力点,因为上述那些是不同的、高大上的primitive component model。你可以基于这些模型,组合,聚合成更复杂的组件模型,解决你遇到的各种业务问题。

3)node怎么设计?
node没法设计。因为没有具体业务的node无须设计。为了遵从必须有干货的原则,举个设计例子吧。就举slam node这个例子:
a.它是一个数据加工者。
b.它需要两个对外的输入接口:环境感知传感器数据、定位定向数据;两个输出接口:地图和位姿。那就用p/b吧。
c.它的内部结构按固定周期来吧。当然也有多种选择。
c1. 按最慢的那个输入的周期来,把算法放到感知传感器的回调函数里,靠数据生产者的周期控制自己的周期。
c2. 自己固定个周期,写个处理函数,在loop里调用,订阅数据的回调函数只管赋值。

哈哈,大功告成!

还是别高兴的太早了吧。新的需求来了,它的算法参数应该可以设置,比如里程计和激光扫描仪的概率模型,因为每个传感器都有区别。于是

d.它需要作为一个configuration的接受者。用parameter service吧。

好了,完事了吧?no,因为有个家伙需要控制你启动和停止运行,并且需要你报告执行的结果,于是,

e. 它需要作为一个服务的提供者。用service吧,当然还要去设计个状态机来控制不同的流程,并且还需要找个地方来实施。

现在好了吧?我也不知道,分配给node的需求总是会有变化的。干着试试吧。

4)必须简化node设计
按以上思路,在node的角度设计node是错误的,因为还没有进行系统设计呢。node设计成什么样合适,是在系统设计时,给它分配职责的那一刻,就已经确定了。所以,要简化node设计,就要谈系统设计、系统架构设计了。返璞归真,才有无穷变化,下次再聊,top,你的分层要来了。

最后警告一下玩slam的小伙伴:(1)不标定里程计、不给它建个概率模型,就玩slam,等于在对激光扫描仪这个好姑娘耍流氓!
(2)不把里程计和扫描仪的时间同步考虑进去,就预测更新,那就是以组织的名义拉郎配!

标签:

1 条留言  访客:1 条  博主:0 条

  1. 王孟昊

    对node的理解不能再深刻了,好文。

给我留言

Copyright © ExBot易科机器人实验室 保留所有权利.   Theme   Robin modified by poyoten

用户登录

分享到: