2017-01-12 14 views
2

Ich schreibe ein Programm in ROS, das nach jeder Callback-Funktion bestimmte Berechnungen ausführen sollte. Meine Callback-Funktion abonniert grundsätzlich ein Thema und legt den Wert einer Variablen fest, mit der eine bestimmte Berechnung durchgeführt wird. Das Thema, das ich abonniere, hat eine Frequenz von 30 Hz. Also habe ich eine While-Schleife in meinem Programm, die mit 30 Hz läuft. Die Schleife ist ähnlich dem folgenden Code:Gibt es eine Methode, um Ros :: spinOnce() eine bestimmte Anzahl von Callbacks aus der Callback-Queue aufrufen zu lassen?

while (ros::ok()) 
{ 
    ros::spinOnce(); //this should set a certain variable "a" 
    perform_computation(); //this performs computation on the variable "a" 
    looprate.sleep(); //this runs at 30 Hz 
} 

Antwort

2

ros :: spinOnce() ist ähnlich wie ros :: Spin(), aber mit dem Unterschied, dass es nicht blockiert. Jeder Aufruf von ros :: spinOnce() wird alle empfangenen Nachrichten seit dem letzten Anruf verarbeiten, d. H. Er ruft alle Teilnehmer-Rückruffunktionen für jede der Nachrichten auf. Wenn Sie die Kontrolle über die Callback-Funktionen übernehmen wollen, puffern Sie die Nachrichten, die Sie von der Callback-Funktion erhalten haben, und wickeln Sie die gepufferten Nachrichten in der Rate und auf dem gewünschten Weg ab. Dies ist auch die Art, wie Sie Informationen verarbeiten sollten, wenn der Callback eine langwierige Berechnung durchführt. Callback-Funktion sollte sehr schnell sein.

Verwandte Themen