1. ros運行單位:
Ros程序運行的單位是ros node。
2. ros 節點的啟動:
(1)初始化ros節點:通過調用ros::init()接口實現;可以通過參數指定默認節點名字,之所以是默認,是因為在命令行執行程序時,是可以修改節點名字的。
(2)啟動ros節點:通過調用ros::NodeHnadle創建NodeHnadle實例nh實現,第一次創建實例時,會調用ros::start(),此時啟動本節點。
3. ros節點關閉:
(1)通過調用ros::shutdown()接口,關閉ros節點,此接口會關閉訂閱話題、發布話題、請求服務以及提供服務。
(2)在最后一個ros::NodeHnadle對象銷毀時,會自動調用ros::shutdown(),以此關閉ros節點。
4. 檢測ros節點是否已經關閉:
(1)ros::ok()接口:返回false,說明節點已經關閉。
(2)ros::isShuttingDown()接口:返回true,說明ros::shutdown()被調用,但是節點比一定結束。
注:所以一般使用ros::ok()判斷,但是在不會結束的節點,例如“ prolonged service callback”中,則只能使用ros::isShuttingDown(),因為此節點不會關閉,疑惑這是什么節點?
5. 中斷:
(1)在ros::init()選項中,有一選項ros::init_options::NoSigintHandler,決定是否安裝默認SIGINT處理函數,若不帶此參數,則安裝,程序在收到SIGINT信號(ctrl+c)時,ros::ok()返回false,節點可以走關閉流程。若帶此參數,需要自己安裝SIGINT處理函數,以保證節點可以結束。