ROSベースのシステム構築

目次

  1. 適切な機能分割
  2. pkg / node

適切な機能分割

ROSにより、分散型のロボットシステムを手軽にロボットに導入できるようになりました。さらにロボットを動かすにあたり必要なセンサー処理や計算がライブラリとしてあらかじめ使えるようになっています。

さて、自分のロボットに対してROSを用いてシステムを構築する際に気を付けなければいけないのが、どこまで機能を分割するか、という問題です。
たしかに機能を分割すればするほどそれぞれの開発は楽になります。しかし、分割した機能がそれぞれどのように関係しているのかを考える必要があったり、分割したことによりそれらの機能間通信もROSを介して行われることとなり、ROSの通信を圧迫する恐れがあります。

そのため、ROSを用いたロボットシステムの開発においては適切な機能分割が重要になるのです。

pkg / node

実際には機能分割はpackageとnode単位で行われます。
ROSは機能をnode単位で、そしてnodeの集合をpackageとして管理しています。pkgはそれ単体でほかのロボットに組み込むことが出来るので、再利用可能なコード群をpkgとして分割管理することで後の開発につなげることが出来ます。
また、同じロボットの中でもpkgを分割することで、問題のあるpkgのみをbuildし、テストすることが出来るようになり、デバック速度の向上が見込まれます。
たとえば、サーボの制御用pkgと、ロボット全体の制御用pkgを分けることで、ほかのロボットで同じサーボを使うさ際に制御pkgを再利用することができる、という利点が考えられます。

  • pkg分割の基準
    私がpkg分割の基準としていることは主に2つあります。
    まず、動作する機体です。ほかのロボットで動くコードはpkgを分割すべきでしょうし、PCで動かすコントローラーとロボットの制御、シミュレーション上のロボットをどうさせるコードは分割すべきだと思います。
    次に、アクチュエータと制御です。アクチュエータの制御と、ロボット全体の制御は制御のブロック線図からして異なるものです。場合によては制御周期も違うかもしれません。さらに、アクチュエータの制御pkg、実機の制御pkgとして2種類に分けておくことで同じアクチュエータ、同系統の機種に対しそれぞれ再利用することが出来ます。
    逆に言えば、これ以上の分割は必要ないと考えています。必要以上の分割は作成者に負担がかかってしまうためです。

  • node分割の基準
    あまりに多くのnodeが動いているシステムはよいシステムとは呼べません。nodeとして分割すべきか、ファイル分割にとどめるべきかはしっかり考えてコードをかかなければいけません。
    node分割をすべきなのは、言語が異なるときだと考えています。
    センサーからの複雑な情報を人間が読めるtopicに落とし込んだタイミングであったり、逆に内部で複雑な制御が動いていいるサーボの制御プログラムに対してトルク目標値を送るタイミングなど、急激に言語が変わる場所でnodeを分割したらよいのではないかと考えています。


先頭に戻る

作成者: 丸山響輝 / 23 / HR・レスキュー

最終更新: 2025年 09/12