🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

2153閲覧

ROSチュートリアルのシンプルなPub & Sub通信でのビルドエラーの解消方法についての助言をお願いします。

ayagin

総合スコア0

CMake

CMakeはクロスプラットフォームで作動するオープンソースのビルドシステムです。コマンドライン又は組み込まれた開発環境で使うことができる元のmakefileとプロジェクトファイルを生成します。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/03/24 07:56

編集2021/03/24 08:52

前提・実現したいこと

ROSチュートリアルのシンプルな配信者(Publisher)と購読者(Subscriber)を書く(C++)とほぼ同等の内容をROS講座03 Pub & Sub 通信https://qiita.com/srs/items/26ca826802d07a9e3d4e
を参考に行いたいと思っています。

パブリッシャとサブスクライバのノードを実装し、通信を行うという演習をしています。
そこで。ビルドが通らない状況にあります。

Publisher,Subscriber,CmakeListの設定は参考サイトのサンプルプログラムをそのまま使用しています。

ワークスペース catkin_ws
catkin_wsの直下 build, devel, src, .catkin_woekspace.CATKIN_WORKSPACE
srcの直下 basic_lecture, CMakeLists.txt
basic_lectureの直下 include, src, CMakeLists.txt, package.xml
srcの直下 basic_simple_listener.cpp, basic_simple_talker.cpp

発生している問題・エラーメッセージ

ビルドを通すと、以下のような画面になります。

CMake Error at basic_lecture/CMakeLists.txt:20 (add_executable): Cannot find source file: src/basic_simple_talker.cpp Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .ispc CMake Error at basic_lecture/CMakeLists.txt:25 (add_executable): Cannot find source file: src/basic_simple_listener.cpp Tried extensions .c .C .c++ .cc .cpp .cxx .cu .m .M .mm .h .hh .h++ .hm .hpp .hxx .in .txx .f .F .for .f77 .f90 .f95 .f03 .ispc CMake Error at basic_lecture/CMakeLists.txt:20 (add_executable): No SOURCES given to target: basic_simple_talker CMake Error at basic_lecture/CMakeLists.txt:25 (add_executable): No SOURCES given to target: basic_simple_listener CMake Generate step failed. Build files cannot be regenerated correctly. make: *** [Makefile:339: cmake_check_build_system] Error 1 Invoking "make cmake_check_build_system" failed

該当のソースコード(basic_lectureの直下CMakeLists.txt,basic_simple_listener.cpp, basic_simple_talker.cpp)

basic_lectureの直下CMakeLists.txt

cmake_minimum_required(VERSION 3.0.2) project(basic_lecture) find_package(catkin REQUIRED COMPONENTS roscpp std_msgs ) #catkin_package( #INCLUDE_DIRS include #LIBRARIES basic_lecture #CATKIN_DEPENDS roscpp std_msgs #DEPENDS system_lib #) include_directories( ${catkin_INCLUDE_DIRS} ) add_executable(basic_simple_talker src/basic_simple_talker.cpp) target_link_libraries(basic_simple_talker ${catkin_LIBRARIES} ) add_executable(basic_simple_listener src/basic_simple_listener.cpp) target_link_libraries(basic_simple_listener ${catkin_LIBRARIES} )

basic_simple_listener.cpp

c++

1#include <ros/ros.h> 2#include <std_msgs/String.h> 3 4void chatterCallback(const std_msgs::String & msg) { 5 ROS_INFO("subscribe: %s",msg.data.c_str()); 6} 7 8int main(int argc, char** argv) { 9 ros::init(argc, argv, "basic_simple_listener"); 10 ros::NodeHandle nh; 11 ros::Subscriber sub = nh.subscribe("chatter",10,chatterCallback); 12 13 ros::spin(); 14 return 0; 15}

basic_simple_talker.cpp

c++

1#include <ros/ros.h> 2#include <std_msgs/String.h> 3 4int main(int argc,char** argv) { 5 ros::init(argc, argv, "basic_simple_talker"); 6 ros::NodeHandle nh; 7 ros::Publisher chatter_pub = nh.advertise < std_msgs::String >("chatter",10); 8 ros::Rate loop_rate(10); 9 10 while (ros::ok()) { 11 std_msgs::String msg; 12 msg.data = "hello world!"; 13 ROS_INFO("publish: %s", msg.data.c_str()); 14 chatter_pub.publish(msg); 15 16 ros::spinOnce(); 17 loop_rate.sleep(); 18 } 19 return 0; 20}

試したこと

basic_simple_listener.cpp, basic_simple_talker.cppの位置がおかしいのかなと移動させてビルドしてみたり、basic_lectureの直下CMakeLists.txtのadd_executable(basic_simple_talker src/basic_simple_talker.cpp)
add_executable(basic_simple_listener src/basic_simple_listener.cpp)
のソース名が間違っているのかと変更してビルドしてみましたが通りませんでした。

basic_lecture/src/の中身を確認してみました。

:~/catkin_ws/src/basic_lecture/src$ ls basic_simple_listener.cpp basic_simple_talker.cpp

上記よりcppファイルは存在しているはずですが Cannot find source fileと表示されてしまいます。

補足情報(FW/ツールのバージョンなど)

環境は
Windows10
Ubuntu 20.04.2.0 LTS
ROS noetic
です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

これまでPC内のUbuntuアプリでROS noeticのインストール→チュートリアルの学習開始していたが、
Oracle VM VirtualBoxでUbuntu 20.04LTS用仮想マシンを作成し,仮想マシンのターミナルで改めてROS noetic のインストール→本プログラミングを行った際、無事Pub&Sub通信に成功しました。
まとめとしてはwindowsでLinux開発を行う場合、Ubuntuアプリではなく、仮想マシンを作成し、そこでコーディングを行っていかなければならないという。環境面での初歩的なミスであったと考えます。
今回初めてteratailで質問させていただきました。ROSの勉強は始めたばかりで分からないことだらけなので今回を機にまたわからないことがあれば質問させていただこうと思います。

追記:windows向けアプリ版Ubuntu 20.04LTS ですが、再インストールしクリーンな状態でROS noetic のインストールとセットアップをして再び試した結果上手くいきました。原因は未だ不明です。

投稿2021/03/24 13:28

編集2021/03/28 13:42
ayagin

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問