1. 程式人生 > >ROS 類內如何使用成員函式作為subscribe的回撥函式(this指標)

ROS 類內如何使用成員函式作為subscribe的回撥函式(this指標)

ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, &listener);

使用類內函式時,將第四個引數替換成this:

ros::Subscriber sub = n.subscribe("chatter", 1000, &Listener::callback, this);

然而報錯:需要輸入類模板型別,修改為:

ros::Subscriber sub = n.subscribe<nav_msgs::Odometry>("chatter", 1000, &Listener::callback, this);

報錯:找不到匹配的subscribe函式

解決辦法:模仿move_base中subscribe函式的形式,使用boost::bind()函式

odom_sub = private_nh.subscribe<nav_msgs::Odometry>("odom", 1, boost::bind(&PatrolRobot::odomCB, this, _1));

this表示指向當前類的指標,用boost函式傳入,_1表示佔位符,可以參考Subscribe的第四個引數用法

注意:以此形式寫回調函式時,形參要寫成constptr形式:

void odomCB(const nav_msgs::Odometry::ConstPtr &odom);