目录
一,完成话题和服务模式的ROS程序设计
创建工作空间
mkdir catkin_ws
cd catkin_ws/
mkdir src
catkin_init_workspace
编译工作空间,生成工作环境
cd ..
catkin_make
创建功能包
cd src/
catkin_create_pkg qgr_topic roscpp rospy std_msgs geometry_msgs turtlesim
创建发表服务节点
cd qgr_topic/
mkdir srv
cd srv
touch Person.srv
程序设计
person_serve.cpp
#include <ros/ros.h>
#include "qgr_topic/Person.h"
// service回调函数,输入参数req,输出参数res
bool personCallback(qgr_topic::Person::Request &req,
qgr_topic::Person::Response &res)
{
// 显示请求数据
ROS_INFO("Person: name:%s age:%d sex:%d", req.name.c_str(), req.age, req.sex);
// 设置反馈数据
res.result = "OK";
return true;
}
int main(int argc, char **argv)
{
// ROS节点初始化
ros::init(argc, argv, "person_server");
// 创建节点句柄
ros::NodeHandle n;
// 创建一个名为/show_person的server,注册回调函数personCallback
ros::ServiceServer person_service = n.advertiseService("/show_person", personCallback);
// 循环等待回调函数
ROS_INFO("Ready to show person informtion.");
ros::spin();
return 0;
}
person_client.cpp
#include <ros/ros.h>
#include "qgr_topic/Person.h"
int main(int argc, char** argv)
{
// 初始化ROS节点
ros::init(argc, argv, "person_client");
// 创建节点句柄
ros::NodeHandle node;
// 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
ros::service::waitForService("/show_person");
ros::ServiceClient person_client = node.serviceClient<qgr_topic