ROS コンパイル エラー「エラー: 'tf2_buffer_' はこのスコープで宣言されていません」の解決策

前に書いてある

筆者がテストした環境:
Ubuntu18.04、ROS-melodic

1. 問題の説明

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_; }

2、解決策

tf2_buffer_ 修改成了 tf2_buffer_ptr_データを調べたところ、この部分は ROS-melodic バージョンで変更されており、変更が必要な amcl プログラムはmelodic に含まれていることがわかりました。
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] モリアーティ。tf 変更 #717 [EB/OL] によるコンパイル エラー Melodic。https://github.com/ros-planning/navigation/issues/717、2018-05-15/2023-04-12。
[1] 向阳花开。ROS エラー「tf2_buffer_' はこのスコープで宣言されていませんでした」[EB/OL]。https://blog.csdn.net/Draonly/article/details/111885161、2020-12-29/2023-04-12。

おすすめ

転載: blog.csdn.net/qq_39779233/article/details/130106870