ROS编译报错 “error: ‘tf2_buffer_’ was not declared in this scope”的解决方法

写在前面

笔者测试的环境:
Ubuntu18.04, ROS-melodic

一、问题描述

自己在测试 amcl 程序的时候遇到如下问题(测试的amcl程序在Ubuntu16.04 ROS-kinetic上正常,但是拿到Ubuntu18.04, ROS-melodic进行测试,却出现了如下问题):

/home/ubuntu/***_ws/src/amcl_icp/amcl/src/amcl_node.cpp: In member function ‘tf2_ros::Buffer& AmclNode::TransformListenerWrapper::getBuffer()’:
/home/ubuntu/***_ws/src/amcl_icp/amcl/src/amcl_node.cpp:140:50: error: ‘tf2_buffer_’ was not declared in this scope
     inline tf2_ros::Buffer &getBuffer() {
    
     return tf2_buffer_; }

二、解决方法

经过查阅资料发现,ROS-melodic 版本中对该处进行了修改,在melodic中把 tf2_buffer_ 修改成了 tf2_buffer_ptr_所以需要修改amcl的程序。
需要修改2个位置:
位置1:

// 原来的程序:
inline tf2_ros::Buffer &getBuffer() {
    
     return tf2_buffer_; }
// 修改为:
inline std::shared_ptr<tf2_ros::Buffer> &getBuffer() {
    
    return tf2_buffer_ptr_;}

位置2:

// 原来的程序:
tf_->getBuffer().setTransform(tf_msg->transforms[ii], "rosbag_authority");
// 修改为:
tf_->getBuffer()->setTransform(tf_msg->transforms[ii], "rosbag_authority");

然后再次编译,就可以正常编译成功。

参考链接

[1] moriarty. Compile Error Melodic due to tf change #717 [EB/OL]. https://github.com/ros-planning/navigation/issues/717, 2018-05-15/2023-04-12.
[1] 向阳花开. ROS- 解决error “tf2_buffer_’ was not declared in this scope” [EB/OL]. https://blog.csdn.net/Draonly/article/details/111885161, 2020-12-29/2023-04-12.

猜你喜欢

转载自blog.csdn.net/qq_39779233/article/details/130106870
今日推荐