client
- 编写一个client给
service
名为:/spawn
,在指定位置求创建一个小海龟。
#include<ros/ros.h>
#include"turtlesim/Spawn.h"
int main(int argc, char **argv){
ros::init(argc,argv,"turtle_spawn");
ros::NodeHandle n;
ros::service::waitForService("/spawn");
ros::ServiceClient add_turtle = n.serviceClient<turtlesim::Spawn>("/spawn");
turtlesim::Spawn msg;
msg.request.name = "zwh";
msg.request.x = 1.0;
msg.request.y = 2.0;
ROS_INFO("add a turtle named = %s, at x = %.2f,y = %.2f",msg.request.name.c_str(),msg.request.x,msg.request.y);
add_turtle.call(msg);
ROS_INFO("spawn turtle successfully name = %s",msg.response.name.c_str());
}
server
- 编写一个
server
控制是否使用publihser
给控制小乌龟运动的topic/turtle/cmd_cvel
发送信息, - 其中
service
为/turtle_command
#include "geometry_msgs/Twist.h"
#include "std_srvs/Trigger.h"
#include <ros/ros.h>
bool pubcommand = false;
bool commandCallBack(std_srvs::Trigger::Request &req ,std_srvs::Trigger::Response &res){
pubcommand = !pubcommand;
ROS_INFO("moving is %s",pubcommand==true?"open":"close");
res.success = true;
res.message ="success change status";
return true;
}
int main(int argc, char **argv) {
ros::init(argc,argv,"tutle_command_server");
ros::NodeHandle n;
ros::ServiceServer turtle_server = n.advertiseService("/turtle_command",commandCallBack);
ros::Publisher tutle_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",10);
ros::Rate loop_rate(10);
ROS_INFO("Ready to receive information");
while(ros::ok()){
ros::spinOnce();
if(pubcommand){
geometry_msgs::Twist msg;
msg.angular.z = 5;
msg.linear.x = 10;
tutle_pub.publish(msg);
}
loop_rate.sleep();
}
return 0;
}