前に書いてある
筆者がテストした環境:
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。