
こんにちは。コンサルティングサービス本部、野村です。
今回はPepperを店舗やイベントで利用する際、出来ると色々な用途に使える
サーマルプリンターとPepperとの連携方法をご紹介いたします。
構成
サーマルプリンターと連携するにはいくつかのやり方ありますが、
今回は比較的簡単に連携できる以下の方法をご紹介してみます。
Pepper側からのトリガーにより、Windows上のPDFをPythonを使って
サーマルプリンターへ出力します。
※弊社では下記プリンターを使用しました。
Star TSP100futurePRNT
Pub/Subモデルについて
次に、Pepperの特徴的なアーキテクチャーであるPub/Subモデルについて
簡単にご説明しておきたいと思います。
Pub/Subモデル(出版-購読モデル)とは、メッセージを送る(出版)側と
受け取る(購読)側とで非同期的にメッセージのやりとりを行うことができるプログラミングモデルで、
ブローカーと呼ばれる中間層が互いをハンドリングすることで疎結合化を実現しています。
Pepperのソフトウェア構成もPub/Subモデルをとっていて
ALMemoryというメモリキーを介して各デバイス間でメッセージのやりとりを
行うことができるようになっています。
Pythonの実装
次に、Python側の実装方法です。
【準備】
Pythonのインストール
下記からPython2.7をダウンロードしてセットアップします
Python SDKのインストール
AldebaranのサイトからPython 2.7 SDKをダウンロードしてセットアップします
https://community.ald.softbankrobotics.com/ja/resources/software/language/ja
【subscribe(購読)してPDFへ出力する】
●qi.Application APIでPepperからのメッセージを非同期で待ち受けます。
if __name__ in '__main__':
app = qi.Application()
session = app.session
#接続先のIPアドレス
session.connect("tcp://192.168.xxx.xxx:9559")
#接続確認
tts = session.service("ALTextToSpeech")
tts.setLanguage("Japanese")
tts.say("接続しました。")
mem = session.service("ALMemory")
●adobe readerを開始します。(環境によって随時変更してください)
acrobat = r'C:\Program Files\Adobe\Reader 11.0\Reader\AcroRd32.exe'
cmd1 = '"{}" /H'.format(acrobat)
proc = subprocess.Popen(cmd1, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
●1秒ごとにPepperからのメッセージをsubscribeします
i = 0
try:
while True:
time.sleep(1)
#メモリの購読
sub = mem.subscriber("xxx/xxxxx")
sub.signal.connect(functools.partial(mycallback, "xxx/xxxxx"))
i = i + 1
except KeyboardInterrupt:
proc.kill()
●pdfを出力します
def mycallback(key, value):
print("val:{0}".format(value))
pdffile = format(value)
printer = "PRINTER_NAME"
r_print(pdffile, printer)
def r_print(pdffile, printer):
cmd = '"{}" /N /T "{}" "{}"'.format(acrobat, pdffile, printer)
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()
Pepperの実装
次に、Pepper側の実装方法です。
【印刷させたいタイミングでraiseEvent(出版)する】
●印刷させたいタイミングでPDF名を送ってメモリーキーにraiseEventします。
これだけ。
まとめ
サーマルプリンターからちょっとした引換券やチケット等を
プリントアウトすることでイベントを盛り上げたりと、
色々な利用方法がありそうです。