《ROS应用技术》课件-12.ros自定义接口消息-自定义服务消息实训_第1页
《ROS应用技术》课件-12.ros自定义接口消息-自定义服务消息实训_第2页
《ROS应用技术》课件-12.ros自定义接口消息-自定义服务消息实训_第3页
《ROS应用技术》课件-12.ros自定义接口消息-自定义服务消息实训_第4页
《ROS应用技术》课件-12.ros自定义接口消息-自定义服务消息实训_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

ROS应用开发技术ROS自定义消息接口-服务(上)01知识回顾02文件创建与编写03文件运行目录CONTENTS知识回顾自定义服务消息回顾通过定义.srv文件实现节点间服务通信接口自定义服务消息支持功能复杂功能的交互,如运动规划、图像处理等文件创建与编写C++实训操作进入learn_service功能包目录,新建srv文件夹,创建IntPlus.srv文件操作步骤uint8auint8b---uint8result文件内容文件内我们可以去定义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文件中添加构建依赖和执行依赖,打开CMakeList.txt文件添加编译选项。编译与服务消息查询rossrvshowlearn_service/IntPluscatkin_make使用catkin_make命令编译,使用rossrvshow命令查询自定义服务消息是否生成。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节点ros::NodeHandlenode;//创建节点句柄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);//显示服务调用结果

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);//显示请求数据res.result=req.a+req.b;//反馈结果为两数之和returnres.result;}intmain(intargc,char**argv){ros::init(argc,argv,"IntPlus_server");//ROS节点初始化ros::NodeHandlen;//创建节点句柄ros::ServiceServerInt_Plus_service=n.advertiseService("/Two_Int_Plus",IntPlusCallback);ROS_INFO("Readytocaculate.");ros::spin();return0;}CMakeLists.txt配置修改CMakeLists.txt文件,添加右侧内容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)文件运行程序启动231rosrunlearn_serviceIntPlus_serverrosrunlearn_serviceIntPlus_client编译功能包roscore启动服务端和客户端启动roscorecatkin_makeROS应用开发技术ROS自定义消息接口-话题(下)01文件编写02文件运行目录CONTENTS文件编写模块化架构Information_subscriber.py订阅者发布者进入learn_topic功能包的scripts文件夹下,编写一个发布者和一个订阅者来使用之前自定义的话题消息Information_publisher.pyInformation_publisher.py文件编写importrospyfromlearn_topic.msgimportInformation#导入自定义的msgdefinformation_publisher():rospy.init_node('information_publisher',anonymous=True)info_pub=rospy.Publisher('/company_info',Information,queue_size=6)rate=rospy.Rate(10)#设置循环的频率whilenotrospy.is_shutdown():info_msg=Information()info_pany="Yahboom";info_msg.city="Shenzhen";info_pub.publish(info_msg)#发布消息rospy.loginfo("Thisis%sin%s.",info_pany,info_msg.city)#打印发布消息rate.sleep()#按照循环频率延时if__name__=='__main__':try:information_publisher()exceptrospy.ROSInterruptException:passInformation_subscriber文件编写importrospyfromlearning_topic.msgimportInformation#导入自定义的msgdefCompanyInfoCallback(msg):rospy.loginfo("company:name:%scity:%s",pany,msg.city)#打印订阅接收到信息defInfomation_subscriber():rospy.init_node('Infomation_subscriber',anonymous=True)#ROS节点初始化

#创建一个Subscriber,订阅名为/company_info的topic,注册回调函数personInfoCallbackrospy.Subscriber("/company_info",Information,CompanyInfoCallback)rospy.spin()#循环等待回调函数if__name__=='__main__':Infomation_subscriber()赋予执行权限为Python文件添加可执行权限。执行权限使用chmod命令添加执行权限,非root用户需在命令前加sudo。sudochmod

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论