Я пишу класс с целью предоставить модель для 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();
}