LoginSignup
29
30

More than 5 years have passed since last update.

ALDialog/QiChatメモ

Last updated at Posted at 2015-03-03

ALDialog/QiChatに可能性を感じたのでメモです

ALDialog/QiChatの概要

Screen Shot 2015-03-01 at 12.01.08 PM.png

ChoregrapheにDialogボックスを配置すると、
QiChatというスクリプトによってPepperくんの会話などを制御出来る。
良く使う基本的なQiChatのシンタックスをメモ。

concept

会話のパターンを宣言するのに使用。
変数として会話のパターンを入れておくイメージ。
例:

スクリプト

...
concept:(yes) [はい いいですよ]
u:(~yes) やったー
...

[]の中に入れることによって複数パターンを登録できる。
~を付けると、conceptの内容を持ってくる。

結果

Human: はい (100%)
Robot: やったー
Human: いいですよ (100%)
Robot: やったー

proposal

Pepperくんに喋らせる言葉を関数化出来るシンタックス。
以下のように扱う。
proposal: %hoge Pepperです、こんにちは
(%の後にタグ名でタグを付けることが出来る)

^nextProposal

次のproposalを持ってくる。
例:

スクリプト

...
proposal: 1番目
proposal: 2番目
proposal: 3番目
u:(こんにちは) ^nextProposal
...

結果

Human: こんにちは (100%)
Robot: 1番目
Human: こんにちは (100%)
Robot: 2番目
Human: こんにちは (100%)
Robot: 3番目

^previousProposal

一個前proposalを持ってくる。
(注:^nextProposalのように前に行く動作ではない。)
例:

スクリプト

...
proposal: 1番目
proposal: 2番目
proposal: 3番目
u:(こんにちは) ^nextProposal
u:(こんばんは) ^previousProposal
...

結果

Human: こんにちは (100%)
Robot: 1番目
Human: こんにちは (100%)
Robot: 2番目
Human: こんばんは (100%)
Robot: 1番目
Human: こんばんは (100%)
Robot: 2番目
Human: こんばんは (100%)
Robot: 1番目

^sameProposal

先ほどと同じproposalを持ってくる。
例:

スクリプト

...
proposal: 1番目
proposal: 2番目
proposal: 3番目
u:(こんにちは) ^nextProposal
u:(こんばんは) ^previousProposal
u:(おはよう) ^sameProposal
...

結果

Human: こんにちは (100%)
Robot: 1番目
Human: おはよう (100%)
Robot: 1番目
Human: おはよう (100%)
Robot: 1番目

^activate(タグ名), ^deactivate(タグ名)

タグを付けたproposalの有効化と無効化を行う。
例:

スクリプト

...
proposal: こんにちは
proposal: %hoge おはよう
proposal: こんばんは
u:(こんにちは) ^nextProposal
u:(おはよう) ^deactivate(hoge) 今は朝では無いですよね
...

結果

Human: こんにちは (100%)
Robot: こんにちは
Human: おはよう (100%)
Robot: 今は朝では無いですよね
Human: こんにちは (100%)
Robot: こんばんは

^goto(タグ名), ^gotoReactive(タグ名)

%によってタグを付けた文章を持ってくる。
(注:^gotoは一度のみ。)
例:

スクリプト

...
proposal: %hoge Pepperです
u:(こんにちは) こんにちは ^goto(hoge)
u:(おはよう) おはよう ^gotoReactive(hoge)
...

結果

Human: こんにちは (100%)
Robot: こんにちはPepperです
Human: こんにちは (100%)
Robot: こんにちは
Human: おはよう (100%)
Robot: おはようPepperです
Human: おはよう (100%)
Robot: おはようPepperです

^gotoRandom(タグ名)

同じタグが付いた文章をランダムに持ってくる。
(注:こちらも一度持ってきた文章は持ってこない)
例:

スクリプト

...
proposal: %hoge Pepper1です
proposal: %hoge Pepper2です
proposal: %hoge Pepper3です
u:(こんにちは) こんにちは ^gotoRandom(hoge)
...

結果

Human: こんにちは (100%)
Robot: こんにちはPepper3です
Human: こんにちは (100%)
Robot: こんにちはPepper1です
Human: こんにちは (100%)
Robot: こんにちはPepper2です
Human: こんにちは (100%)
Robot: こんにちは

include

外部のトピックファイルを持ってくる。
整理できてとても便利。
例:

スクリプト

hoge_jpj.top
...
proposal: Pepperです
proposal: 百万馬力ですよ!
...
main_jpj.top
...
include: hoge_jpj.top
u:(こんにちは) ^nextProposal
...

結果

Human: こんにちは (100%)
Robot: Pepperです
Human: こんにちは (100%)
Robot: 百万馬力ですよ!

サブルール

例:

スクリプト


u:(こんにちは) こんにちは、今日の体調はどうですか?
    u1:(~good) それは良かったです。
    u1:(~bad) お気の毒に、どこが悪いですか?
        u2:(e:Dialog/NotUnderstood) $Dialog/LastInput が悪いのですか。
                                    $Dialog/LastInput が良くなる情報を表示します。
                                    $health=$Dialog/LastInput

結果


Human: こんにちは (100%)
Robot: こんにちは、今日の体調はどうですか?
Human: 辛いです (100%)
Robot: お気の毒に、どこが悪いですか?
Human: 頭 (100%)
Robot: 頭が悪いのですか。頭が良くなる情報を表示します。

上記の例のようにu:だけではなく、
u1:,u2:のようにuの後に数字を追加することにより
会話の条件分岐を行えたり、自然な会話の流れを実現出来る。


proposal: 今日の体調はどうですか?
    u1:(~good) それは良かったです。
    u1:(~bad) お気の毒に。

上記のようにproposalの後にも使える。

スクリプトの一番下の行のように変数に会話の内容を入れることにより、Dialogボックスの
次のボックスに値を受け渡すことが可能。
値を受け渡してその内容によって処理を行える。
(参考:会話入門 (Pepper TechFes技術セッション)/ボックスからの出力)

所感

proposal辺りとconcept変数を使えば一連の会話の流れは簡単に出来そう。
結構癖のあるスクリプトなので、テストを繰り返しながらの実装になりそう...
まだ細かいところに手が届きそうなシンタックスがあるので勉強次第更新します。

参考

会話入門 (Pepper TechFes技術セッション)
QiChatを使って会話と連動してモーションを動かす方法など

Dialogとメモリイベント (Dialog応用)
Dialogのメモリイベントや、QiChat内でメモリイベントを持ってくる方法など

pepperとの会話を進化させるQiChat-Syntaxまとめ(自分用メモ)
日本語版公式ドキュメントと言って良いシンタックスの紹介量です。

QiChat - Table of Content
QiChat公式ドキュメント(英語)

29
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
30