饮食常识Manual

《ROS入门》第10讲:(服务数据的界说与使用编程实现)‘开云官方入口’

2023-11-09 01:26:02
浏览次数:
返回列表

本文摘要:如何自界说服务数据界说srv文件;界说srv文件的花样://包罗请求(request)和响应( reply) 两部门请求数据类型(request)--- 响应数据类型(respond)实现功效:自界说一个服务数据,编写两个法式(一个服务端,一个客户端),客户端请求数据,服务端举行相应的响应。

如何自界说服务数据界说srv文件;界说srv文件的花样://包罗请求(request)和响应( reply) 两部门请求数据类型(request)--- 响应数据类型(respond)实现功效:自界说一个服务数据,编写两个法式(一个服务端,一个客户端),客户端请求数据,服务端举行相应的响应。编程思路:第一步,自界说服务数据,即界说一个srv(Person.srv)文件(在learning_service/srv目录下)备注:建立srv: mkdir srvPerson.srv详细内容如下:string nameuint8 ageuint8 genderuint8 male=1uint8 female=2---result备注:建立功效包doubixiaohanhan:message_generationmessage_runtime第二步,在package.xml中添加功效包的依赖(在doubixiaohanhan/package.xml里) find_package( …… message_generation) add_service_files(FILES Person.srv)generate_messages(DEPENDENCIES std_msgs)catkin_package(…… message_runtime)第三步,在CMakeLists.txt添加编译选项1,第四步,编译生成语言相关文件第五步,编写服务端测试法式(在doubixiaohanhan/src目录下)#include#include"doubixiaohanhan/Person.h"bool personCallback(doubixiaohanhan::Person::Request &requ,doubixiaohanhan::Person::Response &resp){ROS_INFO("name:%s age:%d gender:%d",requ.name.c_str(),requ.age,requ.gender);resp.result = "ok";return true;}int main(int argc,char **argv){ros::init(argc,argv,"person_server");ros::NodeHandle n;ros::ServiceServer person_service = n.advertiseService("/doubi",personCallback);ROS_INFO("Ready to display the person information");ros::spin();return 0;}第六步,编写客户端测试法式(在doubixiaohanhan/src目录下)#include#include"doubixiaohanhan/Person.h"int main(int argc ,char **argv){ros::init(argc,argv,"person_client");ros::NodeHandle node;ros::service::waitForService("doubi");ros::ServiceClient person_client = node.serviceClient("/doubi");doubixiaohanhan::Person srv;srv.request.name = "doubixiaohanhan";srv.request.age = 18;srv.request.gender = doubixiaohanhan::Person::Request::male;ROS_INFO("Call service to show person[name:%s, age:%d,gender:%d]",srv.request.name.c_str(),srv.request.age,srv.request.gender);person_client.call(srv);ROS_INFO("Show person result:%s",srv.response.result.c_str());return 0;}第七步,添加对上述两个法式的编译依赖add_executable(person_server src/service1.cpp)target_link_libraries(person_server ${catkin_LIBRARIES})add_dependencies(person_server ${PROJECT_NAME}_gencpp)add_executable(person_client src/client1.cpp)target_link_libraries(person_client ${catkin_LIBRARIES})add_dependencies(person_client ${PROJECT_NAME}_gencpp)第八步,编译上述写好的服务端和客户端的法式1,cd ~/catkin_ws 2, catkin_make3,source devel/setup.bash第九步,测试1, roscore2, rosrun doubixiaohanhan person_server3, rosrun doubixiaohanhan person_client增补:c_str()函数返回一个指向正规C字符串的指针常量。


本文关键词:开云官方入口

本文来源:开云官方入口-www.andreabrinezmua.com

搜索