《ROS應(yīng)用技術(shù)》課件-12.ros自定義接口消息-自定義服務(wù)消息實(shí)訓(xùn)_第1頁(yè)
《ROS應(yīng)用技術(shù)》課件-12.ros自定義接口消息-自定義服務(wù)消息實(shí)訓(xùn)_第2頁(yè)
《ROS應(yīng)用技術(shù)》課件-12.ros自定義接口消息-自定義服務(wù)消息實(shí)訓(xùn)_第3頁(yè)
《ROS應(yīng)用技術(shù)》課件-12.ros自定義接口消息-自定義服務(wù)消息實(shí)訓(xùn)_第4頁(yè)
《ROS應(yīng)用技術(shù)》課件-12.ros自定義接口消息-自定義服務(wù)消息實(shí)訓(xùn)_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論