## 背景
ヒューマノイドロボットを個人で製作し、その製作手法を公開している人はとても少ない。また、ヒューマノイドロボットを製作したいが、技術情報の不足から製作を断念する人が多く見受けられる。ヒューマノイドロボット製作のハードルが高い原因としては、第一にロボット本体を製作することが非常に高度な技術を要すること、そして第二に、ヒューマノイドロボットの制御が難しいことが挙げられる。私と山名は、独自のヒューマノイドロボットの製作過程をブログやWebページで公開したり、プログラムや3Dモデル、制御基板の設計情報などをGitHubで公開したりすることで、前者の問題の解決に努めてきた。しかし、後者の問題については未だ解決策がない状況が続いていた。
## 概要
そこで本プロジェクトでは、ロボット製作者にその制御の難しさを感じさせないようにするための取り組みを行った。サーボモータで構成された様々なロボットに対して思い通りの動作を生成するための支援フレームワーク(Reficere, BlendMotion, flom, trainer, servoarray)を作成し、自ら使用すると同時にその取り組みを社会に認知させ実際にロボット制作者を支援するために展示会(Maker Faire Tokyo 2018及びWorld Maker Faire New York 2018)への出展等の広報活動をした。私は本プロジェクトのソフトウェア寄りの部分を担当した。
本プロジェクトで開発したフレームワーク“MonoMotion”は大きく分けて以下の 3 つの部分に分割され
る。括弧内はそれぞれのソフトウェアの名前である。
1. ロボットモデルを作る(Reficere)
2. モーションを作る(BlendMotion, flom)
3. 実機で動かす(trainer, servoarray)
このうち私が開発したのは BlendMotion, flow, trainer, servoarray である。
### ロボットのモーションを作る
人間がロボットの動作を作成するためのインターフェースとして、BlendMotion というソフトウェアを開発した。これはBlenderという3GCGソフトウェアのアドオンである。3D世界で動きを作成するのに最適なUIを考えた際に、3DCGのアニメーション作成のUIがもっとも近いだろうと考えてBlenderを選択した。
![BlendMotion](https://i.imgur.com/dJij5ch.png)
さらに、モーションを作成した後にそれを保存する手段として、ファイルフォーマット兼ライブラリの flom を実装した。 flom ライブラリはプロジェクトの根幹となるものであり、バグの混入が広範囲に影響を与える可能性があった。それを防ぐために Property-based testing を採用し、堅実なテストケース作りを心がけた。flom は本フレームワークを構成する複数のソフトウェアから利用されるため、複数言語へのバインディングが記述しやすいC++で実装した。Pythonで実装したBlendMotionでは、flomのPythonバインディングを利用している。
### モーションをロボットの実機で動かす
BlendMotion で作成したモーションは物理シミュレーションをして作成したものではないため、そのまま
実機で動かしても思い通りになるとは限らない。そこで、シミュレーション上で学習を行い、モーションを 自動で多少修正することを行う。これを Derivative-free optimization により自動で行うソフトウェア”Trainer”を開発した。
![Trainer](https://i.imgur.com/242hev5.png)
また、学習によって修正されたモーションを実機で動かすためのソフトウェア、 flom-runner を開発した。モーションは flom に出力されているため、これは flom のモーションを実機で再生するソフトウェアと言える。さらに、ロボット間のサーボモータードライバの違いを吸収するため に、サーボモーター抽象化ライブラリ servoarray を開発し、flom-runner で使用した。
これらを使用することで、最終的に BlendMotion で作ったモーションを学習によって最適化し、実機で思い通りに動かすという目標が達成されたことになる。
![flom-runner](https://i.imgur.com/v7FyGmK.png)
## 成果
本フレームワークにより、ホビーユーザ層に存在していたロボット制御への障壁を緩和できた。ロボットのプログラミングに触れたことのない中学生の後輩に試しに使ってもらったところ、約40分でロボットに目的の動作をさせることができた。これは本プロジェクトを開始する前の2人がロボットを動かすまでに約9ヶ月かかっていたことを考えると大きな進歩であると考えている。
このプロジェクトの成果により、[私は 2018 年度未踏スーパークリエータに認定された](https://www.ipa.go.jp/files/000074100.pdf)。