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