我在写一个类,其目标是向rviz提供一个模型。班级应能够订阅一个主题来模拟一些动作。因此,我想使用node.subscribe
,但问题是,subscribe
预计static void
函数。这意味着我无法访问我的班级成员和方法。ROS:将回调函数和对象成员绑定到订阅节点
有没有可能做到这一点?
这里缩短代码:
MyClass.h
class MyClass
{
private:
tf::Transform transform;
ros::Subscriber subscriber;
public:
int publish();
private:
static void callback (std_msgs::Float64MultiArray msg);
};
MyClass.cpp
MyClass::MyClass()
{
this->subscriber =
this->node.subscribe("topic_id",
1,
&MyClass::callback,
this->transform);
}
void MyClass::callback(std_msgs::Float64MultiArray msg, tf::Transform &transform)
{
std::vector<double> data(4);
data = msg.data;
transform->setRotation(tf::Quaternion(data[0], data[1], data[2], data[3]));
publish();
}