はじめに
こんにちは、GROOVE X のソフトウェアエンジニアの三平です。この記事では、GROOVE X (以下 GX) におけるロボットのソフトウェア開発の全体像をゆるーく説明します。
「家庭用ロボットを開発しています」と言うと、「ロボットのソフトウェア開発って何するんですか?」とか「制御をやっているんですよね」とか、そういったコメントをもらうことがよくあります。
もちろん制御はロボットのソフトウェア開発の1つのテーマですが、GXのソフトウェアの開発領域はもーっと広いので、その全体像を説明したいと思います。
家庭用ロボットのソフトウェア開発領域
そもそも、ロボットという言葉の定義って結構曖昧ですよね。あるデバイスがオモチャなのか、IoT機器なのか、ロボットなのかは、価格とか、可動部やセンサーの数とか、大きさとかだけで決まっているわけではなさそうです。
音声でコマンドを受け付けて、音声で応答をしたり他のデバイスを制御したりする機器を最近はスマートスピーカーと呼びますが、ロボットはそれよりもリッチな入出力機能を持っているイメージがあります。きっと、センサー、画像、音声、アプリなどの複数の入力デバイスからの入力を受け付けて、動いたり、音を出したり、画面を表示したり、他の機器を制御したりといった、複数の出力を行うことで、周辺の環境とインタラクションをするようなデバイスが、一般的にロボットと呼ばれているのかもしれません。
ということは、ロボットのソフトウェアを作るためには、最低でも以下のような開発領域がありそうです。
- センサーやアクチュエータとの通信・制御
- 画像認識
- 音声認識
- その他センサー(IMUや距離センサ等)の情報処理
- 出力デバイス(モーター、スピーカー、モニター等)の制御
これだけだと、何らかの入力に対して反射的に出力を行うだけのロボットになってしまいそうです。
下手するとロボットではなくオモチャと呼ばれてしまうかもしれません。
するとロボットというのは、もっと高度な処理を行って、知的な振る舞いを行うデバイスのことを指すようです。知的な振る舞いをするロボットを開発するためには、さらに以下のような領域の開発が必要そうです。
- 様々なセンサー情報の統合 (マルチモーダルな情報処理)
- 周辺環境の学習、推定
- 経路計画や行動計画
- ユーザの安全性を高める機能 (衝突防止など)
これだけあれば、自律ロボットとしては十分な機能を有するロボットになりそうです。
しかし、家庭用ロボットとしてロボットを販売するためには、以下のような機能開発も必要です。
- 異常検知や故障検知機能
- インターネット経由でのアップデート機能
- スマートフォンやPCとの接続機能
- クラウド経由でのモニタリング機能
- その他、ロボットの魅力を高めるための機能
すごいですね。低レイヤーから高レイヤーまで、各レイヤーでも様々な分野に渡る開発領域があります。GX ではこれらの領域を、以下のようなチーム体制で開発しています。
GX のソフトウェアのチーム体制
OS・ハードウェア連携チーム
OS・ハードウェア連携チームでは、ロボットを動作させるための基盤部分の開発を行っています。例えば、マイコンのファームウェアと通信をして、センサー値の取得やモータの制御をしたり、マイクをオーディオデバイスとして利用できるようにしたり、OS起動時に必要なサービスが立ち上がるようにしたり、といった開発をしています。
Linuxのカーネルやドライバー、ペリフェラルとの通信、パッケージ管理システム、デバイスのセキュリティ、ファームウェアなど、Linux の低レイヤーに関する専門性の高いメンバーが所属しています。
認識チーム
認識チームでは、画像処理(人の認識など)、音声処理(声の認識など)、SLAM(画像やセンサー情報から自己位置推定と地図作成を同時に行う技術)などの開発をしています。
また、ロボットが周辺環境をより良く認識するためのデバイス選定や評価を行ったり、複数の認識モジュールの結果を組み合わせてより高度な情報を生成したりといった業務も行います。
画像処理分野、音声処理分野、SLAM分野などの専門知識だけでなく、近年話題になっている機械学習(ディープラーニング)の知識や、マルチモーダルな情報処理に関する知見を有したメンバーが集まっています。
魅力開発チーム
魅力開発チームはその名の通り、"ロボットの魅力"を開発するチームです。
その業務範囲は非常に多岐にわたり、ロボットの振る舞いの生成や行動計画、周辺環境やユーザとのインタラクションや強化学習、ロボットの動き(アニメーション)の開発、開発者にとってロボットをより使いやすくするためのツール(SDK)やユーザ向けのアプリ開発などを扱います。
非常に多様なメンバーが集まっていて、機械学習の専門家やロボット専門家、ゲーム開発者、テクニカルアーティスト(アニメータなどのクリエイティブ系のメンバーと組んで仕事をするエンジニア)などが一堂に会して、日々ディスカッションをしながら開発を進めています。
クラウドチーム
クラウドチームは、ロボットのためのクラウド基盤の構築を行っています。
例えば、ロボットのデバイスの使用状況や診断情報をクラウドに保存することで故障時の問い合わせに対応できるようにしたり、ブラウザ上からロボットのアップデートやデバイスの状態確認ができるようにしたり、開発用のツールやユーザ向けのアプリからそれらの情報を取得できるようにしたり、といった開発を行っています。
開発領域はクラウド側だけではなく、センサー情報の取得やパッケージの更新、診断の実行など、ロボット側で動作するプログラムの開発も行います。
ロボットのクラウドサイドの開発にはまだ定石のパターンがあるわけではないので、どのような機能開発を行えば開発者やユーザから喜ばれるか、常に考えヒアリングを行いながら開発することが求められます。
トラベラー
トラベラー?聞き慣れないチーム名ですね。
トラベラーとはその名の通り、特定のチームに所属せず、様々なチームを旅しながら開発を進めるメンバーのことを指します。トラベラーには大きく2つの役割があります。
まず1つは、全体を見通す役割です。
上記に述べたようにロボットの開発領域は非常に多岐にわたるため、全体が整合性を保ちながら開発を進められるように、各チームの開発物を繋いでゆくための開発や、各チームで拾いきれない部分の開発を行います。
そしてもう1つは、流動的なリソースとしての役割です。ロボットの開発には流れがあり、デバイスの選定、設計、各ソフトウェアモジュールの開発、統合、作りこみやチューニングという流れを回す中で、その時々で多くのリソースを必要とするチームが変わってゆきます。
常に各チームの人数が固定されていると、その時に忙しいチームがボトルネックになりがちです。そこで、開発のフェーズに応じて柔軟に役割を変えながら、人手の足りないチームの開発をサポートします。
特定の領域に対する高い専門性は求められませんが、代わりにロボットのソフトウェア構成全体に対する理解と、幅広い知識が求められます。
さいごに
ロボットのソフトウェアの開発領域の広さが伝わりましたでしょうか? GX ではハードもソフトも全て自社で開発を行っているので、非常に多様な専門性の高いメンバーと日々ディスカッションをしながら、開発に専念することができます。自分の専門領域にとどまらず、幅広い分野に興味を持って知識の幅を広げてゆきたい方には、最高の環境だと思います。
思ったよりも長い記事になってしまいましたが、ここまで読んでいただきどうもありがとうございます。
GX に少しでも興味を持っていただけたら、是非一度話を聞きにきてください。お待ちしております!