ros本地的安裝目錄爲opt/ros/kineticnode
ros.h所在絕對路徑opt/ros/kinetic/include/ros/ros.hc++
代碼中使用#include 「ros/ros.h」函數
ros.h中的源碼this
ros.h是一個頭文件集合,包含所需的全部基礎頭文件。spa
String.h位於include/std_msgs/String.h,std_msgs下都是內建基礎類型,String.h3d
內容比較多,注意String實際是一個別稱,它的全稱是::std_msgs::String_<std::allocator<void> >orm
定義的語句是typedef ::std_msgs::String_<std::allocator<void> > String;對象
String有一個成員是data,用來存數據。注意String定義的對象必定要用它的data成員來存放數據。blog
以及包含一些運算符重載,更多的內容就看不懂了接口
ros::init() ROS節點初始化函數
有三種重載形式,ros源代碼中的重載大部分都是頂層調用同名底層。1調用2,2調用3.
ros::init中有network::init、master::init、this_node::init、file_log::init、param::init。
使用NodeHandle接口時使用此種參數形式,第四個參數options缺省(3個選擇)。
NodeHandle是句柄類,在ros/node_handle.h中定義,最主要是不少函數集合,自己數據不多(命名空間名之類).
是roscpp用於建立訂閱者和發佈者等的接口。必須在使用前用ros::init()實例化。
NodeHandle下的advertise方法返回一個Publisher對象,攜帶要發佈的topic。
結尾的advertise是下面這種重載形式,功能在註釋中。
Publisher是ros/publisher.h中定義的一個類,其中有重載的publish方法,只傳遞一個msg信息就能夠進行發佈。
ros::ok()定義在init.cpp中的一個函數,定義以下
g_ok初始默認爲false,通過init()後變爲true,當程序遇到shutdown()時g_ok變爲false。
ok()用來斷定程序是否應該繼續運行。
ROS_INFO()至關於c中的printf,ROS_INFO_STREAM()至關於c++中的cout。
源碼未找到。
ros_Rate爲ros/rate.h中定義的類,構造函數須要一個頻率數據,經常使用的是其兩個公共方法sleep()和reset();
ros::spinOnce()和ros::spin()都是ROS消息回調函數,用於處理callback函數
消息發佈器在一個while裏面一直循環發送「hello world」到topic上。消息訂閱器一旦知道chatter上面有data,就會將這data做爲參數傳入callback函數中,可是此時尚未執行callback函數,而是把callback函數放到了一個回調函數隊列中。因此當發佈器不斷髮送data到chatter上面時,就會有相應的callback函數進入隊列中,它們函數名同樣,只是實參不同。。
當spinOnce函數被調用時,spinOnce就會調用回調函數隊列中第一個callback函數,此時callback函數才被執行,而後等到下次spinOnce函數又被調用時,回調函數隊列中第二個callback函數就會被調用,以此類推。
因此,這會有一個問題。由於回調函數隊列的長度是有限的,若是發佈器發送數據的速度太快,spinOnce函數調用的頻率太少,就會致使隊列溢出,一些callback函數就會被擠掉,致使沒被執行到。
而對於spin函數,一旦進入spin函數,它就不會返回了,至關於它在本身的函數裏面死循環了。只要回調函數隊列裏面有callback函數在,它就會立刻去執行callback函數。若是沒有的話,它就會阻塞,不會佔用CPU。
(本大段是粘貼自其餘博客)
Subscriber是ros/subscriber.h中定義的類,內容很少,初級也不須要顯式用到裏面的成員。
NodeHandle類中的subscribe()方法對應advertise(),用來訂閱,也定義在ros/node_handle.h中,
@font-face { font-family: "Times New Roman"; }@font-face { font-family: "宋體"; }@font-face { font-family: "Calibri"; }p.MsoNormal { margin: 0pt 0pt 0.0001pt; font-family: Calibri; }span.msoIns { text-decoration: underline; color: blue; }span.msoDel { text-decoration: line-through; color: red; }div.Section0 { }