escrito en frente
El entorno probado por el autor:
Ubuntu18.04, ROS-melodic
1. Descripción del problema
Cuando probé el programa amcl, encontré los siguientes problemas (el programa amcl probado era normal en Ubuntu16.04 ROS-kinetic, pero obtuve Ubuntu18.04, ROS-melodic para probar, pero ocurrieron los siguientes problemas):
/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_; }
Dos, la solución
tf2_buffer_ 修改成了 tf2_buffer_ptr_
Después de consultar los datos, se encuentra que esta parte ha sido modificada en la versión ROS-melódico, y el programa amcl que necesita ser modificado está incluido en el melódico .
2 ubicaciones deben modificarse:
ubicación 1:
// 原来的程序:
inline tf2_ros::Buffer &getBuffer() {
return tf2_buffer_; }
// 修改为:
inline std::shared_ptr<tf2_ros::Buffer> &getBuffer() {
return tf2_buffer_ptr_;}
posición 2:
// 原来的程序:
tf_->getBuffer().setTransform(tf_msg->transforms[ii], "rosbag_authority");
// 修改为:
tf_->getBuffer()->setTransform(tf_msg->transforms[ii], "rosbag_authority");
Luego vuelva a compilar, puede compilar con éxito.
Link de referencia
[1] moraridad. Error de compilación Melodic debido al cambio tf #717 [EB/OL]. https://github.com/ros-planning/navigation/issues/717, 2018-05-15/2023-04-12.
[1] 向阳花开. ROS- 解决error "tf2_buffer_' no se declaró en este ámbito" [EB/OL]. https://blog.csdn.net/Draonly/article/details/111885161, 2020-12-29/2023-04-12.