空飛ぶロボットのつくりかた

ロボットをつくるために必要な技術をまとめます。ロボットの未来についても考えたりします。

catkin_make徹底理解

catkinワークスペース

STEP1

  1. ROS_PACKAGE_PATHの確認、設定
  2. $ mkdir ~/test_catkin_ws/src
  3. $ cd ~/test_catkin_ws/src
  4. $ catkin_init_workspace

ここで、~/test_catkin_ws/src にCMakeKist.txtが作成される

STEP2

  1. cd ~/test_catkin_ws
  2. catkin_make

ここで、buildとdevelができる

  • buildとは

    • catkinパッケージを構成するためにCMakeを呼び出し、さまざまな処理を行う場所でビルドスペースと呼ばれる
  • develとは

    • 生成される目的コードをインストールする前に作業を行うスペースであり、開発スペースと呼ばれる

develや/opt/ros/indigoの中に設定ファイル.bashがある

  • /opt/ros/indigo設定読み込み

    • コアパッケージへのパスが反映
  • devel設定読み込み

パッケージ作成

ROSパッケージをビルドするには

  1. CMakeList.txt
  2. package.xml

が必要

$ catkin_create_pkg <package_name> [depend1] [depend2] ...
ex: catkin_create_pkg test_package roscpp rospy std_msgs

こうすることで、依存関係がpackage.xmlに追加される

  • 同じパッケージがある場合は$ROS_PACKAGE_PATHに記載の順番で呼ばれる

コードの変更、修正時

  1. package.xml
  2. CMakeLists.txt

を修正

package.xml

  • 現在のパッケージの名前や、ほかのパッケージとの依存関係、コンパイル時のフラグなどの基本情報が定義

  • 大事なタグ

<build_depend>
現在のパッケージをインストールする前に、先にインストールする必要のあるパッケージの名前を指定する
<run_depend>
現在のパッケージを実行する際に必要とするほかのパッケージの名前や現在のパッケージが依存するランタイムライブラリ名などを指定する
<test_depend>
現在のパッケージの機能テストを行う際に依存するパッケージ名を指定する
<buildtool_depend>
現在のパッケージを構築する際に使用されるシステムツールを指定する
一般的にはcatkin
<export>
現在のパッケージをコンパイルする際に必要となるフラグやヘッダファイル、ライブラリなどのパス情報を指定する

CMakeLists.txt

  • CMakeビルドシステムに使われる設定ファイル
  • このファイルの中にはターゲットを生成する際に必要なツールや関連するライブラリおよび生成方法などを記述する。CMakeでビルドするときに、このファイルを参照してターゲットを生成する

記述する内容

  1. . 関連するほかのcatkinパッケージ名

    ex: find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs)
    
  2. . メッセージ・サービス・アクションジェネレータ

    ex: add_message_files(
        FILE Message1.msg)
    
  3. . メッセージ・サービス・アクションのデータタイプの生成

    ex: generate_message(DEPENDENCIES std_msgs)
    
  4. . パッケージの構築情報

    ex: catkin_package(~)
    
  5. . 構築するターゲットの指定

    ex: add_executable(~)
    
  6. . インストール方法

    ex: install(~)
    
  7. . テスト項目

    ex: catkin_add_gtest(~)
    
  8. . メタパッケージの記述

単一のパッケージのみビルドしたい場合

catkin_make --pkg <package name>

myenigma.hatenablog.com