我在寫一個類,其目標是向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();
}