1.使用命令访问服务端
首先启动小乌龟程序
roslaunch helloworld first_launch.launch
获取服务话题以及服务的消息类型
rosservice list
获取消息类型:turtlesim/Spawn
rosservice info /spawn
产看该消息的具体信息
rossrv info turtlesim/Spawn
使用命令实现访问服务端创建小乌龟
rosservice call /spawn "x: 10.0
y: 10.0
theta: 10.0
name: 'tutu'"
name: "tutu"
2.C++实现访问服务端
创建编程文件,编写代码,编辑配置文件
/*
生成一只小乌龟
准备工作:
1.服务话题 /spawn
2.服务消息类型 turtlesim/Spawn
3.运行前先启动 turtlesim_node 节点
实现流程:
1.包含头文件
需要包含 turtlesim 包下资源,注意在 package.xml 配置
2.初始化 ros 节点
3.创建 ros 句柄
4.创建 service 客户端
5.等待服务启动
6.发送请求
7.处理响应
*/
#include "ros/ros.h"
#include "turtlesim/Spawn.h"
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 2.初始化 ros 节点
ros::init(argc,argv,"set_turtle");
// 3.创建 ros 句柄
ros::NodeHandle nh;
// 4.创建 service 客户端
ros::ServiceClient client = nh.serviceClient<turtlesim::Spawn>("/spawn");
// 5.等待服务启动
// client.waitForExistence();
ros::service::waitForService("/spawn");
// 6.发送请求
turtlesim::Spawn spawn;
spawn.request.x = 1.0;
spawn.request.y = 1.0;
spawn.request.theta = 1.57;
spawn.request.name = "my_turtle";
bool flag = client.call(spawn);
// 7.处理响应结果
if (flag)
{
ROS_INFO("新的乌龟生成,名字:%s",spawn.response.name.c_str());
} else {
ROS_INFO("乌龟生成失败!!!");
}
return 0;
}
add_executable(server_turtle2_c src/server_turtle2_c.cpp)
target_link_libraries(server_turtle2_c
${catkin_LIBRARIES}
)
运行程序查看效果
source ./devel/setup.bash
rosrun control_turtle0 server_turtle2_c
3.Python实现访问服务端
新建编程文件,编辑配置文件,添加可执行权限
#! /usr/bin/env python
"""
生成一只小乌龟
准备工作:
1.服务话题 /spawn
2.服务消息类型 turtlesim/Spawn
3.运行前先启动 turtlesim_node 节点
实现流程:
1.导包
需要包含 turtlesim 包下资源,注意在 package.xml 配置
2.初始化 ros 节点
3.创建 service 客户端
4.等待服务启动
5.发送请求
6.处理响应
"""
import rospy
from turtlesim.srv import Spawn,SpawnRequest,SpawnResponse
if __name__ == "__main__":
# 2.初始化 ros 节点
rospy.init_node("set_turtle_p")
# 3.创建 service 客户端
client = rospy.ServiceProxy("/spawn",Spawn)
# 4.等待服务启动
client.wait_for_service()
# 5.发送请求
req = SpawnRequest()
req.x = 2.0
req.y = 2.0
req.theta = -1.57
req.name = "my_turtle_p"
try:
response = client.call(req)
# 6.处理响应
rospy.loginfo("乌龟创建成功!,叫:%s",response.name)
except expression as identifier:
rospy.loginfo("服务调用失败")
catkin_install_python(PROGRAMS
scripts/server_turtle2_p.py
DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)
运行查看结果
rosrun control_turtle0 server_turtle2_p.py
https://mp.youkuaiyun.com/mp_download/manage/download/UpDetailed