古月居 ROS入门21讲 第十五讲 服务数据的定义与使用

古月居 ROS入门21讲 第十五讲 服务数据的定义与使用

Person.srv

string name
uint8 age
uint8 sex

uint8 male=1
uint8 female=2
---
string result
  • C++
    person_server.cpp
#include<ros/ros.h>
#include "learning_service/Person.h"

bool personCallback(learning_service::Person::Request &req,learning_service::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::init(argc,argv,"person_server");
    ros::NodeHandle n;
    ros::ServiceServer person_service = n.advertiseService("/show_person",personCallback);
    ROS_INFO("Ready to show person.");
    ros::spin();
    return 0;
}

person_client.cpp

#include<ros/ros.h>
#include "learning_service/Person.h"

int main(int argc,char**argv)
{
    ros::init(argc,argv,"person_client");
    ros::NodeHandle node;
    ros::service::waitForService("/show_person");
    ros::ServiceClient person_client=node.serviceClient<learning_service::Person>("/show_person");
    learning_service::Person srv;
    srv.request.name="Tom";
    srv.request.age=20;
    srv.request.sex=learning_service::Person::Request::male;

    ROS_INFO("Call service to show person");
    person_client.call(srv);
    ROS_INFO("Show person result:%s",srv.response.result.c_str());

    return 0;
}

package.xml中添加

  <build_depend>message_generation<ild_depend>
  <exec_depend>message_runtime</exec_depend>

CMakelists.txt中作如下内容的修改或添加:

find_package(catkin REQUIRED COMPONENTS
  geometry_msgs
  roscpp
  rospy
  std_msgs
  turtlesim
  message_generation
)
add_service_files(FILES Person.srv)
generate_messages(DEPENDENCIES std_msgs)

这里直接取消注释并添加message_runtime

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES learning_service
  CATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
#  DEPENDS system_lib
)
add_executable(person_server src/person_server.cpp)
target_link_libraries(person_server ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)

add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值