ROS 類內如何使用成員函數作爲subscribe的回調函數(this指針)

創客智造:ROS與C++入門教程-使用類方法作爲回調函數

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);

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章