This tutorial starts like the Using Dialog topic in Choregraphe tutorial, then goes deeper in masytering Dialog boxes and QiChat scripting.
CONTENT
- Hello World
- "Hi", "Hello", in one rule
- Connecting QiChat scripts and animations
- Jumping from one topic to another
- Advanced tips
Hello World
- Start Choregraphe.
- Drag the Speech > Speech Settings > Set Language box on the grey area.
- Click the parameter button and set the language as English.
- Right click the grey area and choose, in the contextual menu, Create a new Box > Dialog....
- Click the Add a new topic button, then type a name without spaces, for example: HelloWorld.
- Click the Add button, then the OK button.
- Create links as below.
- In the Project content, double click the HelloWorld_enu.top file.
- The Script editor appears.
- Type those rules:
u:(Hello) Hello, young Padawan
u:(Good morning) Let's start a wonderful day
Testing on a simulated robot
- Make sure you are connected on a virtual robot.
- Click the Play button.
- In the Dialog panel, enter “Hello” and press Enter.
- You can see the result both in Dialog panel and in the Robot view.
Testing on a real robot
- Make sure you are connected on a real robot.
- Click the Play button.
- Wait for the signal indicating that the robot is listening:
- A “bip” sound is played and
- Eye LEDs become Blue and turn.
- Say “Hello” :
- The robot says “hello young padavan”.
- You can also see the result both in Dialog panel and in the Robot view.
"Hi", "Hello"... in one rule
To make your first rule a little bit more complex, enrich your script:
u:([hi hello wassup]) hello young padawan
u:(["tell me" "give me"] your name) of course, my name is NAO
Connecting QiChat script and animations
- Add these new rules:
u:(["can you" please] sit down {now}) ok i sit down $sit=1
u:(["can you" please] stand up {now}) ok i stand up $standup=1
- Add two outputs to the Hello world box.
- one called “sit”,
- one called “standup”.
Note: here we use Bang type, an easy way to propagate an event.
- Add two Programming > Time > Wait boxes and connect them to the outputs you have created.
- Add and connect a Movement > Posture > Sit Down and a Movement > Posture > Stand Up boxes.
Jumping from one topic to another
- In a new Project, add an Speech > Speech Settings > Set Language box.
- Create two different Dialog topic boxes, called Food and Sport with the following content:
topic: ~Food() language: English u:(let's talk about food) OK, guess what I like u:^private(do you like fish) yes and sea food too u:^private(do you like meat) no, I don't
topic: ~Sport() language: English u:(let's talk about sport) OK, guess what sport I like u:^private(do you like tennis) no, I can't play tennis u:^private(do you like yoga) yes, would you like to do yoga with me?
- Link the tree boxes as follows:
- Test it.
- To jump from a topic to another and give it the focus, use the one of their user rules:
- In our example : “Let’s talk about food” or “Let’s talk about sport”.
- Once a topic (food or sport) has the focus:
- all its private user rules are activated,
- while the private user rules of the other topic are not.
Advanced tips
Sending QiChat variable through box output
Be aware: in QiChat, a variable has no defined type.
Workaround:
- Use a Bang Output if you are just looking for sending a signal to another box.
- Use a Dynamic Output, if you want to use the value of the variable in another box; then cast it into the type you want in your box script:
def onInput_dyn(self, p): try: p = int(p) except ValueError: # If p is a string you may have an exception. pass