• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

创建 std_srvs::Empty 型 Service (参数为空的服务)

人工智能 bbtang5568 2218次浏览 0个评论

参考:ros::NodeHandle::advertiseService() API docs 1 包含头文件  


#include <std_srvs/Empty.h>

  2 创建服务,并绑定服务的回调函数  


restart_whole_robot_service_ = nh_.advertiseService("restart_whole_robot", &bp_hdw_common::restart_whole_robot_serviceCB, this);

  3 定义服务回调函数功能,注意回调函数的参数为(1)std_srvs::Empty::Request &req; (2)std_srvs::Empty::Response &res  


bool bp_hdw_common::restart_whole_robot_serviceCB(std_srvs::Empty::Request &req,  std_srvs::Empty::Response &res)
{
    return true;
}

  在应用中遇到的两个问题:   (1)创建服务错误  


restart_whole_robot_service_ = nh_.advertiseService("restart_whole_robot", &bp_hdw_common::restart_whole_robot_serviceCB)

  报警:  


error: no matching function for call to ‘ros::NodeHandle::advertiseService(const char [20], bool (bp_hdw::bp_hdw_common::*)(std_srvs::Empty::Request&, std_srvs::Empty::Response&))’

  原因是丢掉了this,函数原型为 advertiseService (const std::string &service, bool(T::*srv_func)(MReq &, MRes &), T *obj),正确结果如下:  


restart_whole_robot_service_ = nh_.advertiseService("restart_whole_robot", &bp_hdw_common::restart_whole_robot_serviceCB, this);

  (2)通过参考链接将回调函数的参数写为std_srvs::Empty &req 和 std_srvs::Empty &res  


restart_whole_robot_serviceCB(std_srvs::Empty &req,  std_srvs::Empty &res)

  报警:  


error: ‘const struct std_srvs::Empty’ has no member named ‘serialize’

  正确结果为  


restart_whole_robot_serviceCB(std_srvs::Empty::Request &req,  std_srvs::Empty::Response &res)

 


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明创建 std_srvs::Empty 型 Service (参数为空的服务)
喜欢 (0)

您必须 登录 才能发表评论!

加载中……