Author Topic: Checklist dialogues (waiting for answer, then going on)  (Read 4857 times)

AlexCohrs

  • Guest
Checklist dialogues (waiting for answer, then going on)
« on: November 21, 2017, 03:11:10 PM »
Hi guys,

I am using VoiceAttack with my X-Plane flight simulator, and it's working great.

Additionally to assign tasks to my first officer like "After landing tasks" (switching landing lights off, switching taxi lights on and so on) I would also like to create true checklist flows with VoiceAttack. The idea is that my first officer asks a questions, waits for my reply and only thereafter goes on with the next question.

Like this:

F/O: Landing lights?
(waits for response)
Me: On!
F/O: Flaps?
(waits for response)
Me: Full down!

I checked some posts about conditional settings, but could not find out if and how that's possible. Can you guys help me out?

Best regards

Alex

Pfeil

  • Global Moderator
  • Hero Member
  • *****
  • Posts: 4782
  • RTFM
Re: Checklist dialogues (waiting for answer, then going on)
« Reply #1 on: November 22, 2017, 01:40:51 AM »
Any phrase you speak will need to be a command phrase(either for individual commands or using dynamic command sections). In theory you could use dictation, but in practice the accuracy of that system is less than satisfactory.

You may also need to reconsider certain responses, as extremely short words like "on" are usually difficult to get recognized accurately.


For the checklist logic itself, you'll likely want to use a numeric variable to keep track of where you are, as that will allow you to increment and decrement your position along the list easily.


Here's the checklist system I currently use, I intended it to be a framework of sorts, which I can plug any checklist into without modifying most of the other commands:

[Startup;Shutdown;Weapons] Checklist
Code: [Select]
Begin Text Compare : [ActiveCheckList] Equals ''
    Say, '{CMDSEGMENT:0} check-list.'  (and wait until it completes)
    Set Text [ActiveCheckList] to '{CMDSEGMENT:0}'
    Set small int (condition) [ChecklistItem] value to 1
    Execute command, 'Set;Check'
Else
    Say, '{TXT:ActiveCheckList} Check-list in progress'  (and wait until it completes)
End Condition
In theory this is the only command that's modified, and even then only in the sense that the possible checklist name is added to the command phrase, which does not necessitate modifying any actions.


Checklist - Startup
Code: [Select]
Set small int (condition) [~currentItem] value as incremented by 1
Begin Small Integer Compare : [~currentItem] Equals [ChecklistItem]
    Say, 'Close doors'
    Set small int (condition) [ChecklistItem] value as incremented by 1
End Condition - Exit when condition met

Set small int (condition) [~currentItem] value as incremented by 1
Begin Small Integer Compare : [~currentItem] Equals [ChecklistItem]
    Say, 'Battery, alternator, and generator switches, all on'
    Set small int (condition) [ChecklistItem] value as incremented by 1
End Condition - Exit when condition met

Set small int (condition) [~currentItem] value as incremented by 1
Begin Small Integer Compare : [~currentItem] Equals [ChecklistItem]
    Say, 'Check fuel state'
    Set small int (condition) [ChecklistItem] value as incremented by 1
End Condition - Exit when condition met

Say, 'Startup checklist complete'
Set Text [ActiveCheckList] to ''
This is the actual checklist structure. The main idea behind it is to have an item order-independent system, where it doesn't matter in which order the items are put into the list, or how many there are.
You can copy a block and insert it anywhere, without having to change any settings or variables(though a checklist in progress would repeat the last item if the newly inserted one is placed before the current item's index).
When the index number is higher than the amount of items in the checklist, the list is considered completed. Again this means you can easily add or remove items, without having to set a "maxItems"-style variable anywhere.


Set;Check
Code: [Select]
Begin Text Compare : [ActiveCheckList] Does Not Equal ''
    Execute command, 'Checklist - {TXT:ActiveCheckList}' (by name)
End Condition - Exit when condition met
Say, 'No checklist in progress'
This acknowledges the previously spoken item, and will result in the checklist advancing to the next item.
The command doesn't do much other than run the checklist in progress, if any. The advancement logic for incrementing the ID is in the checklist itself.


Go back;Say again
Code: [Select]
Begin Text Compare : [ActiveCheckList] Does Not Equal ''
    Set small int (condition) [ChecklistItem] value as decremented by 1
    Execute command, 'Set;Check'
End Condition - Exit when condition met
Say, 'No checklist in progress'
This allows you to have an item repeated, in case you lose track of what you were supposed to do, or didn't hear clearly what was said.


Cancel checklist;Abort checklist;reset checklist
Code: [Select]
Set Text [ActiveCheckList] to ''
Say, 'Checklist reset' or 'Checklist aborted' or 'Checklist reset'
Pretty self-explanatory: This stops any checklist in progress.


Now, this system isn't responsive in the way you're intending, I.E. I execute all the actions myself and the list just serves as a reminder(the copilot reading off the list, if you will); It is merely intended as an example of a checklist system in any form, there are many ways to skin the proverbial cat, so you'll have to figure out a design to your specifications.

AlexCohrs

  • Guest
Re: Checklist dialogues (waiting for answer, then going on)
« Reply #2 on: November 22, 2017, 02:06:11 PM »
Wow, that you for the detailed answer! I will need some time to understand it completely, but I will it's guiding me to the correct path. Will see what I can do!

Alex