roscore -> fa partire un ros master
rosrun <nome_package> <nome_eseguibile> -> crea un nodo contenente l'eseguibile
per creare un workspace catkin:
- posizionarsi dentro alla cartella desiderata
- creare una sottocartella src
- catkin_make
- source ~/gits/ros/devel/setup.bash per poter eseguire il codide ros (messo dentro a .bashrc)
per creare un package:
- posizionarsi dentro la cartella src del workspace
- catkin_create_pkg <nome_package> -> crea un package ros
catkin_make per compilare i sorgenti
publish(message)
non pubblica effettivamente il messaggio, ma lo "parcheggia" nella coda di attesa (la cui dimensione viene specificata quando viene istanziato il publisher).
un thread separato si occupa di inviare effettivamente il messaggio al topic. se il numero di messaggi in coda supera la dimensione di essa, i messaggi piu' vecchi vengono cancellati per far spazio a quelli piu' recenti.
quando arriva un nuovo messaggio, esso viene salvato in una coda di attesa (stesso funzionamento di quella del publisher) finche' Ros non da' la possibilita' al subscriber di eseguire la funzione di callback.
Ros eseguira' una callback solo quando gli daremo il permesso di farlo. ci sono due modi per fare questo:
ros::spinOnce()
-> chiede a Ros di eseguire tutte le callback in sospeso di ogni subscriber e poi ci restituisce il controlloros::spin()
-> chiede a Ros di attendere e di eseguire le callback fino a quando il nodo non viene spento. e' equivalente a:
while (ros::ok()) {
ros::spinOnce();
}
se il nodo non deve solamente eseguire le callback, allora un loop con ros::spinOnce()
e' la scelta corretta (ovviamente).