Skip to content

トラブルシューティング#

このページでは、今回の演習やROSを使っている際によくあるエラー等についてまとめておきます.

roscoreが立ち上がらない#

roscoreを立ち上げたいマシンのターミナルで

echo $ROS_MASTER_URI
echo $ROS_HOSTNAME

を実行してみてください、IPアドレスがlocalhost以外になってはいませんでしょうか? この2つがlocalhost以外になる際にはroscoreがそのマシン以外で実行されている設定になっています. 以下のコマンドを実行し、localhostでroscoreを動かす設定に変更してください.

export ROS_MASTER_URI=http://localhost:11311

その後、ROS_HOSTNAMEを適切な値(localhostかifconfigコマンド等で確認したroscoreを実行したいマシンのIPアドレス)に設定し、

export ROS_HOSTNAME=localhost

roscoreに接続できない#

roscoreに接続したいマシンのターミナルで

echo $ROS_MASTER_URI
echo $ROS_HOSTNAME

を実行し、上記の環境変数が適切に設定されているか確認してください.

環境変数設定に問題がない場合は、

  1. まずroscoreを立ち上げたいPC(今回の実習ではリモートPC)でroscoreあるいはroslaunchコマンドを実行
  2. 次に、リモートPCに存在するroscoreに接続してノードを動かすマシン(今回の実習ではSBC)でroslaunchコマンドを実行

roslaunchできない#

ノードが見つからない#

roslaunchコマンドを実行した時、

ERROR: cannot launch node of type [gmapping/slam_gmapping]: gmapping
ROS path [0]=/opt/ros/melodic/share/ros
ROS path [1]=/opt/ros/melodic/share

上記のような出力が得られている場合、gmappingというパッケージが入っていないというエラーになります. こういった場合、そのパッケージをlocal環境に存在するworkspaceにcloneしてビルドするか、apt経由でそのパッケージをインストールする必要があります.

何もterminalにログが出力されず、立ち上がらない#

roscore接続に失敗している可能性があります. roscoreが立ち上がらないroscoreに接続できないの記載を確認し、roscoreの挙動を確認してください.

catkin_make時にエラーになる#

find_pacakgeに失敗する#

以下のような出力が得られる場合、複数の原因が考えられます.

CMake Error at /opt/ros/indigo/share/catkin/cmake/catkinConfig.cmake:83 (find_package):
  Could not find a package configuration file provided by "roscpp" with any
  of the following names:

    roscppConfig.cmake
    roscpp-config.cmake
  • 該当パッケージへのパスが通っていない:source /opt/ros/$ROS_DISTRO/setup.bashや、 localに存在するworkspace内部のsetup.bashをsourceコマンドで読み込みパッケージをcatkinビルドシステムが探索できるようにする
  • rosdepの実行を忘れている:rosdepを実行し忘れている場合、依存が入っていない場合があります.workspaceのsrcディレクトリに移動したあと rosdep install -iry --from-paths .を実行することで依存をまとめてインストールすることができます.
  • package.xmlに依存漏れがある:package.xml
  • 何らかの必要なパッケージをいれるステップを飛ばしてしまっている:パッケージによっては手動で依存ライブラリをインストールしておく必要があるものがあります. どうしても原因がわからない場合は、github/gitlabリポジトリを探し、issueを立てるのも良いと思います.

includeに失敗する#

以下のような出力が得られる場合、複数の原因が考えられます.

fatal error: exploration_msgs/ExploreAction.h: No such file or directory
  • CMakeLists.txtのfind_pacakgeコマンドに漏れがある:catkinは依存パッケージに存在するヘッダファイルをincludeしたりすることが可能です、 しかしfind_packageコマンドに記載漏れがあると適切にパスを解決してヘッダーを探しに行くことができません.
  • catkin_init_workspaceを忘れている:catkinは依存を考慮してパッケージをビルドすることができます. しかし、catkin_init_workspaceを忘れていると依存が適切に考慮されないケースがあります.
  • バージョンアップによりヘッダーがなくなっている/ファイル名が変わっている:ROS packageは様々なものが開発されており、今後もエコシステムは拡張され続けています. それに伴い、定期的なバージョンアップが行われているパッケージも少なくありません. そのためパッケージによっては.hファイルを.hppに変更したりしているケースもあり結果として#includeするヘッダの名称を変更しないといけないケースがあります.

undefined referenceエラーが発生#

undefined referenceとは、ヘッダーファイルの探索には成功したが、関数の実装が見当たらずコンパイルエラーになっているということです. そのため以下のような原因が考えられます.

  • CMakeLists.txtのfind_pacakgeコマンドに漏れがある:find_packageコマンドに記載漏れがあると適切にパスを解決して関数の実装を探しにくことができません.
  • target_link_librariesを忘れている:こちらのように${catkin_LIBRARIES}をlink対象として指定しないと関数の実装を探索することができません.

gazeboがErrorを出してしまい、起動しない#

roslaunchやgazeboコマンド経由でgazeboを立ち上げると以下のようなエラーが出るケースがあります.

[Err] [REST.cc:205] Error in REST request

こちらのメッセージは、gazeboの仕様および設定ファイルの記載ミスによります. gazeboは初回起動時に基本アセット(3D Model等)をダウンロードしてきます. その時gazeboのデータをダウンロードしてくるサーバーのURLが~/.ignition/fuel/config.yamlに記載されています.

# The list of servers.
servers:
  -
    name: osrf
    url: https://api.ignitionfuel.org

  # -
    # name: another_server
    # url: https://myserver

# Where are the assets stored in disk.
# cache:
#   path: /tmp/ignition/fuel

おそらく、gazeboをインストールした直後はこのように記載されています. このうちサーバーのURLであるhttps://api.ignitionfuel.orghttps://api.ignitionrobotics.orgに差し替えてください.

# The list of servers.
servers:
  -
    name: osrf
    url: https://api.ignitionrobotics.org

  # -
    # name: another_server
    # url: https://myserver

# Where are the assets stored in disk.
# cache:
#   path: /tmp/ignition/fuel

編集後、

gazebo

コマンドを実行し、gazeboがエラー無く立ち上がることを確認してください. 参考リンク