版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ROS應(yīng)用開發(fā)技術(shù)ROS自定義消息接口-服務(wù)(上)01知識(shí)回顧02文件創(chuàng)建與編寫03文件運(yùn)行目錄CONTENTS知識(shí)回顧自定義服務(wù)消息回顧通過(guò)定義.srv文件實(shí)現(xiàn)節(jié)點(diǎn)間服務(wù)通信接口自定義服務(wù)消息支持功能復(fù)雜功能的交互,如運(yùn)動(dòng)規(guī)劃、圖像處理等文件創(chuàng)建與編寫C++實(shí)訓(xùn)操作進(jìn)入learn_service功能包目錄,新建srv文件夾,創(chuàng)建IntPlus.srv文件操作步驟uint8auint8b---uint8result文件內(nèi)容文件內(nèi)我們可以去定義request和response,以虛線為界,上面是request,下面是response。CMakelist.txt配置<build_depend>message_generation</build_depend><exec_depend>message_runtime</exec_depend>package.xml#在find_package里邊加上message_generationadd_service_files(FILESIntPlus.srv)generate_messages(DEPENDENCIESstd_msgs)CMakeList.txt在package.xml文件中添加構(gòu)建依賴和執(zhí)行依賴,打開CMakeList.txt文件添加編譯選項(xiàng)。編譯與服務(wù)消息查詢r(jià)ossrvshowlearn_service/IntPluscatkin_make使用catkin_make命令編譯,使用rossrvshow命令查詢自定義服務(wù)消息是否生成。IntPlus_client.cpp文件編寫#include<ros/ros.h>#include"learn_service/IntPlus.h"#include<iostream>usingnamespacestd;intmain(intargc,char**argv){inti,k;cin>>i;cin>>k;ros::init(argc,argv,"IntPlus_client");//初始化ROS節(jié)點(diǎn)ros::NodeHandlenode;//創(chuàng)建節(jié)點(diǎn)句柄ros::service::waitForService("/Two_Int_Plus");
IntPlus_client.cpp文件編寫ros::ServiceClientIntPlus_client=node.serviceClient<learn_service::IntPlus>("/Two_Int_Plus");learn_service::IntPlussrv;srv.request.a=i;srv.request.b=k;ROS_INFO("Callservicetoplus%dand%d",srv.request.a,srv.request.b);IntPlus_client.call(srv);ROS_INFO("Showtheresult:%d",srv.response.result);//顯示服務(wù)調(diào)用結(jié)果
return0;}IntPlus_server文件編#include<ros/ros.h>#include"learn_service/IntPlus.h"boolIntPlusCallback(learn_service::IntPlus::Request&req,learn_service::IntPlus::Response&res){ROS_INFO("number1is:%d,number2is:%d",req.a,req.b);//顯示請(qǐng)求數(shù)據(jù)res.result=req.a+req.b;//反饋結(jié)果為兩數(shù)之和returnres.result;}intmain(intargc,char**argv){ros::init(argc,argv,"IntPlus_server");//ROS節(jié)點(diǎn)初始化ros::NodeHandlen;//創(chuàng)建節(jié)點(diǎn)句柄ros::ServiceServerInt_Plus_service=n.advertiseService("/Two_Int_Plus",IntPlusCallback);ROS_INFO("Readytocaculate.");ros::spin();return0;}CMakeLists.txt配置修改CMakeLists.txt文件,添加右側(cè)內(nèi)容add_executable(IntPlus_clientsrc/IntPlus_client.cpp)target_link_libraries(IntPlus_client${catkin_LIBRARIES})add_dependencies(IntPlus_client${PROJECT_NAME}_generate_messages_cpp)add_executable(IntPlus_serversrc/IntPlus_server.cpp)target_link_libraries(IntPlus_server${catkin_LIBRARIES})add_dependencies(IntPlus_server${PROJECT_NAME}_generate_messages_cpp)文件運(yùn)行程序啟動(dòng)231rosrunlearn_serviceIntPlus_serverrosrunlearn_serviceIntPlus_client編譯功能包roscore啟動(dòng)服務(wù)端和客戶端啟動(dòng)roscorecatkin_makeROS應(yīng)用開發(fā)技術(shù)ROS自定義消息接口-話題(下)01文件編寫02文件運(yùn)行目錄CONTENTS文件編寫模塊化架構(gòu)Information_subscriber.py訂閱者發(fā)布者進(jìn)入learn_topic功能包的scripts文件夾下,編寫一個(gè)發(fā)布者和一個(gè)訂閱者來(lái)使用之前自定義的話題消息Information_publisher.pyInformation_publisher.py文件編寫importrospyfromlearn_topic.msgimportInformation#導(dǎo)入自定義的msgdefinformation_publisher():rospy.init_node('information_publisher',anonymous=True)info_pub=rospy.Publisher('/company_info',Information,queue_size=6)rate=rospy.Rate(10)#設(shè)置循環(huán)的頻率whilenotrospy.is_shutdown():info_msg=Information()info_pany="Yahboom";info_msg.city="Shenzhen";info_pub.publish(info_msg)#發(fā)布消息rospy.loginfo("Thisis%sin%s.",info_pany,info_msg.city)#打印發(fā)布消息rate.sleep()#按照循環(huán)頻率延時(shí)if__name__=='__main__':try:information_publisher()exceptrospy.ROSInterruptException:passInformation_subscriber文件編寫importrospyfromlearning_topic.msgimportInformation#導(dǎo)入自定義的msgdefCompanyInfoCallback(msg):rospy.loginfo("company:name:%scity:%s",pany,msg.city)#打印訂閱接收到信息defInfomation_subscriber():rospy.init_node('Infomation_subscriber',anonymous=True)#ROS節(jié)點(diǎn)初始化
#創(chuàng)建一個(gè)Subscriber,訂閱名為/company_info的topic,注冊(cè)回調(diào)函數(shù)personInfoCallbackrospy.Subscriber("/company_info",Information,CompanyInfoCallback)rospy.spin()#循環(huán)等待回調(diào)函數(shù)if__name__=='__main__':Infomation_subscriber()賦予執(zhí)行權(quán)限為Python文件添加可執(zhí)行權(quán)限。執(zhí)行權(quán)限使用chmod命令添加執(zhí)行權(quán)限,非root用戶需在命令前加sudo。sudochmod
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游業(yè)務(wù)賦能增長(zhǎng)
- 旅游業(yè)績(jī)超越預(yù)期
- 2025年智能制造園區(qū)廠房拆遷補(bǔ)償及產(chǎn)業(yè)布局協(xié)議4篇
- 個(gè)人投資企業(yè)資產(chǎn)轉(zhuǎn)讓協(xié)議版A版
- 2025柴油終端零售居間合作協(xié)議書4篇
- 2025年度茶葉產(chǎn)品研發(fā)與技術(shù)轉(zhuǎn)移合同4篇
- 2025年度海上風(fēng)電場(chǎng)建設(shè)分包工程合同4篇
- 2025年度教育培訓(xùn)課程定制合同書4篇
- 專業(yè)服裝面料供應(yīng)協(xié)議范本版B版
- 二零二四二手設(shè)備購(gòu)買與維修合同2篇
- 2024-2025學(xué)年成都高新區(qū)七上數(shù)學(xué)期末考試試卷【含答案】
- 定額〔2025〕1號(hào)文-關(guān)于發(fā)布2018版電力建設(shè)工程概預(yù)算定額2024年度價(jià)格水平調(diào)整的通知
- 2025年浙江杭州市西湖區(qū)專職社區(qū)招聘85人歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- 《數(shù)學(xué)廣角-優(yōu)化》說(shuō)課稿-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué)人教版
- “懂你”(原題+解題+范文+話題+技巧+閱讀類素材)-2025年中考語(yǔ)文一輪復(fù)習(xí)之寫作
- 2025年景觀照明項(xiàng)目可行性分析報(bào)告
- 2025年江蘇南京地鐵集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 2025年度愛讀書學(xué)長(zhǎng)參與的讀書項(xiàng)目投資合同
- 電力系統(tǒng)分析答案(吳俊勇)(已修訂)
- 化學(xué)-河北省金太陽(yáng)質(zhì)檢聯(lián)盟2024-2025學(xué)年高三上學(xué)期12月第三次聯(lián)考試題和答案
- 期末復(fù)習(xí)試題(試題)-2024-2025學(xué)年四年級(jí)上冊(cè)數(shù)學(xué) 北師大版
評(píng)論
0/150
提交評(píng)論