ROS學習(五)問題小結

1. ros::spin()和ros::spinOnce()使用及區(qū)別

這兩個函數(shù)是ROS消息回調處理函數(shù)。通常會出現(xiàn)在ROS的主循環(huán)中,程序需要調用ros::spin() 或 ros::spinOnce()來處理回調callback函數(shù)渣触,兩者區(qū)別在于前者調用后不會再返回,也就是你的主程序到這兒就不往下執(zhí)行了,而后者在調用后還可以繼續(xù)執(zhí)行之后的程序。換句話說导狡,ros::spin()是循環(huán)且監(jiān)聽回調函數(shù)(callback)。循環(huán)就是指程序運行到這里偎痛,就會一直在這里循環(huán)了旱捧。監(jiān)聽回調函數(shù)的意思是,如果這個節(jié)點有callback函數(shù)踩麦,那寫一句ros::spin()在這里枚赡,就可以在有對應消息到來的時候,運行callback函數(shù)里面的內容谓谦,其適用于訂閱subscribe節(jié)點贫橙,且訂閱速度沒有限制的情況。ros::spinOnce()是監(jiān)聽回調函數(shù)(callback)反粥。只能監(jiān)聽卢肃,不能循環(huán)。所以當你需要監(jiān)聽一下的時候星压,就調用一下這個函數(shù)践剂。

實際上,如果你的程序寫了相關的消息訂閱subscribe函數(shù)娜膘,那么程序在執(zhí)行過程中,除了主程序以外优质,ROS還會自動在后臺按照你規(guī)定的格式竣贪,接受訂閱的消息,但是所接到的消息并不是立刻就被處理巩螃,而是必須要等到ros::spin()或ros::spinOnce()執(zhí)行的時候才被回調函數(shù)callback處理演怎。

對于有些傳輸特別快的消息,尤其需要注意合理控制消息池大小和ros::spinOnce()執(zhí)行頻率; 比如消息送達頻率為10Hz, ros::spinOnce()的調用頻率為5Hz避乏,那么消息池的大小就一定要大于2爷耀,才能保證數(shù)據(jù)不丟失,無延遲拍皮。例如以下語句消息池大小為1000:

ros::Subscriber sub = n.subscribe("hello", 1000, chatterCallback);

最后強調一下歹叮,這兩個函數(shù)只和接收回調函數(shù)(callback)有關跑杭,和發(fā)布publish并沒有關系。如果想循環(huán)發(fā)布咆耿,只能循環(huán)寫publish()德谅。

2. ROS下多線程Thread的使用

LCM::handle()功能類似于ROS里的ros::spin(),用來調用lcm.subscribe()函數(shù)萨螺,但不同的是運行此命令時窄做,程序會在這里等待直到有訂閱消息傳來完成相關操作后此命令才能結束。程序才能往下運行慰技。在本文中椭盏,作者需要在同一個節(jié)點同時接收來自ROS topic的信息和lcm的信息,并且要實現(xiàn)即使沒有l(wèi)cm信息吻商,程序也能繼續(xù)運行掏颊。所以采用thread多線程方法。

C++已經提供了thread庫可以直接使用手报,實例如下:

#include <thread>

// function of thread?t_lcm

void lcmReceiver()

{

? lcm::LCM lcm;

? if(!lcm.good())

? ? ? ROS_INFO("lcm failed");

? Handler handlerObject;

? lcm.subscribe(“channel”, &Handler::handleMessage, &handlerObject);

? while (ros::ok()){

? ? ROS_INFO("tread t_lcm");

? ? lcm.handle();

? }

}

// ROS 節(jié)點的main函數(shù)

int main(int argc, char **argv)

{

? ros::init(argc, argv, “node_name”);

? ros::NodeHandle n;

? ros::Subscriber sub1 = n.subscribe(“topic”, 1000, chatterCallback);?

? std::thread t_lcm(lcmReceiver);

? while (ros::ok()){

? ? ros::spinOnce();

? }

? return 0;

}

以此實現(xiàn)lcm的信息和ros的topic同時并行接收蚯舱。

3. ROS下使用opencv

首先確定電腦上已經成功安裝opencv庫,使用:

pkg-config --modversion opencv

可查看所安裝版本掩蛤。

如果只是在回調函數(shù)中使用枉昏,就正常在CMakeLists.txt文件中加入:

find_package(OpenCV REQUIRED)

include_directories(${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})

add_executable(rosOpenCV src/rosOpenCV.cpp)

target_link_libraries(rosOpenCV ${OpenCV_LIBS})

target_link_libraries(rosOpenCV ${catkin_LIBRARIES})

即可。注意使用時需把以上代碼中rosOpenCV換成自己的Node名稱揍鸟。

4. ROS節(jié)點多對多兄裂、一對多通信的使用

只需要給予這些發(fā)布和訂閱節(jié)點相同topic即可。

5. Cmake使用教程

CMakeLists.txt之123 - 知乎CMake 入門實戰(zhàn) | HaHack

如有問題阳藻,歡迎聯(lián)系討論晰奖。

參考文檔:ros::spin() 和 ros::spinOnce() 區(qū)別及詳解 - 小萌是個球 - 博客園

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市腥泥,隨后出現(xiàn)的幾起案子匾南,更是在濱河造成了極大的恐慌,老刑警劉巖蛔外,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蛆楞,死亡現(xiàn)場離奇詭異,居然都是意外死亡夹厌,警方通過查閱死者的電腦和手機豹爹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來矛纹,“玉大人臂聋,你說我怎么就攤上這事。” “怎么了孩等?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵艾君,是天一觀的道長。 經常有香客問我瞎访,道長腻贰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任扒秸,我火速辦了婚禮播演,結果婚禮上,老公的妹妹穿的比我還像新娘伴奥。我一直安慰自己写烤,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布拾徙。 她就那樣靜靜地躺著洲炊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪尼啡。 梳的紋絲不亂的頭發(fā)上暂衡,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機與錄音崖瞭,去河邊找鬼狂巢。 笑死,一個胖子當著我的面吹牛书聚,可吹牛的內容都是我干的唧领。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雌续,長吁一口氣:“原來是場噩夢啊……” “哼斩个!你這毒婦竟也來了?” 一聲冷哼從身側響起驯杜,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤受啥,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸽心,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腔呜,經...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年再悼,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膝但。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡冲九,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情莺奸,我是刑警寧澤丑孩,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站灭贷,受9級特大地震影響温学,放射性物質發(fā)生泄漏。R本人自食惡果不足惜甚疟,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一仗岖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧览妖,春花似錦轧拄、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至府树,卻和暖如春俐末,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背奄侠。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工卓箫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人遭铺。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓丽柿,卻偏偏與公主長得像,于是被迫代替她去往敵國和親魂挂。 傳聞我的和親對象是個殘疾皇子甫题,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354