Sono nuovo di ROS e cercando di capire questo potente strumento. Sono confuso dalle funzioni spin e rate.sleep. Qualcuno potrebbe aiutarmi con la differenza tra queste due funzioni e quando usare quale? Grazie.Differenza tra rotazione e rate.sleep in ROS
risposta
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.