本文主要是介绍第十一弹 客户端Client的编程实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目标:通过client与server实现生成一个新海龟。
1.服务模型(客户端/服务器)
2.创建功能包
catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim
learning_service功能包里的文件:
3.创建客户端代码
新建一个 turtle_spawn.cpp文件
如何实现一个客户端:
- 初始化ROS节点
- 创建一个Client实例
- 发布服务请求数据
- 等待Server处理之后的应答结束
turtle_spawn.cpp:
/*
该例程将请求/spawn服务,服务数据类型 turtlesim::Spawn
*/#include<ros/ros.h>
#include<turtlesim/Spawn.h>int main(int argc,char **argv)
{//初始化ROS节点ros::init(argc,argv,"turtle_spawn");//创建节点句柄ros::NodeHandle node;//发现/spawn服务后,创建一个服务客户端,连接名为/spawn的serviceros::service::waitForService("/spawn");ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn");//初始化turtlesim::Spawn的请求数据turtlesim::Spawn srv;srv.request.x = 2.0;srv.request.y = 2.0;srv.request.name = "turtle2";//请求服务调用ROS_INFO("Call service to spawn turtle[x:%0.6f,y:%0.6f,name:%s]",srv.request.x,srv.request.y,srv.request.name.c_str());add_turtle.call(srv);//显示服务调用结束ROS_INFO("Spawn turtle successfully[name:%s]",srv.response.name.c_str());return 0;
}
4.配置客户端代码编译规则
- 设置需要编译的代码和生成的可执行文件
- 设置链接库
add_executable(turtle_spawn src/turtle_spawn.cpp)
target_link_libraries(turtle_spawn ${catkin_LIBRARIES} )
将上面两句话复制到CMakeLists.txt文件中:
5. 编译和运行
在 ~/catkin_ws文件目录下进行编译:
运行:
roscorerosrun turtlesim turtlesim_node rosrun learning_service turtle_spawn
这篇关于第十一弹 客户端Client的编程实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!