nodelet的一些理解

看来一下ros下的nodelet,有一些自己的理解,不知对不对,主要参考:

http://wiki.ros.org/nodelet/Tutorials/Running%20a%20nodelet

http://blog.csdn.net/zyh821351004/article/details/52143309

http://blog.csdn.net/x_r_su/article/details/53130062

1、nodelet是干啥用的??我们都知道ros的通信机制:消息。节点A将一个消息message发送到一个话题topic,节点B通过订阅这个topic,可以获取节点A发布出来的message,这样数据就从节点A传送到了节点B,实现了一次通信的过程。但是在这次通信的过程中,message被复制了两次,从节点A到topic一次,从topic到节点B又一次,这样产生了一些额外的开销,当数据量很大的时候,就会造成数据获取的实时性变差,因为毕竟复制也是需要时间的。于是,nodelet就是为了解决这问题来出现的。实现了所谓的“通信开销零拷贝”

2、nodelet是咋做到的呢??学过c++的童鞋应该都知道指针的概念,我们想获得一个变量c的值,可以将变量c所在的内存内容全部复制过来,另一种较为经济的办法是用一个指针来访问这个变量c。

而nodelet首先把需要通信的节点A和节点B都“”放入”一个节点nodelet里面(括号可以先不看,“”放入“”的方法是用到了ros下的另外一个技术叫plugin插件,个人理解就是将节点A和节点B按照ros下规定的一种模板格式封装一下,然后调用的时候就可以ros规定格式直接运行了,非常方便)。

然后nodelet利用了牛逼一点的指针boost_share_ptr把需要发布和订阅的消息利用指针的方式“实现”(这个“实现”的过程,需要按照ros规定的方式改写,个人理解只要就是原来publish的是变量本身,现在publish的是指针)

3、nodelet好处是啥呢?第一,通信快。第二,原来已有的格式书节点间的通信,仅仅需要最很小的修改。

不对的地方请使劲喷~qq:305555309

猜你喜欢

转载自blog.csdn.net/qq_33179208/article/details/70888911