2014-04-22 10 views

risposta

10

ros::spin() e ros::spinOnce() sono resposible per gestire eventi di comunicazione, ad esempio messaggi in arrivo. Se si sottoscrivono messaggi, servizi o azioni, è necessario chiamare spin per elaborare gli eventi.

Mentre ros :: spinOnce() gestisce gli eventi e restituisce immediatamente, ros :: rotazione() blocchi fino a ros invoca un arresto. Quindi ros :: spinOnce() ti dà più controllo se necessario. Maggiori informazioni su questo argomento: Callbacks and Spinning.

rate.sleep() invece è solo un sonno filo con durata definita essere una frequenza. Ecco un esempio

ros::Rate rate(24.); 
while(ros::ok()) 
{ 
    rate.sleep(); 
} 

Questo ciclo verrà eseguito 24 volte al secondo o meno, dipende ciò che si fa all'interno del ciclo. Un oggetto ros::Rate tiene traccia di quanto tempo dall'ultimo rate.sleep() è stato eseguito e dormire per la giusta quantità di tempo per colpire nel segno 24 Hz. Vedi API ros::Rate::sleep().

Il modo equivalente nel dominio del tempo è ros::Duration::sleep()

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

Quale si utilizza è solo una questione di convenienza.