Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

ROS ros/ros.hが見つからない問題

解決したいこと

ROSを開発し始めた学生です。
以前に作ったパッケージではビルドは通るのですが、
最近に作ったパッケージをビルドしようとすると、毎回同じエラーが発生します。

解決方法を教えていただけると助かります。

発生しているエラー

Errors     << rospackage_test:make /home/takeuchi/catkin_ws/logs/rospackage_test/build.make.000.log
/home/takeuchi/catkin_ws/src/rospackage_test/src/basic_simple_listener.cpp:1:10: fatal error: ros/ros.h: そのようなファイルやディレクトリはありません
    1 | #include <ros/ros.h>
      |          ^~~~~~~~~~~
/home/takeuchi/catkin_ws/src/rospackage_test/src/basic_simple_talker.cpp:1:10: fatal error: ros/ros.h: そのようなファイルやディレクトリはありません
    1 | #include <ros/ros.h>
      |          ^~~~~~~~~~~
compilation terminated.
compilation terminated.
make[2]: *** [CMakeFiles/basic_simple_talker.dir/build.make:63: CMakeFiles/basic_simple_talker.dir/src/basic_simple_talker.cpp.o] エラー 1
make[2]: *** [CMakeFiles/basic_simple_listener.dir/build.make:63: CMakeFiles/basic_simple_listener.dir/src/basic_simple_listener.cpp.o] エラー 1
make[1]: *** [CMakeFiles/Makefile2:305: CMakeFiles/basic_simple_listener.dir/all] エラー 2
make[1]: *** 未完了のジョブを待っています....
make[1]: *** [CMakeFiles/Makefile2:251: CMakeFiles/basic_simple_talker.dir/all] エラー 2
make: *** [Makefile:141: all] エラー 2
cd /home/takeuchi/catkin_ws/build/rospackage_test; catkin build --get-env rospackage_test | catkin env -si  /usr/bin/make --jobserver-auth=3,4; cd -

.............................................................................................
Failed     << rospackage_test:make           [ Exited with code 2 ]                          
Failed    <<< rospackage_test                [ 0.9 seconds ]                                 
[build] Summary: 2 of 3 packages succeeded.                                                  
[build]   Ignored:   16 packages were skipped or are skiplisted.                             
[build]   Warnings:  None.                                                                   
[build]   Abandoned: None.                                                                   
[build]   Failed:    1 packages failed.                                                      
[build] Runtime: 1.3 seconds total.                                                          

該当するソースコード

basic_simple_listener.cpp
#include <ros/ros.h>
#include <std_msgs/String.h>

void chatterCallback(const std_msgs::String& msg)
{
    ROS_INFO("subscribe: %s", msg.data.c_str());
}

int main(int argc, char** argv)
{
    ros::init(argc, argv, "basic_simple_listener");
    ros::NodeHandle nh;
    ros::Subscriber sub = nh.subscribe("chatter", 10, chatterCallback);

    ros::spin();
    return 0;
}
basic_simple_talker.cpp
#include <ros/ros.h>
#include <std_msgs/String.h>

int main(int argc, char** argv)
{
        ros::init(argc, argv, "basic_simple_talker");
        ros::NodeHandle nh;
        ros::Publisher chatter_pub = nh.advertise<std_msgs::String>("chatter", 10);
        ros::Rate loop_rate(10);

    while (ros::ok())
    {
        std_msgs::String msg;
        msg.data = "hello world!";
        ROS_INFO("publish: %s", msg.data.c_str());
        chatter_pub.publish(msg);

        ros::spinOnce();
        loop_rate.sleep();
    }
    return 0;
}

CMakeLists

CMakeLists.txt
cmake_minimum_required(VERSION 3.0.2)
project(rospackage_test)

find_package(catkin REQUIRED COMPONENTS
  roscpp
  std_msgs
)

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES rospackage_test
#  CATKIN_DEPENDS roscpp std_msgs
#  DEPENDS system_lib
)

include_directories(
# include
  ${catkin_INCLUDE_DIRS}
)


target_link_libraries(basic_simple_talker
  ${catkin_LIBRARIES}
)
target_link_libraries(basic_simple_listener
  ${catkin_LIBRARIES}
)

自分で試したこと

・include_directoriesに直接rosディレクトリを指定したが失敗。
・以前作成したビルドが通るパッケージをコピーし、ビルドを行ったが失敗。

備考

VSCode側ではパスは通してあり、エラーは出ていません。
記載したコードはQiitay上にあるROS講座03から使用していますが、その他のプログラムでもこのエラーが必ず発生します。

環境
ROS noeticを使用。

OS: Ubuntu 20.04 64bit

追記

ROSを再インストールしたが失敗(2023/02/18)

${catkin_INCLUDE_DIRS}${catkin_LIBRARIS}の中身を確認。中身は空であったので、設定する方法をご存知の方がいらっしゃいましたら教えていただけると助かります。(2023/02/21)

0

2Answer

エラーの直接的な原因は、ros/ros.hが本当にないか、includeパスが通ってないか、いずれかかと思います。

ちなみに、CMakeLists#でコメントアウトしている箇所がありますが、意図的ですか?

1Like

Comments

  1. ご回答ありがとうございます。
    ros.hは確認したところちゃんとあったので、
    多分後者かと思います。ros.hについて、ROS上ではどのようにパスを通せばよいですか?(${catkin_INCLUDE_DIRS}は関係ないのでしょうか。)
    コメントアウトの箇所はデフォルトで全てコメントアウトされていたので、一応そのまま載せました。特に意図はありません。
  2. Makefileに細工してincludeパスを@echoなりで出力してやるといいかも。
    (もしMakefileを毎回生成しないなら)
  3. makefile の使い方がわからなかったため、Cmakelistsにて file(WRITE ...)を用いて出力してみたところ、問題のあるプロジェクトでは${catkin_INCLUDE_DIRS}や${catkin_LIBRARIES}が空でした。これらのパスは他のビルド可能なプロジェクトから取得することはできたのですが、デフォルトでこのパスを設定するにはどうしたら良いでしょうか。(直接指定しても読み込まれませんでした。)
  4. どうやらcatkinのファイルが悪さをしているようでしたので,catkin clenan を行ったところ正常にビルドすることができました。親身にアドバイスをしていただきありがとうございました。

Your answer might help someone💌