这是原始代码
ros::Subscriber sub_flag_fix_pose = n.subscribe<nav_msgs::Odometry>("/correct_pose", 100, flagfixpose_callback);
void flagfixpose_callback(nav_msgs::Odometry &msg){
// ROS_INFO("flagfixpose callback!");
std::unique_lock<std::mutex> locker(mu_fixbuf);
nav_msgs::Odometry msg_copy = msg;
fixpose_buf.push_back(msg_copy);
if(fixpose_buf.size() > 5)
{
fixpose_buf.erase(fixpose_buf.begin());
}
locker.unlock();
flag_fix = true;
cond.notify_one();
}
然后终端里报错如下
invalid initialization of reference of type ‘nav_msgs::Odometry_<std::allocator<void> >&’ from expression of type ‘const boost::shared_ptr<const nav_msgs::Odometry_<std::allocator<void> > >
问了gpt如下:这个错误是因为你的回调函数 flagfixpose_callback
接受一个非常量引用参数 nav_msgs::Odometry &msg
,但 ROS 的消息回调函数需要接受一个常量引用参数。
当你订阅一个 ROS 主题时,ROS 会自动调用你的回调函数,并传递一个包含新消息的常量引用。这是因为你不应该修改这些消息,它们应该是只读的。
因此,你应该将你的回调函数的参数更改为常量引用:
void flagfixpose_callback(const nav_msgs::Odometry &msg)
修改完后依然报错,然后我把
ros::Subscriber sub_flag_fix_pose = n.subscribe<nav_msgs::Odometry>("/correct_pose", 100, flagfixpose_callback);
删除了<nav_msgs::Odometry>,然后编译通过了,有没有大佬看一下是为什么