Nobu19800 / RobotArmController

GNU Lesser General Public License v3.0
0 stars 0 forks source link

fatal error: ManipulatorCommonInterface_DataTypesSkel.h: No such file or directory #1

Open shu11 opened 7 years ago

shu11 commented 7 years ago

ビルド時に、以下3つのヘッダが不足しておりコンパイルが通りません。

こちら、他のリポジトリなどから取得してくるべきものでしょうか? もし不足ということであれば、ご提供頂ければと思います。

よろしくお願いいたします。

# sh BuildRelease.sh
[  3%] Building CXX object src/CMakeFiles/ArmControllerComp.dir/ArmControllerComp.cpp.o
In file included from /root/tmpfiles/OpenRTM/simulator2/BuildRobotArmController/RTCs/RobotArmController/include/ArmController/ArmController.h:24:0,
                 from /root/tmpfiles/OpenRTM/simulator2/BuildRobotArmController/RTCs/RobotArmController/src/ArmControllerComp.cpp:14:

/root/tmpfiles/OpenRTM/simulator2/BuildRobotArmController/RTCs/RobotArmController/include/ArmController/ManipulatorCommonInterface_CommonSVC_impl.h:8:54: fatal error:
 ManipulatorCommonInterface_DataTypesSkel.h: No such file or directory
compilation terminated.
make[2]: *** [src/CMakeFiles/ArmControllerComp.dir/ArmControllerComp.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/ArmControllerComp.dir/all] Error 2
make: *** [all] Error 2
Nobu19800 commented 7 years ago

それらのファイルについてはビルド時に自動的に生成されるはずです。 最初にビルドした時に以下のメッセージが表示されて、idlという名前のフォルダにファイルが生成されているはずなのですが、ファイルは生成されていますでしょうか?

[  3%] Compiling /**/**/RobotArmController/idl/ManipulatorCommonInterface_MiddleLevel.idl
"ManipulatorCommonInterface_MiddleLevelSkel.h" was generated.
"ManipulatorCommonInterface_MiddleLevelSkel.cpp" was generated.
"ManipulatorCommonInterface_MiddleLevelStub.h" was generated.
"ManipulatorCommonInterface_MiddleLevelStub.cpp" was generated.
shu11 commented 7 years ago

リポジトリ(zip版)をunzipし、初回ビルドし直しました。 以下のidlディレクトリを見に行きましたが、ヘッダの生成はされてなかったようです。

# cd /path/to/RobotArmSystem-master
# ls Components/RobotArmController/idl
BasicDataType.idl    CMakeLists.txt                         ManipulatorCommonInterface_DataTypes.idl
CMakeFiles           Makefile                               ManipulatorCommonInterface_MiddleLevel.idl

Edison側でcmakeしておりますが、環境上問題がございますでしょうか?

# uname -a
Linux ubilinux 3.10.17-yocto-standard-r2 #7 SMP PREEMPT Thu Feb 26 09:57:06 UTC 2015 i686 GNU/Linux
# cmake -version
cmake version 3.7.2

CMake suite maintained and supported by Kitware (kitware.com/cmake).

以上、よろしくお願いいたします。

shu11 commented 7 years ago

念のため、ビルドログを添付いたします。 サポート頂き、ありがとうございます。

# sh build.sh
--2017-03-06 04:32:06--  http://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz
Resolving bitbucket.org (bitbucket.org)... 104.192.143.3, 104.192.143.2, 104.192.143.1, ...
Connecting to bitbucket.org (bitbucket.org)|104.192.143.3|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: https://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz [following]
--2017-03-06 04:32:06--  https://bitbucket.org/eigen/eigen/get/3.2.4.tar.gz
Connecting to bitbucket.org (bitbucket.org)|104.192.143.3|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1481562 (1.4M) [application/x-tar-gz]
Saving to: `3.2.4.tar.gz'

100%[====================================================================>] 1,481,562    317K/s   in 5.1s

2017-03-06 04:32:17 (283 KB/s) - `3.2.4.tar.gz' saved [1481562/1481562]

-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- OpenRTMConfig.cmake found.
-- Configrued by configuration mode.
-- OpenRTM-aist configuration done
-- OpenRTM configuration Found
-- Configuring done
-- Generating done
-- Build files have been written to: /root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison
cp: `./RTC.xml' and `RTC.xml' are the same file
-- The C compiler identification is GNU 4.7.2
-- The CXX compiler identification is GNU 4.7.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- OpenRTMConfig.cmake found.
-- Configrued by configuration mode.
-- OpenRTM-aist configuration done
-- OpenRTM configuration Found
-- Configuring done
-- Generating done
-- Build files have been written to: /root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/RobotArmController
cp: `./RTC.xml' and `RTC.xml' are the same file
Scanning dependencies of target AdafruitPWMServoDriverEdisonComp
[ 11%] Building CXX object src/CMakeFiles/AdafruitPWMServoDriverEdisonComp.dir/AdafruitPWMServoDriverEdisonComp.cpp.o
[ 22%] Building CXX object src/CMakeFiles/AdafruitPWMServoDriverEdisonComp.dir/AdafruitPWMServoDriverEdison.cpp.o
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp: In member function ‘virtual RTC::ReturnCode_t AdafruitPWMServoDriverEdison::onInitialize()’:
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp:103:22: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp: In member function ‘virtual RTC::ReturnCode_t AdafruitPWMServoDriverEdison::onExecute(RTC::UniqueId)’:
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp:177:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
[ 33%] Building CXX object src/CMakeFiles/AdafruitPWMServoDriverEdisonComp.dir/PCA9685.cpp.o
[ 44%] Building CXX object src/CMakeFiles/AdafruitPWMServoDriverEdisonComp.dir/__/i2c_smf/i2c_smf.cpp.o
[ 55%] Linking CXX executable AdafruitPWMServoDriverEdisonComp
[ 55%] Built target AdafruitPWMServoDriverEdisonComp
Scanning dependencies of target ALL_IDL_TGT
[ 55%] Built target ALL_IDL_TGT
Scanning dependencies of target AdafruitPWMServoDriverEdison
[ 66%] Building CXX object src/CMakeFiles/AdafruitPWMServoDriverEdison.dir/AdafruitPWMServoDriverEdison.cpp.o
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp: In member function ‘virtual RTC::ReturnCode_t AdafruitPWMServoDriverEdison::onInitialize()’:
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp:103:22: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp: In member function ‘virtual RTC::ReturnCode_t AdafruitPWMServoDriverEdison::onExecute(RTC::UniqueId)’:
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/Adafruit_PWMServoDriver_Edison/src/AdafruitPWMServoDriverEdison.cpp:177:35: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
[ 77%] Building CXX object src/CMakeFiles/AdafruitPWMServoDriverEdison.dir/PCA9685.cpp.o
[ 88%] Building CXX object src/CMakeFiles/AdafruitPWMServoDriverEdison.dir/__/i2c_smf/i2c_smf.cpp.o
[100%] Linking CXX shared library AdafruitPWMServoDriverEdison.so
[100%] Built target AdafruitPWMServoDriverEdison
Scanning dependencies of target ArmControllerComp
[  3%] Building CXX object src/CMakeFiles/ArmControllerComp.dir/ArmControllerComp.cpp.o
In file included from /root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/RobotArmController/include/ArmController/ArmController.h:24:0,
                 from /root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/RobotArmController/src/ArmControllerComp.cpp:14:
/root/tmpfiles/OpenRTM/simulator/RobotArmSystem-master/Components/RobotArmController/include/ArmController/ManipulatorCommonInterface_CommonSVC_impl.h:9:54: fatal error: ManipulatorCommonInterface_DataTypesSkel.h: No such file or directory
compilation terminated.
make[2]: *** [src/CMakeFiles/ArmControllerComp.dir/ArmControllerComp.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/ArmControllerComp.dir/all] Error 2
make: *** [all] Error 2
Nobu19800 commented 7 years ago

おそらくですが、CMake 3.7.2で発生する問題のようです。 解決策があるかについて調べますので、少々お時間ください。

shu11 commented 7 years ago

おそらくですが、CMake 3.7.2で発生する問題のようです。 解決策があるかについて調べますので、少々お時間ください。

お忙しいところ、ご検討ありがとうございます。 edison側ビルドでサポートされているcmakeのバージョンなどお教え頂ければ、 こちらでも再現確認してみますので、どうぞよろしくお願いします。

Nobu19800 commented 7 years ago

この問題はCMake 3.7,2を使用すると、IDLファイル(ManipulatorCommonInterface_MiddleLevel.idl等)のコンパイルを行って~Skel.hや~Stub.hを生成する処理がArmControllerComp.cpp等のコンパイルの後に実行されるために発生しているようです。 本来であればArmControllerComp.cppのコンパイルの前にIDLコンパイルを実行してファイルが生成されるためインクルードファイルのエラーは発生しません。

根本的な解決にはなっていないのですが、スクリプトファイルにIDLコンパイルを実行するコマンドを追加したので、ビルドできるようにはなったはずです。

#!/bin/sh
cd `dirname $0`
cmake --build . --target ALL_IDL_TGT //追加
cmake --build . --config Release
Nobu19800 commented 7 years ago

問題の原因が分かったのでお知らせします。 RTC Builderで生成するコードに問題がありました。 サービスポート、独自のデータ型でIDLコンパイルを要するRTCであれば発生する可能性はあります。

RTC Builderで生成したコードのCMakeLists.txtには以下のターゲットが定義されています。

  1. ArmController(動的ライブラリ生成)
  2. ArmControllerComp(実行ファイル生成)
  3. ALL_IDL_TGT(IDLコンパイル)

本来であれば③のターゲットが②より先にビルドされなければならないのですが、②の依存関係に③が設定されていないため、環境によっては②が先にビルドされることがあるようです。

他のCMakeのバージョンではビルドが成功することもあるのですが、これは運良く③が最初に実行されているためだと思います。 ちなみに①には③が依存関係に設定されているため、①のビルドが先に実行されても問題はありません。

shu11 commented 7 years ago

ご教授頂きありがとうございます。

cmake --build . --target ALL_IDL_TGT //追加

こちらを BuildRelease.sh へ追加したところうまくビルド出来るようになりました! お忙しいところご対応頂きまして誠にありがとうございました。

あと、もう一つ質問なのですが、 RobotArmSystem こちらのプロジェクト経由で現在PC(Win7)側のシミュレータとedisonをつなごうとしております。 ※具体的なセットアップ手順は、 こちらの記事を参考にさせて頂いております。

上記修正を施し、build.sh → start.sh を実行してRTCを起動させたいのですが、 以下エラーが出ております。

# sh build.sh
# sh start.sh
setOnSetConfigurationSet function is obsolete.
Use addConfigurationSetListener instead.
setOnAddConfigurationSet function is obsolete.
Use addConfigurationSetListener instead.
/usr/local/bin/rtcomp: No such object: /localhost/AdafruitPWMServoDriverEdison0.rtc
rtresurrect: Required action failed: Required component missing: /localhost/AdafruitPWMServoDriverEdison0.rtc
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/OpenRTM_aist/CorbaNaming.py", line 157, in isAlive
    if self._rootContext._non_existent():
  File "/usr/local/lib/python2.7/dist-packages/omniORB/CORBA.py", line 561, in _non_existent
    return self._obj.nonExistent()
BAD_INV_ORDER: CORBA.BAD_INV_ORDER(omniORB.BAD_INV_ORDER_ORBHasShutdown, CORBA.COMPLETED_NO)

こちら、このissueで議論するのは適切では無いかもしれませんが、もし対応方法をご存じであればご教授ください。まだ実際には、ロボットアームとedisonは接続しておらず、あくまでもWin7(シミュレータ)とedisonとの接続という環境です。

以上、よろしくお願いいたします。

Nobu19800 commented 7 years ago

おそらくAdafruitPWMServoDriverEdison0.rtcという名前のRTCが起動できていません。 必要な共有ライブラリのあるディレクトリにパスが設定されていない可能性があります。

start.shを実行する前に以下のコマンドを実行して確認していただけないでしょうか?

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib/i386-linux-gnu

shu11 commented 7 years ago

ご連絡ありがとうございます。 ライブラリにパスを通したところ、エラーが出なくなりました。

export LD_LIBRARY_PATH=/usr/local/lib/i386-linux-gnu/:/usr/local/components/lib/:$LD_LIBRARY_PATH

※念のため、AdafruitPWMServoDriverEdison.so、ArmController.soなどが格納されているディレクトリにもパスを通しています。

その後start.shを実行したときのメッセージを以下に記載致します。 まだ、以下のようにまだエラーが残っているようです。

# export LD_LIBRARY_PATH=/usr/local/lib/i386-linux-gnu/:/usr/local/components/lib/:$LD_LIBRARY_PATH
# sh start.sh
setOnSetConfigurationSet function is obsolete.
Use addConfigurationSetListener instead.
setOnAddConfigurationSet function is obsolete.
Use addConfigurationSetListener instead.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/OpenRTM_aist/CorbaNaming.py", line 157, in isAlive
    if self._rootContext._non_existent():
  File "/usr/local/lib/python2.7/dist-packages/omniORB/CORBA.py", line 561, in _non_existent
    return self._obj.nonExistent()
BAD_INV_ORDER: CORBA.BAD_INV_ORDER(omniORB.BAD_INV_ORDER_ORBHasShutdown, CORBA.COMPLETED_NO)
Nobu19800 commented 7 years ago

おそらくですが、そのエラーは表示されても動作には関係なかったと思います。 OpenRTM-aistでRTCを起動する方法は2種類あります。

  1. 個別の実行ファイルから起動する
  2. rtcdで動的ライブラリ(.dll or .so)を読み込んで起動する

RobotArmSystemでは②で起動しています。 起動するためのスクリプトファイル等はツールで自動生成したもので、C++版とPython版のrtcdを起動します。

ただPython版のrtcdは起動するRTCが無いので、しばらくすると勝手に終了します。 OpenRTM-aist-Pythonの1.1.0をインストールしていると思うのですが、1.1.0の終了処理の不具合でエラーが発生しているのだと思います。PythonのRTCは使用していないので動作には問題ありません。

RobotArmSystem/projects/RobotArmControllerstart.shから以下の行を削除してエラーが消えるか確認していただけますでしょうか?

python ../Manager/Python/rtcd_p.py -f ../projects/RobotArmController/Python/rtc.conf& ←消すかコメントアウト
shu11 commented 7 years ago

ご連絡ありがとうございます。

RobotArmSystem/projects/RobotArmControllerのstart.shから以下の行を削除してエラーが消えるか確認していただけますでしょうか?

ご指摘の通り、上記対応で無事エラーが消えました! なるほど、使ってないrtcdから出ていたエラーだったのですね。 確かに、RobotArmSystemではC++実装なので使ってないですね。

初心者にも関わらず細かくアドバイス頂きまして誠にありがとうございました! 改めて感謝申し上げます。