こんにちは!長谷川です。
前回はROSのインストールについて説明しましたが、今回はROSの環境のセットアップとROSのファイルシステムについて説明したいと思います。
今回は、主に英語版Wikiのチュートリアルに従って進みます。日本語版Wikiのチュートリアルは情報が古いですが、英語版がわかりにくい場合、適宜参照すると理解の助けになると思います。
環境の確認
まず、端末(Terminal)を開き、
export | grep ROS
と入力します。すると、以下のように表示されました。
これはROSの環境変数を表示させる機能のようで、表示されたということはセットアップがきちんと行われたということみたいです。もしも何も表示されない場合は、ROSの環境変数が宣言されていないということで、
source /opt/ros/indigo/setup.bash
と打ち込まねばなりません。前回「~/.bashrc」を編集したのは、これを毎回打ち込む手間を省くためのものだったみたいです。
ワークスペースの作成
次に、ROSのワークスペースを作成します。
今回使うROSはROS Indigo Iglooなので、ROS Groovyより後に出たバージョンです。よって、catkinというビルドシステムを採用しているみたいです。catkinの方の説明に従って進めていきます。以下のように入力していってください。
$ mkdir -p ~/catkin_ws/src $ cd ~/catkin_ws/src $ catkin_init_workspace
ここで、「$」というのは、コマンドプロンプトのことです。つまり、「$ 」より右の一文を打ち込んだらEnterを押すことを繰り返してください。次に、
cd ~/catkin_ws/
と入力し、作ったワークスペースに移動してから、
catkin_make
と打ち込みます。
Enterを押すと、処理が実行されます。これは、ワークスペースをビルドしろという命令のようです。最後に、
source devel/setup.bash
と入力します。
最後の命令は、ビルドの結果生まれたsetupファイルを読み込むためのものです。この命令により、環境がセットアップされます。逆に言えば、この命令をしておかないと、ROSの機能の一部が使えません。端末(Terminal)を開き直した際は、
$ cd ~/catkin_ws/ $ source devel/setup.bash
という処理をしておかねばならないことがあります。毎回これを打ち込む手間を省きたい場合は、前回と同じように、
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
と入力して、「~/.bashrc」を編集しておきましょう。
ROSのファイルシステムについて
ROSのソフトウェアは、パッケージという構成単位から作られています。パッケージは結構自由になんでも入れられるものらしく、ライブラリやツール、実行ファイルなどを入れることができます。パッケージを入れられる、メタパッケージというものもあります。そして、package.xmlという名前がついたマニフェストというものにパッケージの説明が書かれています。この説明の中でパッケージ間の依存関係も宣言されています。
ROSのソフトウェアにおいては、大量のパッケージが複雑に絡み合うことになります。そのパッケージごとの作業の際は、端末(Terminal)の階層をいちいち移動しないといけません。よく使う命令は「cd」だと思いますが、これの後ろにパスを入れるのがメンドクサイ。この他にも、初期設定されてるコマンドだけでは、色々とやりづらいことが出てくるみたいです。そこで、ROSにはファイルシステムに関するツールが色々用意されています。以下では、それらを実際に使ってみましょう。
まずは、「rospack」という命令を使ってみましょう。
端末(Terminal)に、
rospack find roscpp
と入力すると、「/opt/ros/indigo/share/roscpp」と表示されます。
「rospack」に「find」というオプションをつけると、パッケージのパスを表示してくれる機能になるみたいです。あのパッケージどこにあったっけ?ってなっても、いちいちパソコン全体の検索をすることなく、ROSのファイルシステム内部に絞って検索してくれるので、便利ですね。
次に、「roscd」という命令を使ってみましょう。
$ roscd roscpp $ pwd
と入力します。
roscdは、指定したパッケージのディレクトリへ移動できる命令です。何がいいかというと、パッケージを名前で指定できるのがすばらしい。「pwd」というのはUnixのコマンドで、現在のディレクトリの場所を表示させる命令なので、「/opt/ros/indigo/share/roscpp」と表示されるということは、きちんと目標のroscppディレクトリに移動出来ていることになります。
なお、roscdもrospackも、$ROS_PACKAGE_PATHの中のディレクトリ以下にあるROSのパッケージのみを探し出します。ここに何が登録されてるのか知りたいときは、
echo $ROS_PACKAGE_PATH
と入力します。
「/home/turtlebot/catkin_ws/src:/opt/ros/indigo/share:/opt/ros/indigo/stacks」と表示されました。「:」は区切り文字です。つまり、「/home/turtlebot/catkin_ws/src」と「/opt/ros/indigo/share」と「/opt/ros/indigo/stacks」が登録されているということになります。このディレクトリ以下にあるものなら、名前だけで検索してくれるようですね。
roscdのお話に戻りましょう。roscdはパッケージのサブディレクトリ(パッケージに含まれているディレクトリ)に移動することもできます。
$ roscd roscpp/cmake $ pwd
と入力してみましょう。「/opt/ros/indigo/share/roscpp/cmake」と出てくるので、roscppのサブディレクトリcmakeに移動できたことがわかります。
ちなみに、roscdを引数なしで実行すると、$ROS_WORKSPACEに登録されているディレクトリに移動します。
ここでは、「/home/turtlebot/catkin_ws/devel」に移動したことがわかります。
また、
roscd log
と入力するとROS のログファイル保管フォルダへ移動しますが、まだROSプログラムを一つも実行していないので、ここには何もないみたいです。
次に、「rosls」という命令を使ってみましょう。
rosls roscpp_tutorials
と入力すると、「cmake package.xml srv」と表示されました。roslsという命令は、Unixコマンドのlsと同じように、指定したディレクトリのファイルの一覧を表示させるものです。lsと違うところは、後ろにパスではなく、ファイル名をそのまま入れられることです。今回は、roscpp_tutorialsというパッケージの中に含まれるファイルの一覧を表示させたということですね。
最後に、タブ補完という機能をご紹介します。
タブ補完とは、パッケージ名を書きかけの状態でTabを押すと、自動で可能な限り不足分を補ってくれる機能です。その書き出しから始まるパッケージがいくつかある場合は、それらに共通する部分だけを埋めます。その場合はもう一度Tabを押すと、該当するパッケージの一覧を表示させることもできるので、その一覧を参照して不足分を埋めることが可能です。
以上、ROSの環境のセットアップとROSのファイルシステムについて説明しました。
次回は、ROSのパッケージの作成とビルドについて説明したいと思います。