ROS 類內如何使用成員函式作為subscribe的回撥函式(this指標)
阿新 • • 發佈:2019-01-22
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);