La solución al error de compilación de ROS "error: 'tf2_buffer_' no se declaró en este ámbito"

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.

Supongo que te gusta

Origin blog.csdn.net/qq_39779233/article/details/130106870
Recomendado
Clasificación