はじめに
現在研究で使用しているROSパッケージで,突然ビルドが通らなくなり,以下のようなエラーメッセージが出てしまいました.
(略)
________________________________________________________________________________________________________________________________________________________
Errors << seed_r7_gazebo:make /home/[PC名]/catkin_ws/logs/seed_r7_gazebo/build.make.038.log
In file included from /usr/lib/x86_64-linux-gnu/pkgconfig/../../../include/gazebo-11/gazebo/common/common.hh:8,
from /home/[PC名]/catkin_ws/src/seed-r7-for-ros-noetic/seed_r7_gazebo/src/gazebo_ros_planar_move.h:37,
from /home/[PC名]/catkin_ws/src/seed-r7-for-ros-noetic/seed_r7_gazebo/src/gazebo_ros_planar_move.cpp:29:
/usr/lib/x86_64-linux-gnu/pkgconfig/../../../include/gazebo-11/gazebo/common/Battery.hh:25:10: fatal error: sdf/sdf.hh: そのようなファイルやディレクトリはありません
25 | #include "sdf/sdf.hh"
| ^~~~~~~~~~~~
(略)
sdf/sdf.hh: そのようなファイルやディレクトリはありません というエラーメッセージが出ていました.
環境
- Ubuntu20:04
- ROS1 noetic
- gazebo 11.15.1
今回使用したパッケージはSeed noidというロボットを動かすためのものです
結論
解決方法を知りたい人向けに,先に結論だけ.
エラーが出たパッケージのCMakeLists.txtに以下の文を追加することで解決しました.
find_package(PkgConfig REQUIRED)
pkg_check_modules(SDF REQUIRED sdformat11)
include_directories(${SDF_INCLUDE_DIRS})
追加した位置は以下の通りです.
(略)
find_package(catkin REQUIRED COMPONENTS
gazebo_ros
gazebo_plugins
)
+ find_package(PkgConfig REQUIRED)
+ pkg_check_modules(SDF REQUIRED sdformat11)
+ include_directories(${SDF_INCLUDE_DIRS})
catkin_package()
(略)
解決法
Chat GPTに解決方法を聞いたところ,CMakeに sdformat ライブラリのインクルードパスが正しく設定されていないため,この問題が発生しているとのことなので,CMakeLists.txt にこれを追記することとしました.
まず,そもそもPC内にsdf.hhが存在することを確認するために,端末でloacteコマンドを使用して確認しました.
[PC名]:~$ locate sdf.hh
/usr/include/ignition/sdformat11/sdf/sdf.hh
/usr/include/sdformat-9.10/sdf/sdf.hh
より,PC内に存在することが確認できました.
そこで,find_package(sdformat REQUIRED)を CMakeLists.txt に追記したのですが,うまく行きませんでした.(sdformatConfig.cmakeが見つからないことによるエラーが出てしまいました.)
そこで,pkg-configを使用して追加する方法を利用しました.locateコマンドでsdformat11.pcが存在することを確認し,CMakeLists.txt に pkg_check_modules(SDF REQUIRED sdformat11) を追記したところエラーがでなくなりました.
[PC名]:~$ locate sdformat11.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/sdformat11.pc
おわりに
大した話ではないのですが,ROSの日本語の情報は少ないので,共有することにしました.
しかし,ROS1は2025年内にサポートが終了してしまうので,あまり需要のない話だったかもしれません.
とはいえ,ロボットに組み込まれているシステムである場合,なかなかROS2に乗り換えるのは大変だと思いますので,なんだかんだまだまだROS1を使う人はいるのでしょう (私みたいに) .