ROS Node/Topic/Message/Service的一些問題


1.Node

http://blog.exbot.net/archives/1412 (摘自老王說ros)

node干的什么活?callback queue里的活。這個callback queue里的callback是哪里來的呢?常見的是subscriber的callback,當然還有其他的,包括publisher的,service的。那這些callback是什么時候被調用的呢。那就是spin()或者spinonce()。spin調用在queue 里所有的availiable的callback,如果沒有availible的,它就阻塞。spinonce,顯然只調用一次,看看有沒有准備好的callback,有就調用,沒有就返回。那什么是availible的、准備好的呢?對於subscribe,准備好的就是那些有新消息的subscriber的callback。現在如果你明白了上述node的運行機理。你在感到舒服之余,請准備接收心煩的問題。

1)第一個問題就是,如果subscriber沒有收到新消息,那么它的callback就不會被執行。如果你想每次都運行callback呢?對不起,沒辦法,不是virgin我不娶。

2)第二個問題,callback執行有個timeout值,如果設置不合理,要么費時,要么callback被中止。被中止呀,兄弟們,多可怕,萬一是一個重要邏輯的一環呢?今天就聊到這里,最后送點福利,如果你想實現事件觸發的node就用spin;如果你要固定周期的node,那就用spinonce+sleep,但一定要牢記,在每個周期里不是所有callback被執行.

2. Topic 與 Service

http://blog.exbot.net/archives/1605 (摘自西工大一小學生 ROS 通訊層模型)

Topic:ros中廣為使用的是異步的 publish-subscribe 通訊模式。這種方式將信息的產生和使用雙方解耦。一般來說,節點沒有通訊對方那邊的信息。Node從需要的topic那取得消息,topic 可以有多個 subscriber 與publisher。Topic 一般用於單向,消息流通訊。Node 需要同步通訊交換信息時一般使用service。Topic 一般擁有很強的類型定義:一種類型的topic只能接受/發送特定數據類型(message type)的message。Publisher 沒有被要求類型一致性,但是接受時subscriber會檢查類型的md5,進而報錯。

 Service: service 用於處理ros通訊中的同步通訊,采用server/client 語義。每個service type擁有 request 與 response兩部分,對於service中的 server,ros不會檢查重名(name conflict),只有最后注冊的server會生效,與client建立連接。

3.Nodelet

http://wiki.ros.org/nodelet

This package provides both the nodelet base class needed for implementing a nodelet, as well as the NodeletLoader class used for instantiating nodelets

提供了turtlebot的一個控制led燈的例子

以及簡單的教程

http://wiki.ros.org/nodelet/Tutorials


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM