2014-04-22 4 views
5

Ich bin neu bei ROS und versuche, dieses mächtige Werkzeug zu verstehen. Ich bin verwirrt von den Funktionen spin und rate.sleep. Könnte mir jemand mit dem Unterschied zwischen diesen beiden Funktionen helfen und wann wann welche verwenden? Vielen Dank.Unterschied zwischen spin und rate.sleep in ROS

Antwort

10

ros::spin() und ros::spinOnce() sind verantwortlich für Kommunikationsereignisse, z.B. ankommende Nachrichten. Wenn Sie Nachrichten, Dienste oder Aktionen abonnieren, müssen Sie eine Drehung aufrufen, um die Ereignisse zu verarbeiten.

Während ros :: spinOnce() die Ereignisse behandelt und sofort zurückgibt, blockiert roos :: spin(), bis ros ein Shutdown auslöst. So gibt ros :: spinOnce() mehr Kontrolle wenn nötig. Mehr dazu hier: Callbacks and Spinning.

rate.sleep() auf der anderen Seite ist nur ein Thread Schlaf mit Dauer definiert als eine Frequenz. Hier ist ein Beispiel:

Diese Schleife wird 24 mal pro Sekunde oder weniger ausgeführt, hängt davon ab, was Sie innerhalb der Schleife tun. Ein Objekt ros::Rate verfolgt, wie viel Zeit seit der letzten rate.sleep() ausgeführt wurde und für die richtige Zeit, um die 24-Hz-Marke zu treffen schlafen. Siehe ros::Rate::sleep() API.

Die äquivalente Art und Weise in der Zeitdomäne ist ros::Duration::sleep()

ros::Duration duration(1./24.); 
while(ros::ok()) 
{ 
    duration.sleep(); 
} 

, welche Sie nur eine Frage der Bequemlichkeit verwenden ist.

Verwandte Themen