ちょっと話題の記事

aiboのWebAPIドキュメントを読んでみたら色々使えそうで夢が広がった。

2019.11.12

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

せーのでございます。
先日、ついにSONYの誇るロボット犬「aibo」のAPIが公開されました

今年の1月にAPIの公開がSONYより発表され、夏ごろ、という当初の予定より少し遅れての公開となり、エンジニアとしては待ちに待った人も多いのではないでしょうか。

APIと同時にドキュメントが公開されましたので早速読んでみました。

何ができそうか

aiboは元々学習機能があり、声を掛けたり、コミュニケーションを取る事によって甘えん坊になったり、ワイルドになったりと独自の成長を遂げます。例えば音声で言えば現時点で下記の「呼びかけ」に反応します。

逆に言えば普通の犬同様、細かい指示を出してもそれに反応することはできませんし、aiboのセンサー外で行われていることには気が付きません

ところが今回APIが公開され、しかもそれがコンパイルしてaiboに直接デプロイするようなタイプではなくWebAPIであるということは、いくら遠くにいたとしてもインターネットさえ繋がっていれば、プログラミングを通していつでもaiboとコミュニケーションを取ることができるわけです。
例えばスマホのGPSで自宅の近くまで来たらAPIを叩いてaiboに玄関までお出迎えしてもらったり、Alexaと会話をしている時に特定の会話で一緒に喜んだりできます。

全てをプログラミングできてしまうとせっかくのaiboがただのロボットになってしまいそうですが、aiboの場合は本来のaiboの動きはキープしたままAPIの操作を行うことができ、さらにその時のaiboの「機嫌」によって挙動が変わってくるのだそうです。

本来のロボティクスや機械学習とAPIによる制御をうまくかけ合わせた感じで、色々な応用に効きそうな技術ですね。

ドキュメントを読んでみた

それでは早速公開されたドキュメントを読んでみたいと思います。

基本的な仕組み

基本的な仕組みはこのようになっています。

まずaiboをMy aiboというSonyの製品登録に登録している人のみがアクセストークンを取得できます。このアクセストークンをHeaderに入れてリクエストを叩くとAPIがSonyのクラウドに届きます。
次に各aiboに固有のdeviceIDを指定することにより特定のaiboに対して指示が出せます。このdeviceIDもWebAPIを通じて取得します。複数のaiboを持っている家庭はこれによってそれぞれのaiboに指示を振り分けます。

アクセストークンは一定期間経つと使用不可となり、一旦廃棄した後に新たにトークンを取得する形となります。

APIはカテゴリとして基本設定に関する「setting API」、aiboに対してのアクションを指示する「action API」、aiboに対して行われた声掛けやふれあい、aiboの今の状態を取得する「cognition API」の3種類となります。各リクエストに対してはexecutionIdという固有のIDが振られ、戻り値として返ってきます。リクエストはPOSTで投げられるので、実行結果を取得する際はそのexecutionIdを元にGETメソッドを投げることで値が返ってきます。リミットレートは 1000req/h となります。

setting API

API 内容 備考
GetDevices 所有aibo一覧を取得 deviceIDはここで取得
Get Result of API 実行結果を取得する
SetMode aiboを指示待ち中にするか指定

基本的なセッティングに関するAPI群です。

SetModeとはaiboの「指示待ち」に関する指示です。
aiboは基本自動で動くので、APIの指示結果が伝わっているのかわかりにくい事もあります。そんな時にはSetModeメソッドをかけてあげると、aiboが「指示待ち」状態となります。

action API

actionは全部で20種類となります。

API 内容 備考
ApproachObject 指定されたものを探して近づく
ApproachPerson 人を探して指定された距離まで近づく
ChangePosture 指定された姿勢を取る
ChaseObject 指定されたものを見る
ChasePerson 人を見る
FindObject ものを探す
FindPerson 人を探す
GetCloseToObject 近くまで近づく ApproachObjectの後に使用
KickObject 蹴ったりヘディングしたりする
MoveAlongCircle 円を描いて歩く
MoveDirection 指定された方向に歩く
MoveForward 前後に歩く
MoveHead 首と顔を動かす
MoveSideways 横歩きする
PlayBone 別売りのホネで遊ぶ
PlayMotion 指定されたふるまいをする
PlayDice 別売りのサイコロで遊ぶ
ReleaseObject くわえているものを離す
Stay 待つ
TurnAround おまわりする 角度指定自由

かなりの種類のアクションが制御できますね。特にPlayMotionやChasePerson、MoveHeadなどは使い勝手の良いAPIになりそうです。

cognition API

cognition APIからは9種類の状態を取得できます。

API 内容 備考
BitingStatus ものをくわえているかどうか
BodyTouchedStatus 体のどの部分を触られているのかどうか
FoundObjectsStatus aiboが認識しているものや人
HungryStatus バッテリー残量
NameCalledStatus 自分の名前を呼ばれたかどうか 呼ばれた方向も取得できる
PawPadsStatus 肉球が押されているかどうか
PostureStatus 現在とっている姿勢
SleepyStatus 眠さ
VoiceCommandStatus aiboが反応した言葉

音声認識の部分が特に使えそうな感じがします。惜しむらくはこれらの状態取得もPOSTでコマンドを投げる必要があるので、将来的にこれがイベントドリブンになるとより使い勝手が増しそうですね。

まとめ

以上、ドキュメントを一通り読んでみました。かなり細かい部分での制御が可能となっていますね。
人感センサーや顔認識などのソリューション、Alexaなどのスマートスピーカーと組み合わせて使うことで、よりaiboに愛着がわくこと間違いなしです!

一方これからの進化も気になるところです。特に音声認識でのカスタム化は是非実装していただきたいです。これからもaiboの進化から目が離せません。