複数ロボット会話システムとTkinter連携

LINEで送る
Pocket

複数ロボット会話システムとTkinter連携

複数ロボット会話システムとTkinterによるGUIシステムを連携したロボット案内システムを開発した。

PythonのGUI(Graphical User Interface:グラフィカル・ユーザ・インタフェース)ライブラリの一つであるTkinterで案内画像や案内文をディスプレイに表示させて、複数のロボットが案内を行うシステムです。

TkinterはPythonの標準ライブラリに採用されているGUIライブラリです。
クロスプラットフォームでGUIアプリを作成できる点は他のライブラリと同様です。

Python/Tkinter は、イベント駆動方式です。
GUI アプリケーションの場合、ユーザーからの入力やシステムの状態変化(タイマーなど)など、ある出来事をきっかけにプログラムが実行されます。
この出来事を イベント(event) といい、イベントをきっかけにしてプログラムが起動されることを イベントドリブン(eventdriven:イベント駆動) といいます。

 

複数ロボット会話システム
複数ロボット会話システムとTkinter

後ろのディスプレイに案内画像と案内文を表示させます。
ロボットは3体で、左右のロボット(ぬいぐるみ)が交互に案内を音声でします。

また、3体のロボットは、首を振ったり手を動かしながら案内をします。

複数ロボット会話システムとTkinterによるGUIシステムは、インターネットに接続しており、各々の動作はWebサービスAPIで同期をとっています。

Tkinterは、起動して画面が表示されるまで、5~6秒程の遅延があります。
Tkinterが完全に立ち上がって画面が表示されるのを待って、ロボットは、案内を開始します。
Tkinterシステムが完全に立ち上がると、サーバーに立ち上がったことを知らせます。
ロボットは、WebサービスAPIで、立ち上がりを監視していて、立ち上がりを確認してから案内を開始します。

Tkinterの after() メソッドについて

今回は、TkinterによるGUIシステムですが、マウスによるクリック入力がなくても画像やテキストを更新さないといけなので、プログラム自身でなんらかのきっかけを作ってやる必要があります。
このような場合、役に立つメソッドがTkinterの after() です。
時間によるイベント駆動です。

root.after(msec, command)
指定した時間経過後 command を実行 (固有番号 id を返す)

このように、after() には単純な時間待ちを行うほかに、一定時間後に指定した command を起動するタイマーの働きも持っています。
たとえば、一定間隔で実行する関数を talk() とします。
この場合、talk() 関数の最後で after()メソッド を使って自分自身の起動を設定します。

具体的には次のようにプログラムします。

 

案内内容は、四万温泉の摩耶姫伝説の紙芝居です。

紙芝居の画像と紙芝居の文言をディスプレイに表示させて、下のロボットたちが交互に紙芝居の文言を発声します。

このシステムは、四万温泉観光協会で稼働しています。

複数ロボット会話システムとTkinterによるGUIシステム

複数ロボット会話システムとTkinterによるGUIシステム

複数ロボット会話システムとTkinterによるGUIシステム

群馬プログラミングカレッジでは、子どもから成人を対象にしたプログラミング教室です。

現在、開発しているシステムです。
・複数ロボット自然会話システム
・案内ロボット
・自然会話ロボット
・教育ロボット
・IOTシステム

開発言語は、python、PHPなどです。
ロボットは、Raspberry Pi などのマイクロコンピュータを使用しています。

子どもたちは、Scratchビジュアルプログラミング言語から学び、上級生は並行してpythonプログラミング言語を学びます。

Scratchプログラミング、pythonプログラミング、PHPプログラミング、IOTシステム開発、AIロボット開発に興味がある方は、ご連絡ください。

 

LINEで送る
Pocket

WebサービスAPIによる複数ロボット会話システム

LINEで送る
Pocket

WebサービスAPI利用時の注意点

インターネットは、「ベストエフォート型のサービス」がほとんどである。

一方、常に一定の通信速度や品質を保証している「ギャランティ型サービス」もあるが高価である。

WebサービスAPIなどを利用したシステム開発には、基本的には、「ベストエフォート型のサービス」を前提とした設計が不可欠である。

「ベストエフォート型のサービス」は、通信速度やサービスの質が保証されないので、通信速度の低下などで、リトライエラーが頻繁に発生して、タイムアウトに陥ることがある。

これにより、プログラムで例外が発生して、予期しないプログラム停止となる。

このような事態を防ぐには、「ベストエフォート型のサービス」という前提でシステム開発することが必須である。

プログラミング初心者が陥る落とし穴でもある。

インターネット通信は、エラーがでることを想定したプログラミングを行うことが必要になる。

例外処理で、救済するためのプログラミングが必須となる。

try:

except Exception as e:

のexcept:欄に、インターネットでのエラーを救済するためのプログラミングを施す。

この欄で、最初からやり直すための処置などを施す。

具体的には、例外が発生した日時や例外内容をログとして保存して、インターネットが復旧した段階で、メール通知するなどの処置などを行う。そして、プログラムを継続させて、矛盾がないようにする。

これにより、インターネット品質などを知ることができ、通信品質の改善を行うことができると同時にトランザクション処理も実現できる。

群馬プログラミングカレッジで開発した「複数ロボット会話システム」でもこのような救済処理が運用上必須となった。

インターネット回線を複数で共有する環境では、通信品質が低下して、しばしば、RetryMaxErrorにより、例外が生じる。

pythonのrequestsモジュールを利用して、Webサービスに接続している場合に、度々、例外が生じた。

基本は、「トランザクション処理」の実践である。

群馬プログラミングカレッジでは、pythonプログラム言語を学び、「実務経験」を行うことができます。

子ども達は、子どもプログラミング教室で、Scratchプログラム言語を学び、高学年生は、徐々に高級プログラム言語を学びます。

群馬プログラミングカレッジでは、毎月、プログラミング体験会を実施しておりますので、お気軽にご参加ください。

子どもから成人の方が、継続的にプログラミングを学ぶ場を提供いたします。

複数ロボット会話システム
案内ロボットとして、活躍しています。pythonプログラム言語、PHPプログラム言語で開発しました。
WebサービスAPIを利用して、お互いの会話の同期を制御している。

LINEで送る
Pocket