0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【ROS】fatal error: sdf/sdf.hh: そのようなファイルやディレクトリはありません を解決した話

Posted at

はじめに

現在研究で使用している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を使う人はいるのでしょう (私みたいに)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?