安曇野の森から > ROS(Robot Operating System)を使う > プログラムのビルド・実行・停止

プログラムのビルド・実行・停止

このページではプログラムのビルド、実行、停止の方法を説明します。プログラムの書き方については次ページ以降で説明しています。


ソースファイルの作成

テキストエディタを使ってプログラムのソースファイルを作成し、パッケージディレクトリのsrc/ディレクトリ内に保存します。


CMakeLists.txtファイルの編集

パッケージ作成時にパッケージディレクトリ下にはCMakeLists.txtファイルが作成されます。

このファイルの中には実行形式のファイル名やビルドすべきソース名、ビルドに使用するインクルードファイルやライブラリの場所などビルドに必要な情報が記載されます。

CMakeLists.txtはビルドで使いますのでパッケージ作成後にテキストエディタを使って次のように編集する必要があります。

パッケージ作成直後にはCMakeLists.txtファイルの中に以下のように記述された行があります。



この行に以下のようにビルドに必要なパッケージ名を追加します。
パッケージ作成時にビルドに必要なパッケージを指定してあれば、この部分に指定したパッケージ名が記載されていますので、この作業は必要ありません。



また、CMakeLists.txtファイルには実行ファイル名とビルドに必要なライブラリを指定するために以下の2行を追加します。
CMakeLists.txt内に同じような記述をしてある部分が2ヶ所ありますので、それぞれの行を、その下に追加してください。

1つのパッケージに複数の実行ファイルを作る場合には以下の2行を実行ファイル数分記載します。

add_executableのソースファイル名は実行ファイルを作成するのに必要な全てのソースファイル名を空白で区切って記載します。




package.xmlファイルの編集

CMakeLists.txtファイルと同時にマニュフェストファイルpackage.xmlも作成されます。

ここにはパッケージに関する情報(パッケージの説明や作者等々)が入りますのでパッケージを外部に向けてリリースする際には記載が必要ですが、ビルドには使われませんので、面倒であれば修正する必要はありませんが、以下の2行を入れておくとパッケージ名のチェックくらいはしてくれるようです。 ビルドに必要なパッケージがあれば以下の2行をpackage.xmlファイル内に追加しますが、パッケージを作る際に必要なパッケージ(例えばroscpp等)を指定してあれば追加する必要はありません。



ビルド

ワークスペースディレクトリへ戻って以下のコマンドでパッケージをビルドします。このコマンドでワークスペース内の全てのパッケージがビルドされます。



ワークスペースディレクトリにdevelとbuildディレクトリが作られ、その中にはビルドで作られたファイル(実行ファイルも含む)が格納されます。


プログラムの実行

ビルドでdevelディレクトリ下にセットアップファイルsetup.bashも同時に作成されます。
実行ファイルを実行させる前に、実行させるターミナル内で一度だけ以下のコマンドでセットアップを実行しさせる必要があります。
別のターミナルを開いて実行ファイルを実行させる場合には再度、そのターミナルでセットアップを一度だけ実行してください。



新しいターミナル開く度にセットアップを実行させるのは面倒なので~/.bashrcファイルの最後に以下の一行を追加しておけば、ターミナルを開くだけで自動でセットアップが実行されます。

以下のワークスペース名の部分は自分で作成したディレクトリのフルパスに入れ替えてください。



ROSのプログラムを実行させるにはマスターを起動しておく必要がありますので最初に一度だけ以下のコマンドを実行させます。

これでバックグランドでマスターが動作します。この後、このターミナルは他のプログラムを起動するのに使えますが、ターミナルを閉じるとマスターも終了してしまうので、このターミナルはROSを使い終わるまで閉じないでください。
また、マスター起動のメッセージが出た後、プロンプトが表示されませんので、一度Enterキーを押してプロンプトを表示させてください。



以下のコマンドでビルドしたプログラムを起動します。




プログラムの停止

簡易的にプログラムを終了させるにはプログラムを実行させたターミナルで「Ctrl + C」キーを押します。
通常はあまり問題になりませんが、この方法ではマスターにノードの情報が残ってしまいますのでrosnode listなどのコマンドを実行した際に、まだノードが走っているように見えてしまうという問題があります。
このノードの情報を消すにはronode clearコマンドを実行してください。

正規にプログラムを終了させるには別のターミナルを開いて以下のコマンドを実行します。





inserted by FC2 system