Rapiroの機能を一画面にまとめたインターフェイスを作成して、ブラウザから操作できるようにした。
「Rapiroをブラウザで動かしてみた 【準備編】」の記事はこちら

Rapiroをブラウザで動かしてみた 【準備編】
WebIOPiを使ってRapiroをブラウザから操作するためのWebサーバーを立てる方法を解説。
「Rapiroをブラウザで動かしてみた 【全体構成】」の記事はこちら

Rapiroをブラウザで動かしてみた 【全体構成】
Rapiroをブラウザから操作するための全体構成を解説したまとめ記事。ソースコード一式と各機能の実装解説記事リンクも掲載。
インターフェイスの作成
HTMLで顔の向きを変えるためのスライダーを用意する。
サーボモーターの可動範囲は 0〜180。
0 で左向き、180 で右向き、90 で正面になる。
- min(スライダーの最小値):0
- max(スライダーの最大値):180
- step(操作の刻み幅):任意(デフォルトは1)
stepを指定しない場合は、細かく向きを調整できる。
90が正面になるため、stepを設定する場合は90の約数にしておかないと正面を選べなくなるので注意。
操作性と扱いやすさのバランスを考え、丸パンダ研究所では10を採用。
<input type="range" class="face_direction" id="face_direction" min="0" max="180" step="10">
制御処理の実装
JavaScript側の実装
スライダーのイベントハンドラで、マクロ名と値(角度)を取得して処理を呼び出す。
changeは、値が変化したタイミングで発火する。
document.getElementById('face_direction').addEventListener('change', function() {
change_rapiro('face_direction', this.value);
status = 'stop';
});
Python側の実装
顔の向きの変更にはPコマンドを使用。
渡された値(サーボモーターの角度)を0埋めの3桁にしてから、シリアル通信で送信する。
# -------------------------------
# 顔の向き
# -------------------------------
@webiopi.macro
def face_direction(value):
cmd = "PS00A" + value.zfill(3) + "T005"
cmd_input(cmd)
# -------------------------------
# コマンド実行
# -------------------------------
@webiopi.macro
def cmd_input(value):
cmd = "#" + value
ser.write(cmd.encode("utf-8"))