ROS与C++入门教程-使用类方法作为回调函数
ROS与C++入门教程-使用类方法作为回调函数
说明:
- 大多数教程使用函数的例子,而不是类方法。这是因为使用函数比较简单,不是因为不支持类方法。
- 本教程将向您展示如何使用类方法订阅服务回调。
订阅
- 假设你有简单的类,Listener参考代码:
class Listener
{
public:
void callback(const std_msgs::String::ConstPtr& msg);
};
- NodeHandle::subscribe()使用函数作为回调,看起来如下:(参考代码)
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
- 使用类方法作为回调函数,看起来如下:(参考代码)
Listener listener;
ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, &listener);
- 如果订阅在Listener内部,你替换最后的参数为关键词this,它意味着订阅会引用类的一部分。
服务端
- 假设你有简单类,AddTwo,参考代码
- 代码片段如下:
class AddTwo
{
public:
bool add(roscpp_tutorials::TwoInts::Request& req,
roscpp_tutorials::TwoInts::Response& res);
};
- 旧方法:NodeHandle::advertiseService()调用如下:(参考代码)
- 代码片段如下:
ros::ServiceServer service = n.advertiseService("add_two_ints", add);
- 类的版本如下:(参考代码)
- 代码片段如下:
AddTwo a;
ros::ServiceServer ss = n.advertiseService("add_two_ints", &AddTwo::add, &a);
- subscribe(),advertiseservice()全套等的重载,看NodeHandle class documentation
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号