ROS?
ROSはRobot Operating Systemの略称ですね。Operating Systemというのも一般的なWindowsやLinuxとは違って、ロボットを制御するシステムだと思っていただければ大丈夫だと思います。そのROSはざっくりいうと、
- Plumbing。日本語だと輸送の意味です。複数のプログラムは同時に実行し、各プログラム間でデータをやり取りできる。
- Tools。Robotに使うためのツールが入ってるます。シミュレーター・GUI(Graph User Interface)、可視化、Data Loggingなどです。
- Capabilities。Robotを制御・Planning、Preception(日本語だと視覚ですが、私は外部センサーを取り込むだと、思います。)、Manipulation(操作)などできます。
- Eco System。C++/Python/Java/Matlabなどでプログラム可能です。あとドキュメント・チュートリアルもインタネットからたくさんのっています。そして、Open-sourceです。
- Peer to Peer。ネットワーク上で接続したもの同士が通信し合うのイメージです。つまり違うプログラムでも同じのAPI経由する、です。
ROSには3つの大きなコンセプトに分けてています。
- FileSystem level
- このGroupではROS内部FormatやFolder構造を最低限System動くになるのFileになります。
- Computation Graph leve
- ProcessとSystem間通信のことです。ROSはどうやってSystemをSetupし、Processの処理や複数のPCと通信するなどになります。
- Community level
- 開発者の間でコンセプト・知識・アルゴリズム・コードなどを共有する方法になります。
ちなみに、今回はFileSystem levelについて話しします。
Filesystem
ROSは他のOSと同じくFolderで機能や目的でFilesを分けています。
Packages
ROSのシステムの基本の部品です。1つのPackage内に最低限の構造とFileがあり、これを使ってROSのプログラムを作成します。
このPackagesにはNodes(Process)、Configurationなどのもの入っています。
Packagesに入ってるはものによって違いますが、こんな感じですね。
Package Manifest
Directory内にPackagesの情報が乗っています。中にpackage.xmlというFilesがありライセンスなどの情報があります。
Metapackages
複数のPackageを管理するFolderになります。Packages1…PackagesNって感じですね。
Message(msg)
Process間で情報やり取りのとき情報定義です。ROSのはたくさんの標準Messageがあり、
yourpackages/msg/yourmessage.msg に格納され、simplified message description languageで書かされています。
Services(srv)
各NodeのリクエストやDataのResponseのData構造定義するFilesです。
my_package/srv/MyServiceType.srv に格納されsimplified message description languageで書かされています。
Workspace
基本はWorkspaceというFolderがプロジェクト内のPackages・Source files・コンパイルPackagesが入っています。中にsrc・build・develの3つのSub Folderがあります。
src
Source spaceの中にはPackages,Projectsなどを格納します。中にCMakeLists.txtという大事なFilesがあります。そのCMakeLists.txtがCMakeコマンドでWorkspace構成するときに呼びされます。ちなみに、catkin_init_workspaceを実行すればCMakeLists.txtが生成されます。
build
Build Spaceは CMake and catkinのCaheの情報が入っています。基本触りません。
devel
Development Spaceはコンパイルされたプログラムを保存する場所です。これはインストールなしでプログラムをテストするためです。例えば自分開発した部分をExportし他のチームメンバーに渡ししたりします。
はーい、お疲れ様です。