目录
学习参考:赵虚左的ROS课程与古月的ROS机器人开发实践书籍。
一、准备工作——配置vscode
为了vscode在调用自定义服务数据时不报假错同时能够补全代码,需要对vscode进行配置。
c_cpp_properties.json(注意逗号)
"includePath": [
--snip--
"/home/rosmelodic/catkin_ws/devel/include/**"
],
也就是刚刚创建自定义服务数据,catkin_make后中间文件的目录。
二、服务端创建
1.创建文件demo01_server.cpp
在src中创建demo01_server.cpp文件。
#include "ros/ros.h"
#include "server_client/AddInts.h"
bool huidiao(server_client::AddInts::Request &request,
server_client::AddInts::Response &response){
int num11 = request.num1;
int num22 = request.num2;
ROS_INFO("收到的请求数据为:num11 =%d,num22=%d",num11,num22);
int sum12 = num11 + num22;
response.sum = sum12;
ROS_INFO("求和结果:sum = %d",sum12);
//ros::spin();//这是一次尝试
return true;
}
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
ros::init(argc,argv,"jiafa_server");
ros::NodeHandle n;
ros::ServiceServer service = n.advertiseService("add_ints",huidiao);
ROS_INFO("准备好加入两个整数");
ros::spin();
return 0;
}
#include "ros/ros.h"
#include "server_client/AddInts.h"
头文件:调用roscpp和刚刚创建的自定义服务数据类型。调用形式为功能包名/通过编译生成的自定义头文件名
bool huidiao(server_client::AddInts::Request &request,
server_client::AddInts::Response &response){
int num11 = request.num1;
int num22 = request.num2;
ROS_INFO("收到的请求数据为:num11 =%d,num22=%d",num11,num22);
int sum12 = num11 + num22;
response.sum = sum12;
ROS_INFO("求和结果:sum = %d",sum12);
ros::spin();
return true;
}
首先先声明了函数输入参数的数据类型,其中数据类型为刚刚创建的自定义服务数据类型,需要注意的是,自定义服务数据类型创建时通过“---”的符号将上下两部分分为了请求和应答数据类型,如下图。其中调用方法为
server_client::AddInts::Request(Response)——功能包名::创建的自定义数据类型文件名::Request(Response)——请求(应答)
in