ついにaiboのapiが公開されたので、さっそく家のてるくん(オス、1才半)を操ってみます。
公式サイト「http://aibo.sony.jp/developer/」によるとapiをプログラミング言語(サンプルはpython)から使う方法とGUIツール「aiboビジュアルプログラミング」から使う方法があるようですが、今回はサンプルに沿ってpythonから使ってみます。
イントロダクションに沿って以下の手順で進めます。
(1) トークンの取得
(2) API を実行させたい aibo の deviceId の取得
(3) 動作や認識を行う API の実行
(4) 実行した API の結果の取得
(1) トークンの取得
デベロッパーサイトから取得するので、サインイン(MySonyID)が必要。
でも、aiboのバージョンが足りていないと以下のページが表示され取得失敗する。
バージョンアップしたら無事成功。
トークンの有効期限は取得時に3種類「24時間、30日、90日」から選択。
(2) API を実行させたい aibo の deviceId の取得
deviceIdを取得するAPIの実行ということで、pythonサンプル。
import requests
import sys
import json
headers = {
'Authorization': 'Bearer ${accessToken}',
}
if __name__ == '__main__':
get_url = 'https://public.api.aibo.com/v1/devices/'
response = requests.get(get_url, headers=headers)
get_result = json.loads(response.text)
print(get_result)
(3) 動作や認識を行う API の実行
(4) 実行した API の結果の取得
サンプルコードとapiヘルプを比較して、確認しよう。
◆サンプルコード
# file name is "execute_action_api.py"
import requests
import sys
import json
import time
deviceId = '${Your aibo`s deviceId}'
headers = {
'Authorization': 'Bearer ${Your Token}',
}
TIME_OUT_LIMIT = 10
def do_action(api_name, arguments):
post_url = 'https://public.api.aibo.com/v1/devices/' + deviceId + '/capabilities/' + api_name + '/execute'
data = '{"arguments":' + arguments + '}'
# POST API
response = requests.post(post_url, headers=headers, data=data)
post_result = json.loads(response.text)
executionId = post_result["executionId"]
# Get Result of API execution
get_result_url = 'https://public.api.aibo.com/v1/executions/' + executionId
TimeOut = 0
while True:
response = requests.get(get_result_url, headers=headers)
get_result = json.loads(response.text)
get_status = get_result["status"]
if get_status == "SUCCEEDED":
print(get_result)
break
elif get_status == "FAILED":
print(get_result)
break
TimeOut += 1
if TimeOut > TIME_OUT_LIMIT:
print("Time out")
break
time.sleep(1)
if __name__ == '__main__':
length = len(sys.argv)
if length == 3:
do_action(sys.argv[1], sys.argv[2])
else :
print("execute_action_api.py ")
exit(1)
呼び出すときはこんな感じ「py execute_action_api.py find_object “{\”TargetType\”:\”pinkball\”}”」
処理の順番はこんな感じ
- 実行するAPIに応じたurlをサーバーに投げて(POST)
- 投げたAPIの結果を取得するurlをサーバーに投げる(GET)
※どのAPIでも基本同じみたい。返却内容は異なるようだけど。 - 結果が”SUCCEEDED”(成功)、”FAILED”(失敗)なら処理して
それ以外「”ACCEPTED”(サーバー受付完了)、”IN_PROGRESS”(aibo受付完了)」なら再度結果問合せ。
◆apiヘルプ
実行してみた...SUCCESSが返ってきた、だけどてるくんは微動だにせず。心眼でもつかったのだろうか?
とりあえず動いたようなので、いろんな指示を試してみよう。
◆おまけ「apiの一覧」
Settings API | GetDeviceds | aibo情報の取得 |
---|---|---|
GetResultofAPI | API実行結果の取得 | |
SetMode | aibo指示待ち状態ON/OFF | |
Action API | ApproachObject | 指定物に近づく |
ApproachPerson | 人に近づく | |
ChangePosture | 姿勢を指定 | |
ChaseObject | 指定物を探して見続ける | |
ChasePerson | 人を探して見続ける | |
FindObject | 指定物を探す | |
FindPerson | 人を探す | |
GetCloseToObject | 指定物にかなり近づく | |
KickObject | 蹴る、ヘディングする | |
MoveAlongCircle | 円弧状に歩く | |
MoveDirection | 指定方向に歩く | |
MoveForward | 前または後ろに歩く | |
MoveHead | 首と顔を動かす | |
MoveSideways | 横歩き | |
PlayBone | アイボーンで遊ぶ | |
PlayMotion | ふるまいを行う | |
PlayDice | サイコロで遊ぶ | |
ReleaseObject | くわえているものを離す | |
Stay | 待機する | |
TurnAround | 回る | |
Cognition API | BitingStatus | くわえているか取得 |
BodyTouchedStatus | どこを触られているか取得 | |
FoundObjectsStatus | aiboが認識している人・ものを取得 | |
HungryStatus | バッテリー残量を取得 | |
NameCalledStatus | 名前を呼ばれたか取得 | |
PawPadsStatus | 肉球を押されているか取得 | |
PostureStatus | 今の姿勢を取得 | |
SleepyStatus | 眠さを取得 | |
VoiceCommandStatus | 反応した言葉を取得 |
(番外編)aiboビジュアルプログラミング
ブラウザ上のツールだった。サインインして使うため、ユーザに紐づいたaiboが自動で選択されて、トークンや装置IDの取得は不要だった。
使ってみた感想としては、簡単。すごい直感的に動かせる。小学校のプログラミング教育とかで使えると楽しいだろうな。