<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shawn+Allen</id>
		<title>miniSim - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="https://www.nads-sc.uiowa.edu/minisim/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Shawn+Allen"/>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=Special:Contributions/Shawn_Allen"/>
		<updated>2026-05-05T13:21:44Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.25.3</generator>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:ISAT_Quick_Start_2025.pdf&amp;diff=4028</id>
		<title>File:ISAT Quick Start 2025.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:ISAT_Quick_Start_2025.pdf&amp;diff=4028"/>
				<updated>2025-02-21T17:27:12Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: Shawn Allen uploaded a new version of File:ISAT Quick Start 2025.pdf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:ISAT_Quick_Start_2025.pdf&amp;diff=4027</id>
		<title>File:ISAT Quick Start 2025.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:ISAT_Quick_Start_2025.pdf&amp;diff=4027"/>
				<updated>2025-02-21T15:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Quick_Start_Guide&amp;diff=4026</id>
		<title>ISAT Quick Start Guide</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Quick_Start_Guide&amp;diff=4026"/>
				<updated>2025-02-21T15:22:18Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* updating file? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This section contains the ISAT Quick Start Guide.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
It is strongly recommended that users new to ISAT review this information and the ISAT User Guide to become familiar with the operation and use of ISAT and scenario development.&lt;br /&gt;
&lt;br /&gt;
[[:File:ISAT_Quick_Start_2025.pdf]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:ISAT_Quick_Start_2023.pdf&amp;diff=4025</id>
		<title>File:ISAT Quick Start 2023.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:ISAT_Quick_Start_2023.pdf&amp;diff=4025"/>
				<updated>2025-02-21T15:13:02Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: Shawn Allen uploaded a new version of File:ISAT Quick Start 2023.pdf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=4022</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=4022"/>
				<updated>2024-07-30T17:06:52Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* miniSim Documentation - add Scenario display text info from existing FAQ document by VJH*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
== miniSim Data Dictionary ==&lt;br /&gt;
The data dictionary is a compilation of the simulator data that is stored and available within the DAQ file after each drive. &lt;br /&gt;
&lt;br /&gt;
[[:File:Cells-miniSim-20240715.pdf]]&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
miniSim users may extend the data dictionary by adding custom cells to the collect and schedule files:&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSimCollect.general.txt&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSim.cec&lt;br /&gt;
&lt;br /&gt;
Typically new cells should be added into one of the SCNVIF sections.  Use the same SCNVIF section for both files:&lt;br /&gt;
&lt;br /&gt;
*cell 1 SCNVIF&lt;br /&gt;
*cell 7 SCNVIF&lt;br /&gt;
*cell 8 SCNVIF&lt;br /&gt;
*cell 9 SCNVIF&lt;br /&gt;
&lt;br /&gt;
== miniSim Documentation ==&lt;br /&gt;
All miniSim simulators ship with a documentation folder located on the desktop.  You can find miniSim and additional documentation within this folder.&lt;br /&gt;
&lt;br /&gt;
===Editing scenario display text===&lt;br /&gt;
&lt;br /&gt;
C:\NadsMiniSim_x.x\bin.x64\config\scenario_text.xml file.&lt;br /&gt;
&lt;br /&gt;
A short segment of that file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; ?&amp;gt;&lt;br /&gt;
&amp;lt;NADS xmlns=&amp;quot;http://www.nads-sc.uiowa.edu/XML/&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;MiniSim&amp;gt;&lt;br /&gt;
                                &amp;lt;Text&amp;gt;&lt;br /&gt;
                                                &amp;lt;Location1&amp;gt;&lt;br /&gt;
                                                                &amp;lt;Font&amp;gt; arialbd.ttf &amp;lt;/Font&amp;gt;&lt;br /&gt;
                                                                &amp;lt;FontSize&amp;gt; 45 &amp;lt;/FontSize&amp;gt;&lt;br /&gt;
                                                                &amp;lt;AspectRatio&amp;gt; 1.0 &amp;lt;/AspectRatio&amp;gt;&lt;br /&gt;
                                                                &amp;lt;RedIntensity&amp;gt; 0.95 &amp;lt;/RedIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;GreenIntensity&amp;gt; 0.95 &amp;lt;/GreenIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;BlueIntensity&amp;gt; 0.4 &amp;lt;/BlueIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;AlphaIntensity&amp;gt; 0.95 &amp;lt;/AlphaIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;BackgroundRedIntensity&amp;gt; 0.8 &amp;lt;/BackgroundRedIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;BackgroundGreenIntensity&amp;gt; 0.8 &amp;lt;/BackgroundGreenIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;BackgroundBlueIntensity&amp;gt; 0.8 &amp;lt;/BackgroundBlueIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;BackgroundAlphaIntensity&amp;gt; 0.2 &amp;lt;/BackgroundAlphaIntensity&amp;gt;&lt;br /&gt;
                                                                &amp;lt;HorizontalPosition&amp;gt; 0.0 &amp;lt;/HorizontalPosition&amp;gt;&lt;br /&gt;
                                                                &amp;lt;VerticalPosition&amp;gt; 0.0 &amp;lt;/VerticalPosition&amp;gt;&lt;br /&gt;
                                                                &amp;lt;Alignment&amp;gt; CENTER_CENTER &amp;lt;/Alignment&amp;gt;&lt;br /&gt;
                                                &amp;lt;/Location1&amp;gt;&lt;br /&gt;
                                …&lt;br /&gt;
&lt;br /&gt;
Anything between a pair of less-than and greater-than signs should not be changed, but the intervening text is editable; for example:&lt;br /&gt;
&amp;lt;DO_NOT_CHANGE&amp;gt; editable &amp;lt;/DO_NOT_CHANGE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Editable content can be found between the &amp;lt;Location#&amp;gt; and &amp;lt;/Location#&amp;gt; tags&lt;br /&gt;
(there will be a block for each of the 13 locations).&lt;br /&gt;
&lt;br /&gt;
In particular, the HorizontalPosition and VerticalPosition settings will be of interest to you, probably the Alignment setting, as well.&lt;br /&gt;
&lt;br /&gt;
Text positions are described in terms of coordinates which are normalized to fall between -0.5 and +0.5, regardless of device resolution, with (0, 0) being the center of the middle screen, positive x pointing right, and positive y pointing up.&lt;br /&gt;
&lt;br /&gt;
For example, a HorizontalPosition of -0.25 and a VerticalPosition of +0.25 will put the text in the upper left quadrant of the screen.&lt;br /&gt;
&lt;br /&gt;
The Alignment parameter sets the point within the block of text that snaps to the specified coordinate.&lt;br /&gt;
Valid choices are: LEFT_CENTER, CENTER_CENTER, RIGHT_CENTER, LEFT_TOP, CENTER_TOP, RIGHT_TOP, LEFT_BOTTOM, CENTER_BOTTOM, and RIGHT_BOTTOM.&lt;br /&gt;
&lt;br /&gt;
For example, setting Alignment to LEFT_BOTTOM and then changing the HorizontalPosition of several locations to a common value and the VerticalPositions to an ascending series of values will give you a column layout.&lt;br /&gt;
&lt;br /&gt;
== miniSim Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Desktop and Viewport Settings ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detailed information about the PC display layout and the miniSim viewport and channel configuration settings is available here:&lt;br /&gt;
&lt;br /&gt;
[[:File:miniSim-Desktop_and_Viewport-Settings-v3_113022.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: My miniSim displays have changed.  What happened, and how can I fix it? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows has shown a tendency to re-enumerate the displays from time to time.  The result is that the miniSim display layout/configuration becomes incorrect.&lt;br /&gt;
&lt;br /&gt;
The relationship between the display layout and the viewport display settings in the miniSim Channel Configuration File (.ccf) no longer match.&lt;br /&gt;
&lt;br /&gt;
To correct, check the following in this order:&lt;br /&gt;
#	Displays are arranged from left to right: Matrox/Mosaic, Instrument Panel, Operator.(use mouse or arrow keys)&lt;br /&gt;
#	The Matrox/Mosaic display must be designated as the ‘main’ or ‘primary’ in Windows. The task bar may move to this display when this is set, so drag the task bar and icons to the operator display&lt;br /&gt;
#	Do not use the Matrox PowerDesk program to adjust the default locations for pop-up and application windows. This will cause many, many problems.&lt;br /&gt;
#	The top edges of the display icons are aligned (use mouse or arrow keys)&lt;br /&gt;
#	Reboot to make sure the configuration is stable. &lt;br /&gt;
#	Check video and USB connections. If they are loose, it may cause windows to re number the displays, which can make things move around unpredictably.&lt;br /&gt;
#	Open the correct Channel Configuration File (.ccf) in the \bin.x64 directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' there are several .ccf files in every system, and the ‘correct’ one is defined by the system settings in the ‘go.cmd’ file used to start miniSim.&lt;br /&gt;
&lt;br /&gt;
See next section. The third number in the Channel header(s) should be equal to the number of the main display as reported by Windows in ‘Display Settings’ minus 1. Only 0, 1, 2 are generally valid for standard miniSim configurations (2 Channel, 3 displays).&lt;br /&gt;
&lt;br /&gt;
:Channel 0 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 1.000000 1.000000&lt;br /&gt;
:6&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:Channel 1 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:1.000000 0.000000 2.000000 1.000000&lt;br /&gt;
:0 IP&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the right Channel Configuration File for my miniSim? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. to determine the correct ccf file, examine the command file that launches miniSim.&lt;br /&gt;
&lt;br /&gt;
The minisim is launched by running the correct go.cmd file in the '''NadsMiniSim_x.x.x\bin.x64''' folder.&lt;br /&gt;
&lt;br /&gt;
Typically, there have been shortcuts created on the miniSim desktop that are used to run the appropriate ‘go’ scripts.  There are often several go-scripts, this is usually to provide a way to launch the miniSim with or without various options (Video Capture, Advanced Automation, etc).&lt;br /&gt;
&lt;br /&gt;
If you right-click on the shortcut icon and choose ‘edit’ you can edit the go.cmd script.  A typical one looks like this:&lt;br /&gt;
&lt;br /&gt;
:set MININADSCOMMMODE=PSEXEC&lt;br /&gt;
:set DYNA=car&lt;br /&gt;
:set NUMCHN='''2'''&lt;br /&gt;
:set INSTRUMENTS='''on'''&lt;br /&gt;
:set FORMAT='''wide'''&lt;br /&gt;
:set INSETVIEW=off&lt;br /&gt;
:set SIDEMIRRORS='''on'''&lt;br /&gt;
:set MININADSDAQ='''on'''&lt;br /&gt;
&lt;br /&gt;
Based on these settings, the miniSim will read the following channel configuration file (.ccf) and use its contents for setting up the rendering channels and viewports.  In this case, the miniSim will open this file:&lt;br /&gt;
'''\bin.x64\mininads_2ch.wide.sidemirrors.inst.ccf'''&lt;br /&gt;
&lt;br /&gt;
This is the correct file to edit for this configuration. Remember to exit miniSim before making edits to the .ccf file.&lt;br /&gt;
'''If you make a change and see no effect, you may be editing the wrong file!'''&lt;br /&gt;
&lt;br /&gt;
When the miniSim runs, it copies the .ccf file that pertains to the options selected in the go.cmd, and copies it to '''mininads_1ch.ccf''', which is the one that is loaded when miniSim is launched.&lt;br /&gt;
&lt;br /&gt;
This means that the '''mininads_1ch.ccf''' has the same ‘Last Modified Date’ as the file you want to edit.&lt;br /&gt;
&lt;br /&gt;
If you list the contents of the \bin.X64 folder by date, you will see something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h03_56.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In this case, you will see that the '''mininads_2ch.wide.sidemirrors.inst.ccf''' is the file you want to edit, as it has the same last modified date as '''mininads_1ch.ccf'''.&lt;br /&gt;
&lt;br /&gt;
For a desktop layout like this from Windows in ‘Display Settings’&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h05_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This is a '''Two-Channel''' system, meaning that the front three displays on the Matrox/Mosaic are Channel 0, and the Instrument Panel display is Channel 1.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: Where do I find data relating to the brake pedal force/position? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: The data you are seeking is represented by the '''CFS_Brake_Pedal_Force''' variable, which can be viewed either with ISAT or with Matlab during data reduction. The value ranges from 0 lbs. to 180 lbs., where 0 indicates no force (no pedal travel) and 180 indicates 180 pounds of force (full pedal travel).&lt;br /&gt;
&lt;br /&gt;
If you see a variable named '''CFS_Brake_Pedal_Position''' you may ignore this as it is not currently being used.   &lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I adjust the brake pedal response? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Information to adjust the brake pedal response is detailed in this document: [[:File:Adjust_Brake_Response_11302022.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: The tactile transducer, mounted under the cab, suddenly does not respond when the miniSim is running. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the following:&lt;br /&gt;
&lt;br /&gt;
1. Verify these connections first:&lt;br /&gt;
: a. The main stereo speakers should be plugged into the green audio port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: b. The Dayton D-30 amplifier should be plugged into the orange port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: c. The tactile transducer should be connected to the Dayton D-30 amplifier using the included speaker wire.&lt;br /&gt;
&lt;br /&gt;
2. Note that the amplifier controls the volume of the tactile transducer and therefore must be plugged into a power source. If the amplifier is not plugged into power, this could be the reason the tactile transducer is not working.&lt;br /&gt;
&lt;br /&gt;
3. Check the volume level of the amplifier. If it is set too low, the tactile transducer may '''appear''' to not be working. We suggest a minimum amplifier volume setting of 25% of full volume. A volume setting which is too high will be experienced as an unpleasant vibration and low-end rumble that does not resemble a real car. &lt;br /&gt;
&lt;br /&gt;
4. Launch the Realtek audio manager from the Task Bar and select 5.1 audio. Then, disable the center and rear channels, leaving the front left and right speakers, and the subwoofer enabled.&lt;br /&gt;
&lt;br /&gt;
5. Use the Realtek audio manager to test each of the speakers individually by clicking on each speaker icon. As you select a speaker, the speaker will sound.  &lt;br /&gt;
&lt;br /&gt;
Some motherboards have the sub/center channels switched. In this case, a ⅛&amp;quot; mini-jack to stereo RCA cable can be used.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== miniSim Operation ==&lt;br /&gt;
=== Q: Auto-start miniSim drive===&lt;br /&gt;
The miniSim simulator can be configured to start a drive automatically or not, depending on your project requirements.  &lt;br /&gt;
&lt;br /&gt;
This involves a '''''system level configuration change'''''.  To run two projects simultaneously you will need to create a unique startup sequence for each project in order to use the correct configuration file.&lt;br /&gt;
&lt;br /&gt;
Setting auto-start involves a setting in the hardware.xml file in use; note there are different configuration files present on all miniSim simulators within this folder:&lt;br /&gt;
&lt;br /&gt;
miniSim_x.x\bin.x64\config&lt;br /&gt;
&lt;br /&gt;
Please exit miniSim before editing any .xml file.  You may want to backup these files prior to editing.&lt;br /&gt;
&lt;br /&gt;
'''Enable auto-start'''&lt;br /&gt;
&lt;br /&gt;
Change the string&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable auto-start, set the value to 0.&lt;br /&gt;
&lt;br /&gt;
=== Q: miniSim is not responding. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;A: At times you may find that your miniSim PC or miniSim software has become unresponsive. We define appropriate steps for correcting unresponsive behavior on a miniSim PC under the following conditions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''miniSim Software is Running but Will Not Load a Drive Scenario:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.  &lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart the miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# This step will fix this unresponsive behavior most of the time. &lt;br /&gt;
* '''A miniSim Drive Has Been Selected but Will Not Start:'''&lt;br /&gt;
: Assuming the mouse is functioning, click on the Settings tab and verify all lines are green (ready mode). If one or more lines are red, simply wait for all to become green. If still not green after about 90 seconds, close and restart the miniSim software normally. This step will fix this unresponsive behavior most of the time.&lt;br /&gt;
* '''miniSim Software Stops Running:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.&lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# If the miniSim software will not close, press Ctrl+Alt+Delete and open Task Manager. Within Task Manager, select the SimopServer program and close it. Restart miniSim.&lt;br /&gt;
# This process generally will recover miniSim from nearly any unresponsive state.&lt;br /&gt;
* '''miniSim PC Shuts Down Unexpectedly:'''&lt;br /&gt;
# Check for severe storms and possible power outages in your neighborhood.&lt;br /&gt;
# If you see smoke or smell something burning near the miniSim PC, carefully unplug the PC from the electrical outlet and fetch your fire extinguisher just in case. When immediate danger passes, consult a local hardware expert to examine your PC for possible electrical shorts, overheating or failure of critical systems such as motherboard, hard drive and etc. Contact NADS miniSim in the event hardware components need to be replaced. See contact information below.&lt;br /&gt;
* '''The miniSim PC Will Not Boot:'''&lt;br /&gt;
# On rare occasions your miniSim PC may not boot to Windows. It may halt the boot process just prior to launching Windows. If your miniSim PC has stopped the boot process before a Windows launch, it is okay to touch the reset button on the PC (the small button next to the power button). If your miniSim PC does not have a reset button, touch the power button lightly one time. There may be a slight delay but then your miniSim PC will restart the boot process.  This is the safest way to handle an uncompleted boot sequence.&lt;br /&gt;
# In most cases if the system stops prematurely during the boot process, for example, while displaying the motherboard splash screen (typically AMI) or the blinking cursor just prior to the Windows logo, the PC is having trouble enumerating USB devices before loading windows.  &lt;br /&gt;
# If the system hangs up during the second boot attempt, please check the USB connections. In particular, be sure the mouse and keyboard (typically connected through a USB hub) are in their designated USB ports i.e. nearest to the round PS2 style port (top for tower systems or far left for rackmount systems). These are typically USB 2.0 ports and are checked first during the USB enumeration process at boot. It is critical that the mouse/keyboard connections are made in this way.&lt;br /&gt;
# If the mouse/keyboard are connected to the correct USB ports, and your miniSim PC still does not boot, disconnect all USB devices (except mouse and keyboard) and systematically reconnect them one at a time in between reboots. This process will eventually and effectively isolate which USB device may be causing the boot problem. To resolve this conflict, simply plug the suspected USB device into a different USB port. Moving these devices to a different port typically resolves this problem permanently. It often (unfortunately) requires some experimentation (read trial and error) but once you find the right combination of USB devices and ports, this problem goes away.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, there are certain steps you should not take to try and resolve an unresponsive miniSim PC condition. Some tactics could actually make the problem worse e.g. damage hard drives, corrupt the operating system, scramble your data. Here are some activities you should not engage in to try and resolve a hanging miniSim PC:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Troubleshooting steps you should NOT try:'''&lt;br /&gt;
* Do not press and hold the power button on the PC while miniSim is running.&lt;br /&gt;
* Do not unplug the PC from electrical outlet while miniSim is running.&lt;br /&gt;
* Do not unplug mouse, monitors or keyboard while miniSim is running.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Acceptable methods for shutting down an unresponsive PC:'''&lt;br /&gt;
* Close all running programs, press the Windows key and select Shut Down.&lt;br /&gt;
* Or, press Ctrl+Alt+Delete and select Shut Down.&lt;br /&gt;
* Or, touch the reset button or lightly touch the power button one time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Making Changes to the BIOS====&lt;br /&gt;
&lt;br /&gt;
If your miniSim PC is unresponsive in ways that are not covered above, you may need to make certain changes to the BIOS of your miniSim PC. Altering BIOS settings on a PC is delicate work and requires more than a passing knowledge of computers.  Instructions for modifying the BIOS follows but if you would like the assistance of a NADS professional, don’t hesitate to ask. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The BIOS change involves enabling Fast Boot. Fast Boot will disable your USB devices at boot-up thus preventing USB port conflicts and effectively preventing endless USB enumeration and rebooting.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enter BIOS setup, repeatedly press the Delete key while the computer is powering up.  Ultimately you will see a screen that looks like the screen shot below. (This assumes your miniSim PC was built in 2015 or later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Initial BIOS Screen.jpg|400px|thumb|center|Initial BIOS Screen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Navigate to the '''Advanced tab''' using the arrow keys on your keyboard and select it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.jpg|400px|thumb|center|Advanced Tab Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scroll down and select '''USB Configuration.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:USB Configuration.jpg|400px|thumb|center|USB Configuration Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make sure your BIOS settings match the settings on the right half of the screen as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:BIOS Settings.jpg|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set '''Fast Boot''' to '''Fast.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Fast Boot Selected.jpg|400px|thumb|center|Fast Boot set to Fast]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select '''Save Changes and Exit'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Save Changes and Exit.jpg|400px|thumb|center|Save Changes and Exit selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: these settings will disable your USB devices during boot. This will eliminate the USB enumeration problem but will also prevent you from accessing BIOS settings again without a PS2 style keyboard. Feel free to contact NADS for additional information on this condition.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bear in mind your BIOS screens may look different than the screenshots above but your objective remains the same, enable Fast Boot.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please don’t hesitate to contact us if you wish help with these settings. '''Word of Caution:''' make these changes during normal business hours. If you get stuck in BIOS settings on a weekend or middle of the night, we may not be available to help you.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= miniSim Software =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation data ===&lt;br /&gt;
Your data is the primary reason for simulation and is available from the miniSim in two ways:&lt;br /&gt;
&lt;br /&gt;
# Default measures - these are pre-defined measures available for up to 20 events.&lt;br /&gt;
# Logstreams - the entire range of variables is available for as many events as required.&lt;br /&gt;
&lt;br /&gt;
These two methods require setting up a scenario to create [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#What_is_a_Scenario_Event.3F '''events'''] that happen during simulation and are defined in a way to allow extracting them from the drive.&lt;br /&gt;
&lt;br /&gt;
Default measures are available immediately after the drive in the form of a text document, located in the DAQ folder on miniSim.&lt;br /&gt;
&lt;br /&gt;
Logstreams are flags embedded in the drive data and requires data reduction to make the information available after the drive.&lt;br /&gt;
&lt;br /&gt;
More information on these methods is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Data_Output_Methods here:]&lt;br /&gt;
&lt;br /&gt;
= ISAT/Scenario =&lt;br /&gt;
&lt;br /&gt;
=== New to ISAT? ===&lt;br /&gt;
A quick start overview is available [https://www.nads-sc.uiowa.edu/minisim/wiki/images/6/68/ISAT_Quick_Start.pdf '''here.'''] &lt;br /&gt;
&lt;br /&gt;
The ISAT User Guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents '''here.''']&lt;br /&gt;
&lt;br /&gt;
A scenario/ISAT troubleshooting guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Troubleshooting_Guide '''here.''']&lt;br /&gt;
&lt;br /&gt;
=== Data Logging: miniSim Default Measures ===&lt;br /&gt;
There are a fixed number of measures available and a limit of 20 events.&lt;br /&gt;
&lt;br /&gt;
More information including which measures are available and how to structure your scenario to support default measures is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Default_miniSim_Scenario_Measures here.]&lt;br /&gt;
&lt;br /&gt;
=== Q: How do we make an ADO or DDO go backward? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: Only DDOs can back up. To accomplish this, start by placing a DDO where desired.&lt;br /&gt;
&lt;br /&gt;
Next, create a path for the DDO; right-click on it and select Extend Path from the pop-up menu.&lt;br /&gt;
&lt;br /&gt;
Then, lay out a path (path nodes are a sequence of yellow dots) to indicate the desired route of travel.&lt;br /&gt;
&lt;br /&gt;
Finally, right-click on each node and select Rotate to set the direction that you wish the DDO to face. The direction at each node can be set independently.&lt;br /&gt;
&lt;br /&gt;
In order to make it appear as though the car is moving backwards, the arrows should point against the direction of travel. To avoid erratic movement, you should add sufficient nodes to create a smooth path. This will result in smoother and more realistic movement of the DDO, especially if you are changing direction rapidly.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I play a sound in my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario Using Audio in a Scenario]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I add a trigger to my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggers can be added to a scenario in ISAT through the menu '''Insert &amp;gt;&amp;gt; Coordinators'''&lt;br /&gt;
or, if the ISAT Elements panel is open, by left-click-drag any trigger off the panel and then releasing the left button where you want to place the trigger.&lt;br /&gt;
&lt;br /&gt;
After a trigger has been placed in your scenario you can reposition it by clicking and dragging it to a new location.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Trigger consist of multiple elements.  To reposition a trigger you will have to click-drag the trigger handle, which is a small red dot.  Clicking the larger trigger pane will move the pane, not the handle.  Moving the handle will move the trigger.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h07_26.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Some triggers also require a roadpad (roadpad, follow, Time To Arrival triggers).&lt;br /&gt;
Right-click on the trigger and choose '''Place Road Pad.'''&lt;br /&gt;
&lt;br /&gt;
'''Note: All triggers with road pads require a [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Triggers '''predicate'''] to activate the trigger.'''&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is a “Write to Cell” action? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cells are reserved data containers that define various attributes and operating characteristics of the miniSim and are stored after each drive in a unique drive DAQ file.&lt;br /&gt;
&lt;br /&gt;
A '''write to cell''' action allows you to send data to miniSim and simultaneously store this data in the DAQ file during simulation.  &lt;br /&gt;
&lt;br /&gt;
Most cells are managed by a subsystem (behaviors, dynamics, scenario control).  For these cells, writing to a cell is possible but not practical because the managing subsystem will overwrite that cell within the next frame.&lt;br /&gt;
&lt;br /&gt;
'''Examples''' (not a complete list!):&lt;br /&gt;
# Play a sound/audio file: Write to Cell SCC_Audio_Trigger&lt;br /&gt;
# Set event status or an event number for default miniSim data measures: Write to Cell SCC_Event_Status, SCC_Event_Number&lt;br /&gt;
# Saving data during a drive to the DAQ so it is available for analysis; i.e., timing of things, storing scenario variable data (variables are not persistent unless saved to a file or written to the DAQ): Write to Cell SCC_Custom1, or user defined&lt;br /&gt;
# Changing a simulator setting (Adaptive Cruise Control on/off, Automatic Lane Following): Write to Cell SCC_ALF_On, SCC_ACC_On&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Write to cell actions are expensive operations and there is currently a limit of 7 per frame.  '''Exceeding this number will likely result in the excess cells not being written'''. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some cells are managed by the Cab Information/Hardware subsystem (CIS).  Configuring miniSim to support operation by both scenario and CIS may require consulting with NADS to ensure correct operation.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell if the driver has left the road? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
One way to check if the driver has left the roadway is to use a lane deviation calculation: if the lane deviation is greater than &amp;lt;measured_total_lane_width&amp;gt; or less than -&amp;lt;measured_total_lane_width&amp;gt;, the driver is likely out of the lane.&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell what surface the driver is driving over?  ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Use the cell '''TPR_Surface_Type_Ind to detect the surface material code (SMC) under the driver. &lt;br /&gt;
&lt;br /&gt;
The first four elements of the TPR_Surface_Type_Ind correspond to 4 wheels of the ownship/external driver vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_16.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_27.png|400px]]&lt;br /&gt;
&lt;br /&gt;
MiniSim does not report surface material codes within intersections that do not have an elevation map associated with them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h22_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can find a complete list of available surface material codes (SMC) - (not all of these are used in the tile library, but this is the current version for SMC codes) under the TMT\ProjectData\Tiles\CommonLRIData\SurfaceMaterialSpecifications.xlsx.  &lt;br /&gt;
 &lt;br /&gt;
'''Note:''' Intersection elevation maps were introduced in TMT '''1.8.5'''.&lt;br /&gt;
 &lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the difference between SCC_Lane_Deviation and SCC_Lane_Spline_Deviation?  ===&lt;br /&gt;
&lt;br /&gt;
SCC_Lane_Spline_Deviation is computed from centerline data as a continuous spline and is recommended over SCC_Lane_Deviation.&lt;br /&gt;
&lt;br /&gt;
[[File:scc_lane_spline_deviation_20230918.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=4021</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=4021"/>
				<updated>2024-07-15T17:17:39Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* miniSim Data Dictionary update pdf file to new version containing SOP_Weather cells */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
== miniSim Data Dictionary ==&lt;br /&gt;
The data dictionary is a compilation of the simulator data that is stored and available within the DAQ file after each drive. &lt;br /&gt;
&lt;br /&gt;
[[:File:Cells-miniSim-20240715.pdf]]&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
miniSim users may extend the data dictionary by adding custom cells to the collect and schedule files:&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSimCollect.general.txt&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSim.cec&lt;br /&gt;
&lt;br /&gt;
Typically new cells should be added into one of the SCNVIF sections.  Use the same SCNVIF section for both files:&lt;br /&gt;
&lt;br /&gt;
*cell 1 SCNVIF&lt;br /&gt;
*cell 7 SCNVIF&lt;br /&gt;
*cell 8 SCNVIF&lt;br /&gt;
*cell 9 SCNVIF&lt;br /&gt;
&lt;br /&gt;
== miniSim Documentation ==&lt;br /&gt;
All miniSim simulators ship with a documentation folder located on the desktop.  You can find miniSim and additional documentation within this folder.&lt;br /&gt;
&lt;br /&gt;
== miniSim Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Desktop and Viewport Settings ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detailed information about the PC display layout and the miniSim viewport and channel configuration settings is available here:&lt;br /&gt;
&lt;br /&gt;
[[:File:miniSim-Desktop_and_Viewport-Settings-v3_113022.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: My miniSim displays have changed.  What happened, and how can I fix it? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows has shown a tendency to re-enumerate the displays from time to time.  The result is that the miniSim display layout/configuration becomes incorrect.&lt;br /&gt;
&lt;br /&gt;
The relationship between the display layout and the viewport display settings in the miniSim Channel Configuration File (.ccf) no longer match.&lt;br /&gt;
&lt;br /&gt;
To correct, check the following in this order:&lt;br /&gt;
#	Displays are arranged from left to right: Matrox/Mosaic, Instrument Panel, Operator.(use mouse or arrow keys)&lt;br /&gt;
#	The Matrox/Mosaic display must be designated as the ‘main’ or ‘primary’ in Windows. The task bar may move to this display when this is set, so drag the task bar and icons to the operator display&lt;br /&gt;
#	Do not use the Matrox PowerDesk program to adjust the default locations for pop-up and application windows. This will cause many, many problems.&lt;br /&gt;
#	The top edges of the display icons are aligned (use mouse or arrow keys)&lt;br /&gt;
#	Reboot to make sure the configuration is stable. &lt;br /&gt;
#	Check video and USB connections. If they are loose, it may cause windows to re number the displays, which can make things move around unpredictably.&lt;br /&gt;
#	Open the correct Channel Configuration File (.ccf) in the \bin.x64 directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' there are several .ccf files in every system, and the ‘correct’ one is defined by the system settings in the ‘go.cmd’ file used to start miniSim.&lt;br /&gt;
&lt;br /&gt;
See next section. The third number in the Channel header(s) should be equal to the number of the main display as reported by Windows in ‘Display Settings’ minus 1. Only 0, 1, 2 are generally valid for standard miniSim configurations (2 Channel, 3 displays).&lt;br /&gt;
&lt;br /&gt;
:Channel 0 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 1.000000 1.000000&lt;br /&gt;
:6&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:Channel 1 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:1.000000 0.000000 2.000000 1.000000&lt;br /&gt;
:0 IP&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the right Channel Configuration File for my miniSim? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. to determine the correct ccf file, examine the command file that launches miniSim.&lt;br /&gt;
&lt;br /&gt;
The minisim is launched by running the correct go.cmd file in the '''NadsMiniSim_x.x.x\bin.x64''' folder.&lt;br /&gt;
&lt;br /&gt;
Typically, there have been shortcuts created on the miniSim desktop that are used to run the appropriate ‘go’ scripts.  There are often several go-scripts, this is usually to provide a way to launch the miniSim with or without various options (Video Capture, Advanced Automation, etc).&lt;br /&gt;
&lt;br /&gt;
If you right-click on the shortcut icon and choose ‘edit’ you can edit the go.cmd script.  A typical one looks like this:&lt;br /&gt;
&lt;br /&gt;
:set MININADSCOMMMODE=PSEXEC&lt;br /&gt;
:set DYNA=car&lt;br /&gt;
:set NUMCHN='''2'''&lt;br /&gt;
:set INSTRUMENTS='''on'''&lt;br /&gt;
:set FORMAT='''wide'''&lt;br /&gt;
:set INSETVIEW=off&lt;br /&gt;
:set SIDEMIRRORS='''on'''&lt;br /&gt;
:set MININADSDAQ='''on'''&lt;br /&gt;
&lt;br /&gt;
Based on these settings, the miniSim will read the following channel configuration file (.ccf) and use its contents for setting up the rendering channels and viewports.  In this case, the miniSim will open this file:&lt;br /&gt;
'''\bin.x64\mininads_2ch.wide.sidemirrors.inst.ccf'''&lt;br /&gt;
&lt;br /&gt;
This is the correct file to edit for this configuration. Remember to exit miniSim before making edits to the .ccf file.&lt;br /&gt;
'''If you make a change and see no effect, you may be editing the wrong file!'''&lt;br /&gt;
&lt;br /&gt;
When the miniSim runs, it copies the .ccf file that pertains to the options selected in the go.cmd, and copies it to '''mininads_1ch.ccf''', which is the one that is loaded when miniSim is launched.&lt;br /&gt;
&lt;br /&gt;
This means that the '''mininads_1ch.ccf''' has the same ‘Last Modified Date’ as the file you want to edit.&lt;br /&gt;
&lt;br /&gt;
If you list the contents of the \bin.X64 folder by date, you will see something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h03_56.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In this case, you will see that the '''mininads_2ch.wide.sidemirrors.inst.ccf''' is the file you want to edit, as it has the same last modified date as '''mininads_1ch.ccf'''.&lt;br /&gt;
&lt;br /&gt;
For a desktop layout like this from Windows in ‘Display Settings’&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h05_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This is a '''Two-Channel''' system, meaning that the front three displays on the Matrox/Mosaic are Channel 0, and the Instrument Panel display is Channel 1.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: Where do I find data relating to the brake pedal force/position? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: The data you are seeking is represented by the '''CFS_Brake_Pedal_Force''' variable, which can be viewed either with ISAT or with Matlab during data reduction. The value ranges from 0 lbs. to 180 lbs., where 0 indicates no force (no pedal travel) and 180 indicates 180 pounds of force (full pedal travel).&lt;br /&gt;
&lt;br /&gt;
If you see a variable named '''CFS_Brake_Pedal_Position''' you may ignore this as it is not currently being used.   &lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I adjust the brake pedal response? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Information to adjust the brake pedal response is detailed in this document: [[:File:Adjust_Brake_Response_11302022.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: The tactile transducer, mounted under the cab, suddenly does not respond when the miniSim is running. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the following:&lt;br /&gt;
&lt;br /&gt;
1. Verify these connections first:&lt;br /&gt;
: a. The main stereo speakers should be plugged into the green audio port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: b. The Dayton D-30 amplifier should be plugged into the orange port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: c. The tactile transducer should be connected to the Dayton D-30 amplifier using the included speaker wire.&lt;br /&gt;
&lt;br /&gt;
2. Note that the amplifier controls the volume of the tactile transducer and therefore must be plugged into a power source. If the amplifier is not plugged into power, this could be the reason the tactile transducer is not working.&lt;br /&gt;
&lt;br /&gt;
3. Check the volume level of the amplifier. If it is set too low, the tactile transducer may '''appear''' to not be working. We suggest a minimum amplifier volume setting of 25% of full volume. A volume setting which is too high will be experienced as an unpleasant vibration and low-end rumble that does not resemble a real car. &lt;br /&gt;
&lt;br /&gt;
4. Launch the Realtek audio manager from the Task Bar and select 5.1 audio. Then, disable the center and rear channels, leaving the front left and right speakers, and the subwoofer enabled.&lt;br /&gt;
&lt;br /&gt;
5. Use the Realtek audio manager to test each of the speakers individually by clicking on each speaker icon. As you select a speaker, the speaker will sound.  &lt;br /&gt;
&lt;br /&gt;
Some motherboards have the sub/center channels switched. In this case, a ⅛&amp;quot; mini-jack to stereo RCA cable can be used.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== miniSim Operation ==&lt;br /&gt;
=== Q: Auto-start miniSim drive===&lt;br /&gt;
The miniSim simulator can be configured to start a drive automatically or not, depending on your project requirements.  &lt;br /&gt;
&lt;br /&gt;
This involves a '''''system level configuration change'''''.  To run two projects simultaneously you will need to create a unique startup sequence for each project in order to use the correct configuration file.&lt;br /&gt;
&lt;br /&gt;
Setting auto-start involves a setting in the hardware.xml file in use; note there are different configuration files present on all miniSim simulators within this folder:&lt;br /&gt;
&lt;br /&gt;
miniSim_x.x\bin.x64\config&lt;br /&gt;
&lt;br /&gt;
Please exit miniSim before editing any .xml file.  You may want to backup these files prior to editing.&lt;br /&gt;
&lt;br /&gt;
'''Enable auto-start'''&lt;br /&gt;
&lt;br /&gt;
Change the string&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable auto-start, set the value to 0.&lt;br /&gt;
&lt;br /&gt;
=== Q: miniSim is not responding. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;A: At times you may find that your miniSim PC or miniSim software has become unresponsive. We define appropriate steps for correcting unresponsive behavior on a miniSim PC under the following conditions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''miniSim Software is Running but Will Not Load a Drive Scenario:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.  &lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart the miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# This step will fix this unresponsive behavior most of the time. &lt;br /&gt;
* '''A miniSim Drive Has Been Selected but Will Not Start:'''&lt;br /&gt;
: Assuming the mouse is functioning, click on the Settings tab and verify all lines are green (ready mode). If one or more lines are red, simply wait for all to become green. If still not green after about 90 seconds, close and restart the miniSim software normally. This step will fix this unresponsive behavior most of the time.&lt;br /&gt;
* '''miniSim Software Stops Running:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.&lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# If the miniSim software will not close, press Ctrl+Alt+Delete and open Task Manager. Within Task Manager, select the SimopServer program and close it. Restart miniSim.&lt;br /&gt;
# This process generally will recover miniSim from nearly any unresponsive state.&lt;br /&gt;
* '''miniSim PC Shuts Down Unexpectedly:'''&lt;br /&gt;
# Check for severe storms and possible power outages in your neighborhood.&lt;br /&gt;
# If you see smoke or smell something burning near the miniSim PC, carefully unplug the PC from the electrical outlet and fetch your fire extinguisher just in case. When immediate danger passes, consult a local hardware expert to examine your PC for possible electrical shorts, overheating or failure of critical systems such as motherboard, hard drive and etc. Contact NADS miniSim in the event hardware components need to be replaced. See contact information below.&lt;br /&gt;
* '''The miniSim PC Will Not Boot:'''&lt;br /&gt;
# On rare occasions your miniSim PC may not boot to Windows. It may halt the boot process just prior to launching Windows. If your miniSim PC has stopped the boot process before a Windows launch, it is okay to touch the reset button on the PC (the small button next to the power button). If your miniSim PC does not have a reset button, touch the power button lightly one time. There may be a slight delay but then your miniSim PC will restart the boot process.  This is the safest way to handle an uncompleted boot sequence.&lt;br /&gt;
# In most cases if the system stops prematurely during the boot process, for example, while displaying the motherboard splash screen (typically AMI) or the blinking cursor just prior to the Windows logo, the PC is having trouble enumerating USB devices before loading windows.  &lt;br /&gt;
# If the system hangs up during the second boot attempt, please check the USB connections. In particular, be sure the mouse and keyboard (typically connected through a USB hub) are in their designated USB ports i.e. nearest to the round PS2 style port (top for tower systems or far left for rackmount systems). These are typically USB 2.0 ports and are checked first during the USB enumeration process at boot. It is critical that the mouse/keyboard connections are made in this way.&lt;br /&gt;
# If the mouse/keyboard are connected to the correct USB ports, and your miniSim PC still does not boot, disconnect all USB devices (except mouse and keyboard) and systematically reconnect them one at a time in between reboots. This process will eventually and effectively isolate which USB device may be causing the boot problem. To resolve this conflict, simply plug the suspected USB device into a different USB port. Moving these devices to a different port typically resolves this problem permanently. It often (unfortunately) requires some experimentation (read trial and error) but once you find the right combination of USB devices and ports, this problem goes away.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, there are certain steps you should not take to try and resolve an unresponsive miniSim PC condition. Some tactics could actually make the problem worse e.g. damage hard drives, corrupt the operating system, scramble your data. Here are some activities you should not engage in to try and resolve a hanging miniSim PC:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Troubleshooting steps you should NOT try:'''&lt;br /&gt;
* Do not press and hold the power button on the PC while miniSim is running.&lt;br /&gt;
* Do not unplug the PC from electrical outlet while miniSim is running.&lt;br /&gt;
* Do not unplug mouse, monitors or keyboard while miniSim is running.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Acceptable methods for shutting down an unresponsive PC:'''&lt;br /&gt;
* Close all running programs, press the Windows key and select Shut Down.&lt;br /&gt;
* Or, press Ctrl+Alt+Delete and select Shut Down.&lt;br /&gt;
* Or, touch the reset button or lightly touch the power button one time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Making Changes to the BIOS====&lt;br /&gt;
&lt;br /&gt;
If your miniSim PC is unresponsive in ways that are not covered above, you may need to make certain changes to the BIOS of your miniSim PC. Altering BIOS settings on a PC is delicate work and requires more than a passing knowledge of computers.  Instructions for modifying the BIOS follows but if you would like the assistance of a NADS professional, don’t hesitate to ask. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The BIOS change involves enabling Fast Boot. Fast Boot will disable your USB devices at boot-up thus preventing USB port conflicts and effectively preventing endless USB enumeration and rebooting.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enter BIOS setup, repeatedly press the Delete key while the computer is powering up.  Ultimately you will see a screen that looks like the screen shot below. (This assumes your miniSim PC was built in 2015 or later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Initial BIOS Screen.jpg|400px|thumb|center|Initial BIOS Screen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Navigate to the '''Advanced tab''' using the arrow keys on your keyboard and select it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.jpg|400px|thumb|center|Advanced Tab Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scroll down and select '''USB Configuration.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:USB Configuration.jpg|400px|thumb|center|USB Configuration Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make sure your BIOS settings match the settings on the right half of the screen as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:BIOS Settings.jpg|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set '''Fast Boot''' to '''Fast.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Fast Boot Selected.jpg|400px|thumb|center|Fast Boot set to Fast]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select '''Save Changes and Exit'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Save Changes and Exit.jpg|400px|thumb|center|Save Changes and Exit selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: these settings will disable your USB devices during boot. This will eliminate the USB enumeration problem but will also prevent you from accessing BIOS settings again without a PS2 style keyboard. Feel free to contact NADS for additional information on this condition.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bear in mind your BIOS screens may look different than the screenshots above but your objective remains the same, enable Fast Boot.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please don’t hesitate to contact us if you wish help with these settings. '''Word of Caution:''' make these changes during normal business hours. If you get stuck in BIOS settings on a weekend or middle of the night, we may not be available to help you.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= miniSim Software =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation data ===&lt;br /&gt;
Your data is the primary reason for simulation and is available from the miniSim in two ways:&lt;br /&gt;
&lt;br /&gt;
# Default measures - these are pre-defined measures available for up to 20 events.&lt;br /&gt;
# Logstreams - the entire range of variables is available for as many events as required.&lt;br /&gt;
&lt;br /&gt;
These two methods require setting up a scenario to create [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#What_is_a_Scenario_Event.3F '''events'''] that happen during simulation and are defined in a way to allow extracting them from the drive.&lt;br /&gt;
&lt;br /&gt;
Default measures are available immediately after the drive in the form of a text document, located in the DAQ folder on miniSim.&lt;br /&gt;
&lt;br /&gt;
Logstreams are flags embedded in the drive data and requires data reduction to make the information available after the drive.&lt;br /&gt;
&lt;br /&gt;
More information on these methods is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Data_Output_Methods here:]&lt;br /&gt;
&lt;br /&gt;
= ISAT/Scenario =&lt;br /&gt;
&lt;br /&gt;
=== New to ISAT? ===&lt;br /&gt;
A quick start overview is available [https://www.nads-sc.uiowa.edu/minisim/wiki/images/6/68/ISAT_Quick_Start.pdf '''here.'''] &lt;br /&gt;
&lt;br /&gt;
The ISAT User Guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents '''here.''']&lt;br /&gt;
&lt;br /&gt;
A scenario/ISAT troubleshooting guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Troubleshooting_Guide '''here.''']&lt;br /&gt;
&lt;br /&gt;
=== Data Logging: miniSim Default Measures ===&lt;br /&gt;
There are a fixed number of measures available and a limit of 20 events.&lt;br /&gt;
&lt;br /&gt;
More information including which measures are available and how to structure your scenario to support default measures is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Default_miniSim_Scenario_Measures here.]&lt;br /&gt;
&lt;br /&gt;
=== Q: How do we make an ADO or DDO go backward? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: Only DDOs can back up. To accomplish this, start by placing a DDO where desired.&lt;br /&gt;
&lt;br /&gt;
Next, create a path for the DDO; right-click on it and select Extend Path from the pop-up menu.&lt;br /&gt;
&lt;br /&gt;
Then, lay out a path (path nodes are a sequence of yellow dots) to indicate the desired route of travel.&lt;br /&gt;
&lt;br /&gt;
Finally, right-click on each node and select Rotate to set the direction that you wish the DDO to face. The direction at each node can be set independently.&lt;br /&gt;
&lt;br /&gt;
In order to make it appear as though the car is moving backwards, the arrows should point against the direction of travel. To avoid erratic movement, you should add sufficient nodes to create a smooth path. This will result in smoother and more realistic movement of the DDO, especially if you are changing direction rapidly.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I play a sound in my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario Using Audio in a Scenario]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I add a trigger to my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggers can be added to a scenario in ISAT through the menu '''Insert &amp;gt;&amp;gt; Coordinators'''&lt;br /&gt;
or, if the ISAT Elements panel is open, by left-click-drag any trigger off the panel and then releasing the left button where you want to place the trigger.&lt;br /&gt;
&lt;br /&gt;
After a trigger has been placed in your scenario you can reposition it by clicking and dragging it to a new location.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Trigger consist of multiple elements.  To reposition a trigger you will have to click-drag the trigger handle, which is a small red dot.  Clicking the larger trigger pane will move the pane, not the handle.  Moving the handle will move the trigger.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h07_26.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Some triggers also require a roadpad (roadpad, follow, Time To Arrival triggers).&lt;br /&gt;
Right-click on the trigger and choose '''Place Road Pad.'''&lt;br /&gt;
&lt;br /&gt;
'''Note: All triggers with road pads require a [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Triggers '''predicate'''] to activate the trigger.'''&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is a “Write to Cell” action? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cells are reserved data containers that define various attributes and operating characteristics of the miniSim and are stored after each drive in a unique drive DAQ file.&lt;br /&gt;
&lt;br /&gt;
A '''write to cell''' action allows you to send data to miniSim and simultaneously store this data in the DAQ file during simulation.  &lt;br /&gt;
&lt;br /&gt;
Most cells are managed by a subsystem (behaviors, dynamics, scenario control).  For these cells, writing to a cell is possible but not practical because the managing subsystem will overwrite that cell within the next frame.&lt;br /&gt;
&lt;br /&gt;
'''Examples''' (not a complete list!):&lt;br /&gt;
# Play a sound/audio file: Write to Cell SCC_Audio_Trigger&lt;br /&gt;
# Set event status or an event number for default miniSim data measures: Write to Cell SCC_Event_Status, SCC_Event_Number&lt;br /&gt;
# Saving data during a drive to the DAQ so it is available for analysis; i.e., timing of things, storing scenario variable data (variables are not persistent unless saved to a file or written to the DAQ): Write to Cell SCC_Custom1, or user defined&lt;br /&gt;
# Changing a simulator setting (Adaptive Cruise Control on/off, Automatic Lane Following): Write to Cell SCC_ALF_On, SCC_ACC_On&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Write to cell actions are expensive operations and there is currently a limit of 7 per frame.  '''Exceeding this number will likely result in the excess cells not being written'''. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some cells are managed by the Cab Information/Hardware subsystem (CIS).  Configuring miniSim to support operation by both scenario and CIS may require consulting with NADS to ensure correct operation.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell if the driver has left the road? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
One way to check if the driver has left the roadway is to use a lane deviation calculation: if the lane deviation is greater than &amp;lt;measured_total_lane_width&amp;gt; or less than -&amp;lt;measured_total_lane_width&amp;gt;, the driver is likely out of the lane.&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell what surface the driver is driving over?  ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Use the cell '''TPR_Surface_Type_Ind to detect the surface material code (SMC) under the driver. &lt;br /&gt;
&lt;br /&gt;
The first four elements of the TPR_Surface_Type_Ind correspond to 4 wheels of the ownship/external driver vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_16.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_27.png|400px]]&lt;br /&gt;
&lt;br /&gt;
MiniSim does not report surface material codes within intersections that do not have an elevation map associated with them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h22_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can find a complete list of available surface material codes (SMC) - (not all of these are used in the tile library, but this is the current version for SMC codes) under the TMT\ProjectData\Tiles\CommonLRIData\SurfaceMaterialSpecifications.xlsx.  &lt;br /&gt;
 &lt;br /&gt;
'''Note:''' Intersection elevation maps were introduced in TMT '''1.8.5'''.&lt;br /&gt;
 &lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the difference between SCC_Lane_Deviation and SCC_Lane_Spline_Deviation?  ===&lt;br /&gt;
&lt;br /&gt;
SCC_Lane_Spline_Deviation is computed from centerline data as a continuous spline and is recommended over SCC_Lane_Deviation.&lt;br /&gt;
&lt;br /&gt;
[[File:scc_lane_spline_deviation_20230918.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Cells-miniSim-20240715.pdf&amp;diff=4020</id>
		<title>File:Cells-miniSim-20240715.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Cells-miniSim-20240715.pdf&amp;diff=4020"/>
				<updated>2024-07-15T17:16:47Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=TMT_User_Guide_(versions_1.8_%26_greater)&amp;diff=3987</id>
		<title>TMT User Guide (versions 1.8 &amp; greater)</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=TMT_User_Guide_(versions_1.8_%26_greater)&amp;diff=3987"/>
				<updated>2023-11-30T16:04:32Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Summary of changes in this version surface materials verbag*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;This document is in beta 02.11.2020&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Who should use this document ==&lt;br /&gt;
This document is for use with TMT version 1.8 or greater.  Do '''NOT''' use this document if you are working with a TMT version less than 1.8.&lt;br /&gt;
&lt;br /&gt;
== Summary of changes in this version==&lt;br /&gt;
This version of the Tile Mosaic Tool contains significant updates to the tile model library.&lt;br /&gt;
&lt;br /&gt;
'''Elevation Maps'''&lt;br /&gt;
Elevation maps have been implemented on some tile model intersections.  These are 3-D surfaces within an intersection.  The primary characteristic of elevation maps is they support different surface materials within an intersection.  &lt;br /&gt;
&lt;br /&gt;
Elevation maps are one way to determine curb strikes within an intersection based on a surface material code (SMC). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''NOTE:'''&lt;br /&gt;
Failure to use the correct rotation will produce a road network that ADOs cannot navigate because the elevation maps produce an offroad condition when the wrong rotation is used in the TMT.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:elev_maps_20200211.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Elevation map intersections include a 'rotation key' in the tile name.  Due to implementation requirements, it is '''required''' to rotate the tile model to the rotation specified.  &lt;br /&gt;
&lt;br /&gt;
'''Rotation Key'''&lt;br /&gt;
&lt;br /&gt;
No code = 0 degrees &lt;br /&gt;
A = 90 degrees &lt;br /&gt;
B = 180 degrees &lt;br /&gt;
C = 270 degrees &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tiles with intersection elevation maps that are not rotated (default rotation = zero degrees) are located in various tile categories.  Only tiles containing intersections can contain intersection elevation maps.&lt;br /&gt;
&lt;br /&gt;
'''Obsolete models'''&lt;br /&gt;
One significant change is that some tiles are now considered obsolete.  Obsolete models are contained within the tile category 'Obsolete'.&lt;br /&gt;
&lt;br /&gt;
It is '''strongly recommended''' that .MOS worlds using obsolete models be revised, as future versions of the Tile Mosaic Tool may not include those models.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''If a world.mos file contains tile models that are missing from the library and it is saved, that .mos file will become corrupted.&lt;br /&gt;
&lt;br /&gt;
There is currently no way to recover from this condition.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Obsolete tile category is included with this version to permit replacing obsolete models with compatible tiles.  It is strongly recommended that obsolete tiles be converted to the correlated tile model.&lt;br /&gt;
&lt;br /&gt;
A list of compatible models is included in the Appendix of this document.&lt;br /&gt;
&lt;br /&gt;
''' Transition tile category'''&lt;br /&gt;
&lt;br /&gt;
Transition tile  models are now grouped into a new '''Transition''' tile category.  If you require a transition between different roadway types, the Transition category is the place you will find it.&lt;br /&gt;
&lt;br /&gt;
'''New tile models'''&lt;br /&gt;
&lt;br /&gt;
Another change in this version is the addition of new tile models, listed below.&lt;br /&gt;
&lt;br /&gt;
'''bike_lane'''&lt;br /&gt;
This is a new tile category.  Tiles within the '''bike_lane''' category contain bicycle lanes, which are narrow lanes defined as Vehicle Restricted lanes.  This definition is intended to prevent typical ADOs from using this lane.  &lt;br /&gt;
&lt;br /&gt;
However, scenario authors '''should be able''' to author pedestrian and bicycle models that will use the bike lane.  In some cases it may be necessary to author scenarios using the standard road lane and apply a '''lane offset''' to shift the scenario object over into the target lane.&lt;br /&gt;
&lt;br /&gt;
'''bike_lane tile models'''&lt;br /&gt;
#2ln_3Mi_01&lt;br /&gt;
#2ln_3Mi_02&lt;br /&gt;
#2ln_4way_3Mi_01&lt;br /&gt;
#2ln_4way_3Mi_02&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Bike lanes are not necessarily included as a separate network adjacent to the road network.  At this time they are an attribute of the road.&lt;br /&gt;
&lt;br /&gt;
'''city tile models'''&lt;br /&gt;
#4ln_city_1x1_02&lt;br /&gt;
#4ln_city_1x1_crv90_02&lt;br /&gt;
#6ln_4way_01&lt;br /&gt;
#6ln_4way_02&lt;br /&gt;
#6ln_city_straight_01&lt;br /&gt;
#6ln_city_straight_02&lt;br /&gt;
&lt;br /&gt;
'''comm tile models'''&lt;br /&gt;
#2ln_4ln_3way_comm_02&lt;br /&gt;
#2ln_4ln_3way_comm_03&lt;br /&gt;
#4ln_4way_comm_01&lt;br /&gt;
#4ln_comm_straight&lt;br /&gt;
#4ln_comm_straight_04&lt;br /&gt;
#4ln_comm_straight_05&lt;br /&gt;
#4ln_res_3way_comm&lt;br /&gt;
#4ln_res_hill_curve01&lt;br /&gt;
&lt;br /&gt;
'''filler tile models'''&lt;br /&gt;
#gen_common_3x5&lt;br /&gt;
#urban_01&lt;br /&gt;
#urban_02&lt;br /&gt;
#urban_03&lt;br /&gt;
&lt;br /&gt;
'''fwy tile models'''&lt;br /&gt;
#fway_2ln_04&lt;br /&gt;
#fway_2ln_10k10kS_01&lt;br /&gt;
#fway_4ln_2ln_DTL01&lt;br /&gt;
#fway_4ln_straight_13x17&lt;br /&gt;
&lt;br /&gt;
'''railroad tile models'''&lt;br /&gt;
#railway_1xgrade_rural_01&lt;br /&gt;
#railway_1xgrade_rural_02&lt;br /&gt;
#railway_1x_straight&lt;br /&gt;
#railway_3xgrade_city_01&lt;br /&gt;
#railway_3xgrade_rural_01&lt;br /&gt;
#railway_3xgrade_rural_02&lt;br /&gt;
#railway_3x_straight&lt;br /&gt;
#railway_4ln_city_01&lt;br /&gt;
#railway_90&lt;br /&gt;
#railway_straight&lt;br /&gt;
&lt;br /&gt;
'''res tile models'''&lt;br /&gt;
#2ln_res_mult_school&lt;br /&gt;
#2ln_res_rural_trans&lt;br /&gt;
#2ln_straight_res&lt;br /&gt;
#2ln_straight_res_2&lt;br /&gt;
#res_2ln_3way&lt;br /&gt;
#res_2ln_3way_02&lt;br /&gt;
#res_3way&lt;br /&gt;
#res_3way_02&lt;br /&gt;
#res_90&lt;br /&gt;
#res_straight&lt;br /&gt;
&lt;br /&gt;
'''rural tile models'''&lt;br /&gt;
#2ln_3way_rural_res01&lt;br /&gt;
#4ln_1mi_02&lt;br /&gt;
&lt;br /&gt;
'''suburb tile models'''&lt;br /&gt;
#suburb_2mi_01&lt;br /&gt;
#suburb_90_01&lt;br /&gt;
#suburb_Scurve_01&lt;br /&gt;
&lt;br /&gt;
'''transition tile models'''&lt;br /&gt;
#2ln_fwy_2ln_rural&lt;br /&gt;
#2ln_fwy_3ln_fwy&lt;br /&gt;
#2ln_fwy_3ln_fwy_02&lt;br /&gt;
#2ln_fwy_4ln_fwy&lt;br /&gt;
#2ln_fwy_4ln_urban&lt;br /&gt;
#2ln_rural_2ln_gravel&lt;br /&gt;
#2ln_rural_2ln_gravel_02&lt;br /&gt;
#2ln_rural_2ln_res&lt;br /&gt;
#2ln_rural_2ln_res_3way&lt;br /&gt;
#2ln_rural_2ln_rural_10f_lane&lt;br /&gt;
#2ln_rural_2ln_rural_no_shoulder&lt;br /&gt;
#2ln_rural_3M_rural&lt;br /&gt;
#2ln_rural_4ln_city&lt;br /&gt;
#2ln_rural_4ln_rural&lt;br /&gt;
#3ln_fwy_3ln_urban&lt;br /&gt;
#4ln_BLVD_4ln_urban_e20&lt;br /&gt;
#4ln_BL_urban_2ln_rural&lt;br /&gt;
#4ln_city_4ln_BL_city&lt;br /&gt;
#4ln_city_4ln_BL_city_ROT_C&lt;br /&gt;
#4ln_rural_2ln_fwy&lt;br /&gt;
#4ln_suburb_2ln_rural&lt;br /&gt;
#4ln_suburb_2ln_rural_night&lt;br /&gt;
#4ln_urban_6ln_urban_day&lt;br /&gt;
#4ln_urban_6ln_urban_night&lt;br /&gt;
#5ln_urban_4ln_urban&lt;br /&gt;
&lt;br /&gt;
'''urban tile models'''&lt;br /&gt;
#4ln_urban_4x8_01&lt;br /&gt;
#urban_2ln_4ln_s1400A&lt;br /&gt;
#urban_4ln_arterial_02&lt;br /&gt;
#urban_4ln_straight_01&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
The Tile Mosaic Tool (TMT&amp;amp;trade;) was created to build visual and virtual correlated databases, a process generally known as world or database generation.  The TMT is used to arrange tile models into a configuration (world).  Tile models typically contain roads, terrain and feature objects.  The construction of these elements and additional models and textures require the use of 3rd party software for the creation of textured 3D models.  At the present time, only OpenFlight&amp;amp;trade; models and RGB format image files are supported by the TMT. Many commercially available (and many shareware or free) 3D programs can also be used for tile creation, but their output will need to be converted to OpenFlight&amp;amp;trade; format for use within the TMT.  For a partial list of applications, please see Appendix B.&lt;br /&gt;
&lt;br /&gt;
== '''Command line Syntax/Conventions''' ==&lt;br /&gt;
&lt;br /&gt;
In this document the following conventions are used for command line interaction.  #Information enclosed within bracket characters &amp;lt;like_this&amp;gt; is for user input. &lt;br /&gt;
#The phrase &amp;lt;ENTER&amp;gt; means that the user should press the Enter key, not to type in the word.&lt;br /&gt;
#Where the percent character is used to enclose a string, it indicates an environment variable or environment variable value.&lt;br /&gt;
&lt;br /&gt;
==  '''Getting Started''' ==&lt;br /&gt;
&lt;br /&gt;
The TMT tile library contains of a number of related model files which reside on your computer.  It is necessary that all tiles reside below a single parent directory (folder).  Within this top-level directory, sub-directories are used to divide the tile library into different categories.  Currently these categories consist of tiles with similar characteristics, but you are not limited to these.  Additional tile categories may be created under the top-level directory.  It is recommended that you do not change the basic tile category set, but you are able to add new tiles to existing categories, or create new categories for your tiles at any time.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Each tile model must be unique – you should not have two tiles within the library with the same name, even if they are in different categories. &lt;br /&gt;
&lt;br /&gt;
Start the TMT by double-clicking the icon.  You may want to open existing database worlds, or create a new world (terrain database).  To create a new world, choose New from the File menu (File &amp;gt;&amp;gt; New).  If the TMT has not been used on this computer before, you’ll have to preprocess the tile library in order to proceed.  Click Preprocess to load the tile library.  This procedure will occur only when the TMT is first used on your system, or when a tile geometry file (.FLT) has been modified.  The TMT loads the Tile Library automatically in normal use.&lt;br /&gt;
&lt;br /&gt;
To open an existing terrain database/world file, choose File &amp;gt;&amp;gt;Open and navigate to the database location on your computer.  &lt;br /&gt;
&lt;br /&gt;
The TMT workspace window will appear.  To place tiles into the terrain database, use the category tabs on the left to choose a tile category, and select a tile from the list by clicking with the left mouse button (LMB) on it.  This will “attach” the tile to the cursor.  Move the mouse to the right onto the terrain and position it, then LMB on any open grid to place the tile.  The TMT will attempt to snap the placed tile onto the terrain grid.  For more precise positioning, enable the terrain grid View &amp;gt;&amp;gt; Draw Attributes &amp;gt;&amp;gt; Grid and position the tile within the gridlines.&lt;br /&gt;
&lt;br /&gt;
You can rotate a tile while it is attached to the cursor by pressing any key. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' When you are placing tiles onto a terrain that already contains tiles, the tiles will attempt to connect only where tile edges are the same.  For example, the default tile edge is GEN (for General or Generic).  A GEN edge will not match with any other edge unless it is forced.  Although you can force tiles together, this is a procedure that has larger ramifications and can create visual and logical discontinuities and errors.  Forcing tiles should be carefully considered. &lt;br /&gt;
&lt;br /&gt;
When you are finished placing tiles, save the world file.  Choose File &amp;gt;&amp;gt; Save and navigate to the directory location you wish to save the file set to.  Because each world consists of multiple files, it is good practice to segregate them into their own unique directories.  The Database directory installed with the TMT is a good location.  For testing purposes, you may choose to use a single default “scratch” directory when doing rapid-cycle development or debugging and simply over-write the files repeatedly until a desired configuration is achieved.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Avoid the use of spaces in the folder path to the TMT project files, as this can create problems for various TMT script utilities.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' To force/override the tile placement function, press and hold CTRL-SHIFT as you place the tile.  This procedure will not allow you place a tile on top of another; it will however allow you to place two tiles together when their edges do not match.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Each road map created in the TMT must be evaluated in ISAT to determine if the map is good and traffic can travel on all sections.'''&lt;br /&gt;
The simplest way to test for a valid road network is to use ISAT and an ADO lead vehicle that drives across all road sections you plan to use during your simulation.&lt;br /&gt;
&lt;br /&gt;
The ADO path should look like the intended drive path for your external driver/XD.&lt;br /&gt;
&lt;br /&gt;
You can set a set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Force Velocity action on the lead vehicle to maintain a consistent headway gap relative to the XD.  This will allow you to see if there is a problem in the road network.&lt;br /&gt;
&lt;br /&gt;
Run the test scenario in ISAT rehearsal mode and see if the lead vehicle can navigate the entire road network.  Following a successful rehearsal, drive the scenario in miniSim and see if the results match.  If the lead vehicle disappears in either case,  review the road network in ISAT following the above guidelines.&lt;br /&gt;
&lt;br /&gt;
===  '''Creating Output'''  ===&lt;br /&gt;
&lt;br /&gt;
The process of building and driving a world on the miniSim is:&lt;br /&gt;
&lt;br /&gt;
#	Produce a terrain map by placing tiles on the workspace to create a road network using the TMT.&lt;br /&gt;
#	Output the visual files using the TMT.&lt;br /&gt;
#	Create a scenario control list (SCL) file using the command line.&lt;br /&gt;
#	Create a logical road information (LRI) file using the TMT.&lt;br /&gt;
#	Convert the LRI file to an optimized form (BLI) for ISAT and MiniSim using the command line.&lt;br /&gt;
#	Convert the visual files to an optimized format using the command line.&lt;br /&gt;
#	Install all required files on the miniSim using the install script.&lt;br /&gt;
#	Create a scenario that uses the world and save it to disk.  At a minimum you need to place an external driver on any roadway.  You can also set the ownship cab type using ISAT.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: All steps must be completed in order to view the created world on the MiniSim simulator.'''&lt;br /&gt;
&lt;br /&gt;
To generate files for use on the miniSim, you will use the TMT Output menu.  Environment creation workflow consists of building the visual database first.  The miniSim will render these output files after they are optimized and installed.  You must also process these visual files to produce a scenario control list (SCL) file.  After the SCL file has been created, you can choose Output &amp;gt;&amp;gt; Scenario LRI file from the TMT to create a Logical Road Information (LRI) correlated database file.  It will be necessary to convert the LRI file into a Binary LRI file (BLI), since that is the format the miniSim uses during simulation.  It can be useful to be able to read the text form of the LRI file when troubleshooting problems with the world output process.&lt;br /&gt;
&lt;br /&gt;
Conversion of the output flt files to an optimized format for use on the miniSim happens with a two-step process.  First a command list is created in the flt folder, and then that file is processed to generate the required files.&lt;br /&gt;
The database is ready for visualization on the miniSim when all the files have been installed.&lt;br /&gt;
&lt;br /&gt;
==  '''Tile Library Contents'''  ==&lt;br /&gt;
&lt;br /&gt;
The Tile Library has been designed as an open-ended, extendable library of re-usable components.  Tile models are a different class of model from model objects such as signs, vehicles or virtual objects.  Tile categories are intended to provide a coarse level of differentiation between tiles with different features (culture).  Generally, tiles will contain roads, roadway markings, terrain and vegetation.  More complex tiles will include signage or traffic control devices such as traffic signals, railroad crossing signals, and general signage.  In most cases, signs and traffic control devices are designed to be operated during simulation, which means they may be authored in ISAT to change appearance either during simulator initialization (i.e., changing a stop sign to a yield sign), or change dynamically during simulation (i.e., traffic light state changes from red to green to yellow).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tile Library content may be added to at any time without affecting previously constructed terrain databases.  However, it is important to understand that scenario events are closely coupled with geographic locations within the world.  Changing a world after scenario authoring has begun or following authoring completion may result in unexpected results or even failure to load or run the scenario in ISAT. &lt;br /&gt;
&lt;br /&gt;
Typically it is possible to change a portion of the road network if there are no scenario paths or elements on that portion.  Extending a road network beyond an intersection will not affect the road network on the upstream side of the intersection.&lt;br /&gt;
&lt;br /&gt;
[[File:tmt_adding_to_existing.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
This example assumes there are no scenario authored objects, events or paths in the areas modified by the addition of tile models to the original design.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tile models require additional development for night rendering effects.  Not all models in the library contain these effects.&lt;br /&gt;
&lt;br /&gt;
Tile categories include:&lt;br /&gt;
&lt;br /&gt;
#	City&lt;br /&gt;
#	Comm (commercial features)&lt;br /&gt;
#     Elev_maps (models contain elevation maps)&lt;br /&gt;
#	Filler (borders, panoramas and fillers)&lt;br /&gt;
#	Fwy (freeway)&lt;br /&gt;
#	Ind (Industrial features)&lt;br /&gt;
#	Mtn (Mountain)&lt;br /&gt;
#     Obsolete (these tiles should not be used)&lt;br /&gt;
#	Railroad (includes a rail line)&lt;br /&gt;
#	Res (Residential)&lt;br /&gt;
#	Rural (Countryside)&lt;br /&gt;
#     Rural_bike_lane (rural tiles with bike lanes) &lt;br /&gt;
#	Special (Tiles which are non-standard in some way, or project-specific and not intended for general-purpose use)&lt;br /&gt;
#	Suburb&lt;br /&gt;
#     Transition (tiles that connect between different road types and lanes)&lt;br /&gt;
#	Urban&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the visual and virtual correlated databases, special effects such as wet or snow environments have been constructed as specialized tiles, with the intended effect built into the tile model. &lt;br /&gt;
&lt;br /&gt;
Time of day is a more general simulation effect, although for some complex tiles, a lighting effect has also been built into the tile.  These special-function tiles are identified by keyword within the tile name (wet, day, night).  &lt;br /&gt;
&lt;br /&gt;
Although it is possible to use day tiles at night or vice-versa, the resulting database may appear odd and incongruous to the viewer.&lt;br /&gt;
&lt;br /&gt;
Additional tile categories may be created by editing the alltiles.txt TMT configuration file located in the ProjectData\Tiles\ directory. &lt;br /&gt;
&lt;br /&gt;
===  '''Tile Model Naming Conventions'''  ===&lt;br /&gt;
As the tile library grows, it is useful to know how the tile model name is constructed.&lt;br /&gt;
&lt;br /&gt;
Tile model names are intended to provide some clue as to the nature or content of the tile, without requiring the user to actually view the model.  Viewing the model is, of course, a really great way to become familiar with the model.  &lt;br /&gt;
&lt;br /&gt;
Here are a few examples:&lt;br /&gt;
&lt;br /&gt;
*2ln_city_01&lt;br /&gt;
**2 lane road, tile version 1&lt;br /&gt;
*2ln_city_1x1_crv90_01_20&lt;br /&gt;
**2 lane road, road bed is a 90 degree curve, tile version 1, 20f elevation&lt;br /&gt;
*2ln_city_4way_20&lt;br /&gt;
**2 lane road, 4 way intersection, 20f elevation&lt;br /&gt;
*4ln_2x2_Hill_02&lt;br /&gt;
** 4 lane, 2x2 tile (1320f x 1320f), tile version 2&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' elevated tiles &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''WILL NOT''' &amp;lt;/span&amp;gt;connect to standard tiles.  You will require a hill tile to connect elevated and standard tile models.  Forcing connections to these tiles is not advisable '''unless''' the connecting model has the same elevation.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tile versions are typically small variations from earlier version models.  However, they may be completely different content on a similar road layout.&lt;br /&gt;
&lt;br /&gt;
'''What happened to version &amp;lt;u&amp;gt;x&amp;lt;/u&amp;gt;?'''&lt;br /&gt;
&amp;lt;ul&amp;gt;In cases where there is a missing version number, chances are that tile version is either not yet developed, or the missing version was left out of the TMT for some reason.  There is no requirement that model versions be sequential, it just a mechanism to help classify a model.&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Compatible Tile List'''  ==&lt;br /&gt;
&lt;br /&gt;
This command provides a list of tiles which are compatible in terms of edge specifications for placement at an open grid location in the terrain database.  You must select an open grid location adjacent to a placed tile to use this command.&lt;br /&gt;
&lt;br /&gt;
#Select a grid location.  &lt;br /&gt;
To select a grid location, double click (DBL) the grid location.  That selected grid location will draw a yellow outline, indicating it has been selected.&lt;br /&gt;
&lt;br /&gt;
[[File:TMT_selected_grid.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
#RMB &amp;gt;&amp;gt;Compatible Tile List or Edit &amp;gt;&amp;gt; Compatible Tile List.  A dialog will list all compatible tile choices for the selected grid location.&lt;br /&gt;
&lt;br /&gt;
[[File:TMT_selected_grid_compatible.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Tiles are listed in terms of tile name, rotation, size and category.  Select a compatible tile by LMB a Tile Name in the dialog.  To place the compatible tile into the terrain, LMB the Apply button.  The tile is placed at the selected grid location in the terrain.  You can continue to choose other tiles from the dialog and apply them to the terrain until the desired tile has been placed.  LMB OK to close the dialog or Cancel to cancel.&lt;br /&gt;
&lt;br /&gt;
==  '''Manual Tile Placement'''  ==&lt;br /&gt;
&lt;br /&gt;
The most common way to create terrain databases in the TMT is by placing the tiles manually.  This provides the greatest control over creating the exact road network desired for simulation.  After a tile has been placed in the database, you can edit the tiles to meet specific requirements* through the use of ISAT to change features that were created as configurable features.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Editing the source tile model requires the use of a 3D editor.  Tile editing and 3d modeling is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
To manually place tiles, choose a tile category from the left panel.  Select a tile and LMB on the icon.  Move the cursor to the right side, into the terrain layout.  You can rotate a tile by pressing any key.  Click on an open grid location to place the tile.  To detach the tile from the cursor, move the cursor to the edge of the terrain database window.&lt;br /&gt;
&lt;br /&gt;
The TMT will prevent placement if the following conditions occur:&lt;br /&gt;
1.	You are attempting to place a tile onto another tile.&lt;br /&gt;
2.	You are attempting to place a tile where the tile edge does not match.  The TMT will turn the placed tile edge red when this happens, indicating an invalid edge match.&lt;br /&gt;
&lt;br /&gt;
NOTE: You can override the edge match by pressing '''CTRL AND SHIFT''' when placing the tile.  Be aware this can cause discontinuities and visual mismatch when you override edge matching.&lt;br /&gt;
&lt;br /&gt;
After a tile is placed, you can modify the orientation by invoking commands from the Edit menu, RMB or Tool Bar.&lt;br /&gt;
1.	Select a tile or group of tiles in the terrain database.&lt;br /&gt;
2.	Choose a function from the Edit menu, RMB menu, or Tool Bar.&lt;br /&gt;
&lt;br /&gt;
==  '''Auto Tile Placement'''  ==&lt;br /&gt;
&lt;br /&gt;
You can fill in defined areas in the terrain database using automatic tile placement, which is used when no particular configuration is desired and a large region of coverage is desired.  From the Auto Tile Placement dialog, you can choose tile categories and individual tiles within each category for placement.  Tile placement is based upon a weighting factor which is controlled by this dialog.&lt;br /&gt;
&lt;br /&gt;
Selecting a grid area by DBL at an open grid location.  If properly selected you will see the terrain grid outlines in yellow.  Move the cursor to another location, holding the SHIFT key, and LMB again at the new location.  You will see a region of terrain grid now has a yellow border, indicating a valid selection.  Choose Edit &amp;gt;&amp;gt; Auto Tile Placing or RMB &amp;gt;&amp;gt; Auto Tile Placing.&lt;br /&gt;
&lt;br /&gt;
[[File:TMT_Auto_placement.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: if a grid area is not properly selected the command will not enable.&lt;br /&gt;
&lt;br /&gt;
The Auto Tile Placement Control Dialog will appear.  The dialog has two parts:&lt;br /&gt;
#	Category selection and adjustments&lt;br /&gt;
#	Library tile placement and adjustments&lt;br /&gt;
&lt;br /&gt;
In the Category selection and adjustment area, choose the tile categories you wish to use for auto tile placing.  You can select multiple categories, or LMB Select All.  When you have chosen tile categories, LMB the Add button.  Use CTRL to select discontinuous categories, or SHIFT to select a continuous list of categories.  You can also remove single or multiple categories from the destination list.&lt;br /&gt;
&lt;br /&gt;
In the Library Tile Selection and Adjustments section, you can choose the library tiles you wish to use in auto placement.  Tiles within the selected Tile Categories appear in the source (left bottom) window.  You can use Select All, Add, Remove and Clear buttons for both Tile Categories and Tiles.  Adjust the weighting factors of each tile by using the slider bar.  The Optimal Tiling button applies higher weights to tiles that have the most common edge specifications among the list of tiles chosen.  Click OK to apply the settings to automatically place tiles within the terrain.  Cancel will cancel the auto tile placement command.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==  '''Controllability: Unique vs. Generic Functionality'''  ==&lt;br /&gt;
&lt;br /&gt;
The MiniSim&amp;amp;trade; uses scenario control software to control individual components within a tile (ie., changing a traffic light or sign).  But what happens when there is more than one tile reference of the same tile within the terrain database?  In order to control each model component, tiles must be flagged as a unique tile instance.  This is achieved by enabling the Unique Control setting in the TMT&amp;amp;trade; (the traffic light icon) and then enabling Unique Control for a tile or selection of tiles.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Unique control options in the menu are disabled until the Unique Control Mode is enabled in the TMT.&lt;br /&gt;
&lt;br /&gt;
Select a tile by LMB or a group of tiles using fence select.  RMB &amp;gt;&amp;gt; Enable/Disable Unique Control (Selected Tiles) or Edit &amp;gt;&amp;gt; Enable/Disable Unique Control (Selected Tiles).  A uniquely controlled tile will display a small green X in the terrain layout view.  Because this function is a toggle, to turn off unique control, you can disable all controls or for the selected tile using the same menu as enable.&lt;br /&gt;
&lt;br /&gt;
===  '''When are Unique Controls necessary?'''  ===&lt;br /&gt;
&lt;br /&gt;
Unique controls are '''not''' necessary if there are no controls available within the tile!  &lt;br /&gt;
&lt;br /&gt;
However, if a tile contains SWITCHES, then the tile has been built to support changes to the simulation scene from scenario control.  For example, some tiles contain street signs.  It is often desirable to have a world contain unique street names.  If the world is built with Unique Controls enabled, then a scenario author may adjust each street sign to a different name using the Interactive Scenario Authoring Tool (ISAT).  This mechanism is used for all cases where a change in appearance is desired within the terrain tile.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The TMT will output a file for each Unique Control tile.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Turning a visual element off within a tile does not disable the CVED representation.'''  Even if the object is not visible to the simulator driver, the object still exists.&lt;br /&gt;
&lt;br /&gt;
This has implications if the miniSim is configured with collision effects enabled.  In this case, '''driving into a visually disabled object will result in a collision.'''&lt;br /&gt;
&lt;br /&gt;
Due to the nature of switch controls, it is possible to implement controllability for visual scene elements at any time.  However, there is no corresponding capability for any applicable CVED representation.&lt;br /&gt;
&lt;br /&gt;
For example, it is possible to create controllable road markings with different visual conditions (pristine, aged, off) but without additional programming CVED will not reflect this functionality.  In this case, the CVED road marking representation will always be present, until the CVED code has been modified to support a variable condition road marking.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===  '''Load Management for Visual Databases'''  ===&lt;br /&gt;
&lt;br /&gt;
It is possible to create databases which will not perform optimally on the MiniSim&amp;amp;trade;.  To avoid this, adjust the visibility of terrain tiles by using the level of detail (LOD) node within each tile.  More complex tiles may contain additional LOD nodes.&lt;br /&gt;
&lt;br /&gt;
Right-click any tile and choose Tile LOD Settings… from the context menu.  The LOD dialog will highlight each LOD in the configuration window as you select LODs from the list.  You can change the Center, Switch Distance, Transition Range and Freeze flags for each LOD.  Setting a small Switch Distance will cause the tile to display when the eyepoint approaches closer to the tile.  Large values cause the tile to become visible over longer distances.  Excessively long values, especially within complex environments, may contribute to performance problems.&lt;br /&gt;
&lt;br /&gt;
It is most desirable to have terrain tiles visible only for the period they are needed.  The LOD Center X, Y and Z values can be manipulated to shift the LOD so that the tile disappears behind curves.  Thus, curve tiles are ideal for load management elements.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Changing the LOD Center values will require the Freeze flag to be enabled.  If the freeze flag is not enabled, the tile may not display as anticipated.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-03_10h56_40.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Notice how the curve tile LOD has been edited so the tile is not visible from the North-South road along the right side, and it is not displayed to the left of the large S-curve tile since it is unlikely the tile can be seen from that location anyway.&lt;br /&gt;
&lt;br /&gt;
LODs can be adjusted significantly as needed, as shown below.&lt;br /&gt;
[[File:2021-12-03_11h35_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== '''Output for Visual Database'''  ==&lt;br /&gt;
&lt;br /&gt;
1.	After a world has been developed and saved to disk, you can publish the visual database world to disk.  From the TMT&amp;amp;trade; Output menu, choose Output Scenario/Visual Data.  A dialog will appear.  Disable the LRI flag, and use the default settings for OpenFlight Output. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' This will over-write the files located within the project flt directory; in the event you wish to retain these files, it is best to create a backup copy of the flt directory prior to generating output.&lt;br /&gt;
&lt;br /&gt;
2.	The next step is to generate a scenario control list for the terrain database/world that you've just generated.  The SCL is a text file that lists all available switches, which can be authored using the ISAT.  Without this file, although you can generate a world that will run on the MiniSim&amp;amp;trade;, you will be unable to author objects within the environment such as street signs, traffic lights, etc.&lt;br /&gt;
&lt;br /&gt;
Open a command window at the FLT directory.  You can use the windows explorer to navigate to the Database directory under Favorites: Favorites &amp;gt;&amp;gt; ProjectData_Databases.  Open the directory containing your database, then right-click on the FLT folder and choose “Open CMD here” from the context menu.&lt;br /&gt;
&lt;br /&gt;
At the command window, enter:&lt;br /&gt;
'''buildscl''' &amp;lt;DB_NAME.flt&amp;gt;&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remember that DB_NAME is the name of your .MOS world file (terrain database), and you do not type the ‘&amp;lt;’ or ‘&amp;gt;’ characters.  &amp;lt;ENTER&amp;gt; means press the Enter key on your keyboard.&lt;br /&gt;
&lt;br /&gt;
The program buildscl will create a scl file that is the same prefix as your terrain file (i.e., buildscl myTerrain.flt will generate the file myTerrain.scl).&lt;br /&gt;
4.	Generate the optimized files for use on the Minisim simulator.  Open a command line in the flt output folder.  Type in the following command:&lt;br /&gt;
'''buildbatchlist''' &amp;lt;DB_NAME&amp;gt; &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To automatically execute the optimization script, include the execute flag on the command line:&lt;br /&gt;
&lt;br /&gt;
buildbatchlist &amp;lt;DB_NAME&amp;gt; -e &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script will create a command file (do.bat) that will process all the flight files in your output flt folder.&lt;br /&gt;
&lt;br /&gt;
To manually execute the optimization command file on the command line:&lt;br /&gt;
'''do''' &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command line will process all the flight output files.  When this is complete you will navigate up one  folder level to prepare for processing the LRI file.  &lt;br /&gt;
cd .. &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*NOTE – this is two periods, which means “go up one level”.&lt;br /&gt;
&lt;br /&gt;
**NOTE – if you forget to generate optimized files for the simulator the database installer script will not complete.&lt;br /&gt;
&lt;br /&gt;
==  '''Output for Correlated (Logical) Database'''  ==&lt;br /&gt;
&lt;br /&gt;
1.	After you have generated the visual database and a .scl file and optimized the flight output, create the correlated virtual environment database.  From the TMT&amp;amp;trade; Output menu, choose: Output Scenario/Visual Data and this time, disable all the OpenFlight&amp;amp;trade; Output options.  Although you may enter a different output prefix, it is easiest to maintain projects if the default file name is used for both the terrain database.mos and the correlated virtual database.lri file.&lt;br /&gt;
&lt;br /&gt;
A DOS window will display the status of the LRI build.  Because this window is not persistent, if there are any error messages you wish to save you must collect them from the window using the quickedit mode: select the text you wish to save, and press &amp;lt;ENTER&amp;gt;.  This places the text into a buffer, which you can now use to paste into a text log file for later use.&lt;br /&gt;
&lt;br /&gt;
The most typical error will be a warning that a .summary or .scl file has not been found.  In that case, you can proceed with the correlated virtual database build but no switches will be available to author.  To correct this, simply follow step2 from Output for Visual Database located above, and then re-output the correlated virtual database file.&lt;br /&gt;
&lt;br /&gt;
2.	Navigate to the world/project folder.  If you have a DOS window open to the FLT directory already, to move up one directory you can enter:&lt;br /&gt;
cd ..&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.	From the DOS command window, enter the following:&lt;br /&gt;
'''mlri''' &amp;lt;database&amp;gt;&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will cause a script to convert the ASCII correlated database .LRI file to an optimized binary form.  This script will copy your database BLI file for use within ISAT to the ISAT directory.  If you wish to see the script command commands necessary to convert the LRI file, simply enter:&lt;br /&gt;
'''mlri''' &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the script will echo the command and parameters in the DOS window.&lt;br /&gt;
&lt;br /&gt;
==  '''Test the New Database'''  ==&lt;br /&gt;
&lt;br /&gt;
Just because a database can be built, and the BLI can be read by ISAT, does not mean the road network is entirely valid and drivable.  Testing can validate the database for simulated traffic and the External Driver (XD).&lt;br /&gt;
&lt;br /&gt;
To test the database, place an ADO on the roadmap/BLI in ISAT and extend a path over the entire route that the XD is intended to drive.  If ISAT cannot build a path over the entire route then there is some problem in the BLI to resolve.  It is likely that the point where the path ends is where simulated traffic will die during simulation and disappear from the scene.&lt;br /&gt;
&lt;br /&gt;
Reasons for this include:&lt;br /&gt;
# Forcing two tiles together in the TMT that do not share the same road characteristics (number of lanes, elevation).&lt;br /&gt;
# A problem in a tile on either side of the location where the path ends.'&lt;br /&gt;
# some other as yet unknown condition.&lt;br /&gt;
&lt;br /&gt;
A successful path is only the first step.  To be sure that you have a working database it is necessary to drive the desired route on the miniSim.  Ideally you would start the driver just behind the test ADO, and use a Maintain Gap or Force Velocity action to keep that test ADO in sight throughout the drive.&lt;br /&gt;
&lt;br /&gt;
Note: if the ADO is on a forced velocity and the XD speed exceeds the limit of what the ADO can support for cornering, it may disappear as a result.&lt;br /&gt;
&lt;br /&gt;
When both the test ADO and XD arrive at the end of the drive, it is safe to say the database is valid and ready for scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Note: Authoring scenarios and then making changes to the BLI can invalidate the scenario, so testing should be the first thing to do when starting a new project with a new database world.&lt;br /&gt;
&lt;br /&gt;
== '''Database Use Within ISAT'''  ==&lt;br /&gt;
&lt;br /&gt;
Following the successful creation of the visual and logical world, you will be able to open the world BLI from ISAT to create scenario events and conditions using your new database.  The build process automatically copies the .BLI and .placeholder support file into the %MINISIM_ROOT%\Data/ directory.  You can also access the primary files from the Projectdata\Databases/ directories.  Care should be taken to maintain one pristine copy of files for development, and where necessary, backup copies should be made prior to major changes to your scenario (.SCN) files.&lt;br /&gt;
&lt;br /&gt;
==  '''File Transfer to MiniSim&amp;amp;trade;''' ==&lt;br /&gt;
&lt;br /&gt;
Database worlds that are created using the TMT&amp;amp;trade; must be copied into the MiniSim&amp;amp;trade; directory tree before they are available for use within the MiniSim&amp;amp;trade; simulator.&lt;br /&gt;
&lt;br /&gt;
A script has been provided to copy files for user convenience, although it is advisable to be aware of the various file types and locations where these files are to be placed for proper configuration.&lt;br /&gt;
&lt;br /&gt;
To install a database world, run the following script from the database directory:&lt;br /&gt;
&lt;br /&gt;
'''dbinstall''' &amp;lt;DB_NAME&amp;gt;&amp;lt;Minisim&amp;amp;trade; Version Number&amp;gt;&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script expects the database files will be available from the location the script is activated, which means the default configuration as installed and described in this document.  In the event of an error, the script will discontinue operation and inform the user it has encountered a problem.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Non-standard file locations may cause the installation script to fail.&lt;br /&gt;
The following files are copied (version refers to the installed software version number):&lt;br /&gt;
&lt;br /&gt;
DB_NAME.scl	C:/MiniSim&amp;amp;trade;_version/bin.x64/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;.FLT/*.IVE	C:/MiniSim&amp;amp;trade;_version/visuals/db_name/&lt;br /&gt;
&lt;br /&gt;
DB_NAME.BLI	C:/MiniSim&amp;amp;trade;_version/data /&lt;br /&gt;
&lt;br /&gt;
DB_NAME.FTR	C:/MiniSim&amp;amp;trade;_version/bin.x64/&lt;br /&gt;
&lt;br /&gt;
'''TMT&amp;amp;trade; Reference'''&lt;br /&gt;
Help: There is currently no online help feature available for the TMT&amp;amp;trade;.&lt;br /&gt;
&lt;br /&gt;
==  '''Associated file set''' ==&lt;br /&gt;
&lt;br /&gt;
The Tile Library contains a number of related files, all of which are necessary to the use of the TMT&amp;amp;trade; and creation of Minisim&amp;amp;trade; environments:&lt;br /&gt;
&lt;br /&gt;
#	allTiles.txt – this text file contains a list of the tile library tiles and categories (configuration file for the TMT&amp;amp;trade;).&lt;br /&gt;
#	CD1 – A text file containing a list of the Tile Library Tiles used in the MOS.&lt;br /&gt;
#	CD2 – A text file that defines the connective edges between tiles.&lt;br /&gt;
#	DDS – these are compressed texture files for use on the MiniSim&amp;amp;trade;.&lt;br /&gt;
#	FLT – These are binary OpenFlight&amp;amp;trade; files that contain geometry and references to image texture files.  These files are necessary for MiniSim&amp;amp;trade; simulator operation.&lt;br /&gt;
#	FTR – This is a TMT&amp;amp;trade; support file that contains all the tile references necessary for a terrain configuration including XYZ offset, rotation, and tile category type.  This file is necessary for MiniSim&amp;amp;trade; simulator operation.&lt;br /&gt;
#	ICN – this is a binary file that is used for the TMT&amp;amp;trade; tile icon.&lt;br /&gt;
#	Intersection.map – a text file that contains terrain data and specifications for unique elevation maps applied inside intersections.&lt;br /&gt;
#	IVE – these are binary converted files optimized for MiniSim&amp;amp;trade; use.&lt;br /&gt;
#	JPG – this is a binary snapshot view of the tile from an overhead view.&lt;br /&gt;
#	LatProfileList.lat – this text file contains all the lateral specifications for every road type.  It includes a cross-section profile and a material code index.&lt;br /&gt;
#	MOS – this binary file is a TMT&amp;amp;trade; project file, also referred to as a world or project file.&lt;br /&gt;
#	PATH/CORR – these are text data files that contain coordinate data describing either roads or intersection corridors.&lt;br /&gt;
#	PET – this text file contains logical database tag information.&lt;br /&gt;
#	RGB, RGBA, DDS –binary image texture files.  The RGB and RGBA files may also have associated .attr files: these files are produced from the modeling environment tools and are not currently used by the TMT&amp;amp;trade; or MiniSim&amp;amp;trade;.  However, the RGB, RGBA and DDS files are necessary for MiniSim&amp;amp;trade; simulator operation.  These files will already be present in the MiniSim&amp;amp;trade; configuration, but additional (new) files must be copied to the proper location.&lt;br /&gt;
#	SUP – this binary file is used by the TMT&amp;amp;trade;.&lt;br /&gt;
#	SurfaceMaterialSpecifications.xlsx – an Excel&amp;amp;trade; document that contains surface material codes for road surfaces.&lt;br /&gt;
#	tileSizes.txt – this text file contains a list of tile library tiles and their dimensions, given in Tile Units (increments of 660 ft; a 1 x 1 tile = 660ft x 660ft).  Secondary configuration file for the TMT&amp;amp;trade;.&lt;br /&gt;
#	TXT – this text file contains TMT&amp;amp;trade; information.  The TXT file will be updated when the binary FLT file changes, and should remain read/write.  If you want to force the TMT&amp;amp;trade; to re-process the tile library or any particular tile, delete the TXT files and the TMT&amp;amp;trade; will re-create them.&lt;br /&gt;
&lt;br /&gt;
==  '''Included Databases''' ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of databases installed with the TMT&amp;amp;trade; with general descriptions:&lt;br /&gt;
#	day_night_01: A long environment containing urban, residential, highway and rural environment.  This database is designed for day or night use from the highway to rural area only.  The urban environment is a night-only area.&lt;br /&gt;
#	day_night_snow_01: The same environment as day_night_01 but with snow effects and roadways for the highway and rural roads.&lt;br /&gt;
#	nadsdemo_dsc: A demonstration database containing dry, wet, and snow environments.  This database includes a small urban area, a small rural area, and a small mountainous area.&lt;br /&gt;
#	nadsdemo_geospecific: A small, geo-specific database built to match a real-world location in Iowa.&lt;br /&gt;
#	nadsdemo_kiosk: A small, geo-typical database containing 3 separated environments.  Contains rural and urban environments.&lt;br /&gt;
#	simple_rural1: a basic, small rural environment&lt;br /&gt;
#	simple_rural2: a basic, small rural environment with unique tiles enabled.&lt;br /&gt;
#	rural_long: A simple rural environment intended for longer simulation drives.  It begins with a long, straight roadway and contains varying curves and hills, with some intersections and one cross-road.&lt;br /&gt;
#	test_all: A database that contains all the TMT tiles.  Tiles are connected to each other for each category, and connections have been forced.  This makes it possible to create a scenario for each tile category and to drive all the tiles, to become familiar with each tile and roadway type.  The original tile orientation has been preserved where possible.  Each tile category reads from top to bottom, left to right where possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;image_here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  '''Database Creation Guidelines''' ==&lt;br /&gt;
&lt;br /&gt;
Using the TMT&amp;amp;trade; it is possible to overload the visualization capacity of the MiniSim&amp;amp;trade;.  A few common sense rules will help to avoid that situation:&lt;br /&gt;
&lt;br /&gt;
#	Build only what you need.  If your scenario requires 3 miles of highway driving, there is no point in building a ten mile stretch of terrain database.  Keep the region of interest (ROI) or gaming area extent reduced to the smallest necessary footprint.&lt;br /&gt;
#	Fewer larger tiles are more efficient than many smaller tiles.  If you need 3 miles of highway, do not create a terrain that uses a small 1x1 tile to make the longer road.&lt;br /&gt;
#	If you cannot see it from the road, don’t include it in the terrain.  If something will never be visible, why include it in the terrain?  There is one caveat: sometimes you will want to enclose the ROI such that it is not possible to see beyond the terrain edge.  You will enclose the terrain using filler tiles, which are designed to block the view.  These are secondary tiles with very little detail, small amounts of features and no drivable roads.&lt;br /&gt;
#	Adjust the load for optimal performance.  Even if you follow these guidelines, you may still bump into processing limitations.  You can modify each tile within the TMT&amp;amp;trade; to display only when it is visible to the driver, and to turn off when it is not.  This is accomplished by using level of detail (LOD).  Each tile contains an LOD that is controlled from the TMT&amp;amp;trade; to permit the terrain database author to disable or enable tiles as needed to ensure consistent performance.&lt;br /&gt;
#	Although the TMT&amp;amp;trade; itself does not enforce a rule, mixing coordinate units within the same terrain database is likely to cause problems.  All tiles in the TMT&amp;amp;trade; Tile Library were constructed with units = feet, using the right-hand rule of coordinate systems: X increases to the right, Y increases forward, and Z increases upward.&lt;br /&gt;
#	Forcing tile edge matches: although you can force a match in the TMT&amp;amp;trade;, almost always you will not want to as it is likely to create problems within the visual terrain or logical database.  A rural road that is forced to match an urban road will appear OK in the TMT&amp;amp;trade;, but when you drive that database you will see how different the two road types are, and how the rural tile edge contains a different elevation profile than the urban edge.  Use a transition tile to change from one road type to another instead of forcing these types of matches.  There are only a few road types that can be forced that will still look and work due to their construction, profile and lane information.&lt;br /&gt;
&lt;br /&gt;
'''Note: ''' After you have begun authoring scenarios, it is no longer trivial to change the terrain database.  This is due to the internal data structure elements of the SCN and BLI files.  The best approach is to finalize the road network configuration prior to scenario authoring activities.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==  '''Script Utilities''' ==&lt;br /&gt;
&lt;br /&gt;
A number of script utilities have been developed to assist with the terrain generation process. These files are located within the utils directory.  In addition to the scripts mentioned within this document, the following scripts are included:&lt;br /&gt;
&lt;br /&gt;
*lg.bat – This script will generate an LRI file from within the database project folder.  In order to use this script the TMT&amp;amp;trade; must have already published the tile models, and the user should also have created the db_world.scl file from the TMT&amp;amp;trade; tile models located in the flt folder.  This script is run from the same folder location as the db_world.mos file.&lt;br /&gt;
&lt;br /&gt;
*mlri.bat – This script will generate a .BLI file from a .LRI file, and is run from the same folder as the db_world.mos file.  The lri file can be published from the TMT&amp;amp;trade; or created using the lg.bat script.&lt;br /&gt;
&lt;br /&gt;
*view.bat – This script allows the user to review an object or tile model without having to create a database and scenario and driving them on the MiniSim&amp;amp;trade;.  The viewer is only for reviewing models, it cannot be used to review a scenario.  This command should be run from a command (DOS) window that is opened to the folder containing the models to be viewed.  In the event this command does not work, the user should run nadsconfig_system.bat and then use the osg_viewer.exe application to view the model, and then communicate the script failure to NADS so the error may be corrected.&lt;br /&gt;
&lt;br /&gt;
==  '''Lessons Learned: Things that can go wrong'''  ==&lt;br /&gt;
&lt;br /&gt;
Although the terrain creation process is fairly streamlined, a number of issues may arise that could lead to problems.  Mitigation strategies are provided to get you back into production:&lt;br /&gt;
&lt;br /&gt;
# Test every road map.  Just because the TMT produces a database does '''not''' guarantee the result is a completely drivable road network.  [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=TMT_Troubleshooting_Guide_(all_versions)#ADOs_Can.27t_Travel_On_Sections_of_the_Road_Network Test to make sure that it is.]&lt;br /&gt;
#	Every time you make a new build, generate both the visual and logical databases together.  This is because there are no versioning schemas built into the TMT&amp;amp;trade;, so it is necessary to re-generate all your files for a build in the same session.  This has the highest chance for success.  Often when a terrain control is not operating the way you think it should, the issue can be traced back to a mismatch between the visual and logical databases.&lt;br /&gt;
#	Use a script for consistency.  To repeat procedures over and over again with a consistent approach, use a script to ensure that you are using the commands and command line options the same way every time you perform a build.&lt;br /&gt;
#	Do not copy/paste large areas using the TMT&amp;amp;trade;.  This can create corrupted terrain databases.  Once a terrain file has been corrupted, there is no way to recover it.  By saving a terrain database as another file, you can jump-start the construction process and provide yourself with a backup file at the same time.  Copy/paste multiple tiles can be combined with rotation.&lt;br /&gt;
#	To control objects in the environment (signs, traffic signals, etc) it is necessary to ensure the database world has been created using the “Unique Tiles” option, as described in the section Controllability: Unique vs. Generic Functionality (p10).&lt;br /&gt;
&lt;br /&gt;
NOTE: You can have multiple TMT&amp;amp;trade; sessions open at once, using one database as a reference for LOD settings while building a second database.&lt;br /&gt;
&lt;br /&gt;
==  '''Unwanted collisions during simulation'''  ==&lt;br /&gt;
&lt;br /&gt;
If collisions are encountered with invisible objects during simulation - ie, there is no apparent source for the collisions, or if there are many collisions happening - the procedure involves:&lt;br /&gt;
1. Identify the tile containing the collisions.  A coordinate is helpful for this, which can be determined from ISAT (reported on the status bar) or miniSim (has to be enabled).&lt;br /&gt;
2. Review the tile.pet file for Objects.  &lt;br /&gt;
3. Each Object in the tile.pet will reference a sol2 object.&lt;br /&gt;
4. Locate the sol2 object from #3 then find the CollisionSoundID record.&lt;br /&gt;
5. Any positive number will enable collisions.  To disable, replace the value with -1.&lt;br /&gt;
&lt;br /&gt;
Note: If the object is not found in the sol2.txt file, then search all sol2_aux*.txt files.&lt;br /&gt;
Note: Remember to copy the modified file to ISAT\data if you are editing the file in NadsMiniSim_x.x\data (and vice-versa) to maintain consistency.&lt;br /&gt;
NOTE: You must exit miniSim and/or ISAT before making changes to system configuration files.&lt;br /&gt;
&lt;br /&gt;
[[File:determine_and_disable_collision_objects_02052021.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
=Appendix A=&lt;br /&gt;
==Obsolete and compatible tile models==&lt;br /&gt;
&lt;br /&gt;
Do '''NOT''' use obsolete tile models - instead, locate the compatible tile model and use that instead.  Obsolete models are included solely to avoid potentially corrupting existing world.mos files.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+ Obsolete and compatible Tile Models&lt;br /&gt;
|-&lt;br /&gt;
|Obsolete Tile||  use -&amp;gt; ||Compatible Tile&lt;br /&gt;
|-&lt;br /&gt;
|2ln_city_06&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_4ln_city'''&lt;br /&gt;
|-&lt;br /&gt;
|2ln_4ln_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_4ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|2ln_res_rural_trans&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_res'''&lt;br /&gt;
|-&lt;br /&gt;
|urban_4ln_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''5ln_urban_4ln_urban'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_3LN_2ln_Trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_3ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_2ln_gravel_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_gravel'''&lt;br /&gt;
|-&lt;br /&gt;
|suburb_trans_rural_01_night&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_suburb_2ln_rural_night'''&lt;br /&gt;
|-&lt;br /&gt;
|suburb_trans_rural_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_suburb_2ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_city_1x1_BL_Trans01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_city_4ln_BL_city'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_trans_4ln_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_4ln_urban'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_trans_rural_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_2ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_trans_4ln_2ln_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_4ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_3LN_3LnUrban_trans01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''3ln_fwy_3ln_urban'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_BL_rural_trans01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_BL_urban_2ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_rural_4ln_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_rural_2ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|BLVD_4ln_trans_01_20&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_BLVD_4ln_urban_e20'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_3ln_2ln_trans_03&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_3ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_2ln_gravel_trans_02&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_gravel_02'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_trans03&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_rural_no_shoulder'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_trans01_3Mto12f&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_3M_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_trans02_10fto12f&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_rural_10f_lane'''&lt;br /&gt;
|-&lt;br /&gt;
|urban_6ln_4ln_transition&lt;br /&gt;
| is now:&lt;br /&gt;
|'''6ln_urban_4ln_urban_night'''&lt;br /&gt;
|-&lt;br /&gt;
|urban_6ln_4ln_transition_day&lt;br /&gt;
| is now:&lt;br /&gt;
|'''6ln_urban_4ln_urban_day'''&lt;br /&gt;
|-&lt;br /&gt;
|2ln_3way_rural_res01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_res_3way'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_city_1x1_BL_Trans01C&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_city_4ln_BL_city_ROT_C'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Appendix B=&lt;br /&gt;
The following is a partial list of applications used to support the creation of TMT&amp;amp;trade; compatible 3D models and textures.   There are many programs available.  The basic requirements necessary are the ability to create texture-mapped 3D geometry and the meta-data files containing simulator data.  These files may be examined in the ProjectData\Tiles folders installed with the TMT&amp;amp;trade;.&lt;br /&gt;
&lt;br /&gt;
A.	Graphics Programs&lt;br /&gt;
•	Adobe Photoshop&amp;amp;trade; or CreativeSuite&amp;amp;trade;&lt;br /&gt;
•	GIMP&amp;amp;trade;&lt;br /&gt;
•	Painter&amp;amp;trade;&lt;br /&gt;
•	Any other raster editing graphics application&lt;br /&gt;
&lt;br /&gt;
B.	3D Programs&lt;br /&gt;
•	Presagis&amp;amp;trade; Creator&lt;br /&gt;
•	Autodesk Maya&amp;amp;trade;&lt;br /&gt;
•	Autodesk 3D Studio&amp;amp;trade;&lt;br /&gt;
•	Google Sketchup&amp;amp;trade;&lt;br /&gt;
•	Any other 3D application capable of applying and saving textured 3D models&lt;br /&gt;
C.	Conversion Programs&lt;br /&gt;
•	Deep Exploration&amp;amp;trade;&lt;br /&gt;
•	Okino PolyTrans&amp;amp;trade;&lt;br /&gt;
•	Export from 3D Program&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''  Currently in order to use your models within the TMT&amp;amp;trade; to produce terrain databases, it will be necessary to utilize some form of conversion software to convert from the application native or export format into OpenFlight&amp;amp;trade;.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=TMT_User_Guide_(versions_1.8_%26_greater)&amp;diff=3986</id>
		<title>TMT User Guide (versions 1.8 &amp; greater)</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=TMT_User_Guide_(versions_1.8_%26_greater)&amp;diff=3986"/>
				<updated>2023-11-30T16:03:19Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Summary of changes in this version emphasize elevation map orientation info*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;This document is in beta 02.11.2020&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Who should use this document ==&lt;br /&gt;
This document is for use with TMT version 1.8 or greater.  Do '''NOT''' use this document if you are working with a TMT version less than 1.8.&lt;br /&gt;
&lt;br /&gt;
== Summary of changes in this version==&lt;br /&gt;
This version of the Tile Mosaic Tool contains significant updates to the tile model library.&lt;br /&gt;
&lt;br /&gt;
'''Elevation Maps'''&lt;br /&gt;
Elevation maps have been implemented on some tile model intersections.  These are 3-D surfaces within an intersection.  The primary characteristic of elevation maps is they support different surfaces within an intersection.  &lt;br /&gt;
&lt;br /&gt;
Elevation maps are one way to determine curb strikes within an intersection based on a surface material code (SMC). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''NOTE:'''&lt;br /&gt;
Failure to use the correct rotation will produce a road network that ADOs cannot navigate because the elevation maps produce an offroad condition when the wrong rotation is used in the TMT.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[:File:elev_maps_20200211.jpg]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Elevation map intersections include a 'rotation key' in the tile name.  Due to implementation requirements, it is '''required''' to rotate the tile model to the rotation specified.  &lt;br /&gt;
&lt;br /&gt;
'''Rotation Key'''&lt;br /&gt;
&lt;br /&gt;
No code = 0 degrees &lt;br /&gt;
A = 90 degrees &lt;br /&gt;
B = 180 degrees &lt;br /&gt;
C = 270 degrees &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tiles with intersection elevation maps that are not rotated (default rotation = zero degrees) are located in various tile categories.  Only tiles containing intersections can contain intersection elevation maps.&lt;br /&gt;
&lt;br /&gt;
'''Obsolete models'''&lt;br /&gt;
One significant change is that some tiles are now considered obsolete.  Obsolete models are contained within the tile category 'Obsolete'.&lt;br /&gt;
&lt;br /&gt;
It is '''strongly recommended''' that .MOS worlds using obsolete models be revised, as future versions of the Tile Mosaic Tool may not include those models.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''If a world.mos file contains tile models that are missing from the library and it is saved, that .mos file will become corrupted.&lt;br /&gt;
&lt;br /&gt;
There is currently no way to recover from this condition.'''&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Obsolete tile category is included with this version to permit replacing obsolete models with compatible tiles.  It is strongly recommended that obsolete tiles be converted to the correlated tile model.&lt;br /&gt;
&lt;br /&gt;
A list of compatible models is included in the Appendix of this document.&lt;br /&gt;
&lt;br /&gt;
''' Transition tile category'''&lt;br /&gt;
&lt;br /&gt;
Transition tile  models are now grouped into a new '''Transition''' tile category.  If you require a transition between different roadway types, the Transition category is the place you will find it.&lt;br /&gt;
&lt;br /&gt;
'''New tile models'''&lt;br /&gt;
&lt;br /&gt;
Another change in this version is the addition of new tile models, listed below.&lt;br /&gt;
&lt;br /&gt;
'''bike_lane'''&lt;br /&gt;
This is a new tile category.  Tiles within the '''bike_lane''' category contain bicycle lanes, which are narrow lanes defined as Vehicle Restricted lanes.  This definition is intended to prevent typical ADOs from using this lane.  &lt;br /&gt;
&lt;br /&gt;
However, scenario authors '''should be able''' to author pedestrian and bicycle models that will use the bike lane.  In some cases it may be necessary to author scenarios using the standard road lane and apply a '''lane offset''' to shift the scenario object over into the target lane.&lt;br /&gt;
&lt;br /&gt;
'''bike_lane tile models'''&lt;br /&gt;
#2ln_3Mi_01&lt;br /&gt;
#2ln_3Mi_02&lt;br /&gt;
#2ln_4way_3Mi_01&lt;br /&gt;
#2ln_4way_3Mi_02&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Bike lanes are not necessarily included as a separate network adjacent to the road network.  At this time they are an attribute of the road.&lt;br /&gt;
&lt;br /&gt;
'''city tile models'''&lt;br /&gt;
#4ln_city_1x1_02&lt;br /&gt;
#4ln_city_1x1_crv90_02&lt;br /&gt;
#6ln_4way_01&lt;br /&gt;
#6ln_4way_02&lt;br /&gt;
#6ln_city_straight_01&lt;br /&gt;
#6ln_city_straight_02&lt;br /&gt;
&lt;br /&gt;
'''comm tile models'''&lt;br /&gt;
#2ln_4ln_3way_comm_02&lt;br /&gt;
#2ln_4ln_3way_comm_03&lt;br /&gt;
#4ln_4way_comm_01&lt;br /&gt;
#4ln_comm_straight&lt;br /&gt;
#4ln_comm_straight_04&lt;br /&gt;
#4ln_comm_straight_05&lt;br /&gt;
#4ln_res_3way_comm&lt;br /&gt;
#4ln_res_hill_curve01&lt;br /&gt;
&lt;br /&gt;
'''filler tile models'''&lt;br /&gt;
#gen_common_3x5&lt;br /&gt;
#urban_01&lt;br /&gt;
#urban_02&lt;br /&gt;
#urban_03&lt;br /&gt;
&lt;br /&gt;
'''fwy tile models'''&lt;br /&gt;
#fway_2ln_04&lt;br /&gt;
#fway_2ln_10k10kS_01&lt;br /&gt;
#fway_4ln_2ln_DTL01&lt;br /&gt;
#fway_4ln_straight_13x17&lt;br /&gt;
&lt;br /&gt;
'''railroad tile models'''&lt;br /&gt;
#railway_1xgrade_rural_01&lt;br /&gt;
#railway_1xgrade_rural_02&lt;br /&gt;
#railway_1x_straight&lt;br /&gt;
#railway_3xgrade_city_01&lt;br /&gt;
#railway_3xgrade_rural_01&lt;br /&gt;
#railway_3xgrade_rural_02&lt;br /&gt;
#railway_3x_straight&lt;br /&gt;
#railway_4ln_city_01&lt;br /&gt;
#railway_90&lt;br /&gt;
#railway_straight&lt;br /&gt;
&lt;br /&gt;
'''res tile models'''&lt;br /&gt;
#2ln_res_mult_school&lt;br /&gt;
#2ln_res_rural_trans&lt;br /&gt;
#2ln_straight_res&lt;br /&gt;
#2ln_straight_res_2&lt;br /&gt;
#res_2ln_3way&lt;br /&gt;
#res_2ln_3way_02&lt;br /&gt;
#res_3way&lt;br /&gt;
#res_3way_02&lt;br /&gt;
#res_90&lt;br /&gt;
#res_straight&lt;br /&gt;
&lt;br /&gt;
'''rural tile models'''&lt;br /&gt;
#2ln_3way_rural_res01&lt;br /&gt;
#4ln_1mi_02&lt;br /&gt;
&lt;br /&gt;
'''suburb tile models'''&lt;br /&gt;
#suburb_2mi_01&lt;br /&gt;
#suburb_90_01&lt;br /&gt;
#suburb_Scurve_01&lt;br /&gt;
&lt;br /&gt;
'''transition tile models'''&lt;br /&gt;
#2ln_fwy_2ln_rural&lt;br /&gt;
#2ln_fwy_3ln_fwy&lt;br /&gt;
#2ln_fwy_3ln_fwy_02&lt;br /&gt;
#2ln_fwy_4ln_fwy&lt;br /&gt;
#2ln_fwy_4ln_urban&lt;br /&gt;
#2ln_rural_2ln_gravel&lt;br /&gt;
#2ln_rural_2ln_gravel_02&lt;br /&gt;
#2ln_rural_2ln_res&lt;br /&gt;
#2ln_rural_2ln_res_3way&lt;br /&gt;
#2ln_rural_2ln_rural_10f_lane&lt;br /&gt;
#2ln_rural_2ln_rural_no_shoulder&lt;br /&gt;
#2ln_rural_3M_rural&lt;br /&gt;
#2ln_rural_4ln_city&lt;br /&gt;
#2ln_rural_4ln_rural&lt;br /&gt;
#3ln_fwy_3ln_urban&lt;br /&gt;
#4ln_BLVD_4ln_urban_e20&lt;br /&gt;
#4ln_BL_urban_2ln_rural&lt;br /&gt;
#4ln_city_4ln_BL_city&lt;br /&gt;
#4ln_city_4ln_BL_city_ROT_C&lt;br /&gt;
#4ln_rural_2ln_fwy&lt;br /&gt;
#4ln_suburb_2ln_rural&lt;br /&gt;
#4ln_suburb_2ln_rural_night&lt;br /&gt;
#4ln_urban_6ln_urban_day&lt;br /&gt;
#4ln_urban_6ln_urban_night&lt;br /&gt;
#5ln_urban_4ln_urban&lt;br /&gt;
&lt;br /&gt;
'''urban tile models'''&lt;br /&gt;
#4ln_urban_4x8_01&lt;br /&gt;
#urban_2ln_4ln_s1400A&lt;br /&gt;
#urban_4ln_arterial_02&lt;br /&gt;
#urban_4ln_straight_01&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
The Tile Mosaic Tool (TMT&amp;amp;trade;) was created to build visual and virtual correlated databases, a process generally known as world or database generation.  The TMT is used to arrange tile models into a configuration (world).  Tile models typically contain roads, terrain and feature objects.  The construction of these elements and additional models and textures require the use of 3rd party software for the creation of textured 3D models.  At the present time, only OpenFlight&amp;amp;trade; models and RGB format image files are supported by the TMT. Many commercially available (and many shareware or free) 3D programs can also be used for tile creation, but their output will need to be converted to OpenFlight&amp;amp;trade; format for use within the TMT.  For a partial list of applications, please see Appendix B.&lt;br /&gt;
&lt;br /&gt;
== '''Command line Syntax/Conventions''' ==&lt;br /&gt;
&lt;br /&gt;
In this document the following conventions are used for command line interaction.  #Information enclosed within bracket characters &amp;lt;like_this&amp;gt; is for user input. &lt;br /&gt;
#The phrase &amp;lt;ENTER&amp;gt; means that the user should press the Enter key, not to type in the word.&lt;br /&gt;
#Where the percent character is used to enclose a string, it indicates an environment variable or environment variable value.&lt;br /&gt;
&lt;br /&gt;
==  '''Getting Started''' ==&lt;br /&gt;
&lt;br /&gt;
The TMT tile library contains of a number of related model files which reside on your computer.  It is necessary that all tiles reside below a single parent directory (folder).  Within this top-level directory, sub-directories are used to divide the tile library into different categories.  Currently these categories consist of tiles with similar characteristics, but you are not limited to these.  Additional tile categories may be created under the top-level directory.  It is recommended that you do not change the basic tile category set, but you are able to add new tiles to existing categories, or create new categories for your tiles at any time.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Each tile model must be unique – you should not have two tiles within the library with the same name, even if they are in different categories. &lt;br /&gt;
&lt;br /&gt;
Start the TMT by double-clicking the icon.  You may want to open existing database worlds, or create a new world (terrain database).  To create a new world, choose New from the File menu (File &amp;gt;&amp;gt; New).  If the TMT has not been used on this computer before, you’ll have to preprocess the tile library in order to proceed.  Click Preprocess to load the tile library.  This procedure will occur only when the TMT is first used on your system, or when a tile geometry file (.FLT) has been modified.  The TMT loads the Tile Library automatically in normal use.&lt;br /&gt;
&lt;br /&gt;
To open an existing terrain database/world file, choose File &amp;gt;&amp;gt;Open and navigate to the database location on your computer.  &lt;br /&gt;
&lt;br /&gt;
The TMT workspace window will appear.  To place tiles into the terrain database, use the category tabs on the left to choose a tile category, and select a tile from the list by clicking with the left mouse button (LMB) on it.  This will “attach” the tile to the cursor.  Move the mouse to the right onto the terrain and position it, then LMB on any open grid to place the tile.  The TMT will attempt to snap the placed tile onto the terrain grid.  For more precise positioning, enable the terrain grid View &amp;gt;&amp;gt; Draw Attributes &amp;gt;&amp;gt; Grid and position the tile within the gridlines.&lt;br /&gt;
&lt;br /&gt;
You can rotate a tile while it is attached to the cursor by pressing any key. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' When you are placing tiles onto a terrain that already contains tiles, the tiles will attempt to connect only where tile edges are the same.  For example, the default tile edge is GEN (for General or Generic).  A GEN edge will not match with any other edge unless it is forced.  Although you can force tiles together, this is a procedure that has larger ramifications and can create visual and logical discontinuities and errors.  Forcing tiles should be carefully considered. &lt;br /&gt;
&lt;br /&gt;
When you are finished placing tiles, save the world file.  Choose File &amp;gt;&amp;gt; Save and navigate to the directory location you wish to save the file set to.  Because each world consists of multiple files, it is good practice to segregate them into their own unique directories.  The Database directory installed with the TMT is a good location.  For testing purposes, you may choose to use a single default “scratch” directory when doing rapid-cycle development or debugging and simply over-write the files repeatedly until a desired configuration is achieved.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Avoid the use of spaces in the folder path to the TMT project files, as this can create problems for various TMT script utilities.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' To force/override the tile placement function, press and hold CTRL-SHIFT as you place the tile.  This procedure will not allow you place a tile on top of another; it will however allow you to place two tiles together when their edges do not match.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Each road map created in the TMT must be evaluated in ISAT to determine if the map is good and traffic can travel on all sections.'''&lt;br /&gt;
The simplest way to test for a valid road network is to use ISAT and an ADO lead vehicle that drives across all road sections you plan to use during your simulation.&lt;br /&gt;
&lt;br /&gt;
The ADO path should look like the intended drive path for your external driver/XD.&lt;br /&gt;
&lt;br /&gt;
You can set a set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Force Velocity action on the lead vehicle to maintain a consistent headway gap relative to the XD.  This will allow you to see if there is a problem in the road network.&lt;br /&gt;
&lt;br /&gt;
Run the test scenario in ISAT rehearsal mode and see if the lead vehicle can navigate the entire road network.  Following a successful rehearsal, drive the scenario in miniSim and see if the results match.  If the lead vehicle disappears in either case,  review the road network in ISAT following the above guidelines.&lt;br /&gt;
&lt;br /&gt;
===  '''Creating Output'''  ===&lt;br /&gt;
&lt;br /&gt;
The process of building and driving a world on the miniSim is:&lt;br /&gt;
&lt;br /&gt;
#	Produce a terrain map by placing tiles on the workspace to create a road network using the TMT.&lt;br /&gt;
#	Output the visual files using the TMT.&lt;br /&gt;
#	Create a scenario control list (SCL) file using the command line.&lt;br /&gt;
#	Create a logical road information (LRI) file using the TMT.&lt;br /&gt;
#	Convert the LRI file to an optimized form (BLI) for ISAT and MiniSim using the command line.&lt;br /&gt;
#	Convert the visual files to an optimized format using the command line.&lt;br /&gt;
#	Install all required files on the miniSim using the install script.&lt;br /&gt;
#	Create a scenario that uses the world and save it to disk.  At a minimum you need to place an external driver on any roadway.  You can also set the ownship cab type using ISAT.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: All steps must be completed in order to view the created world on the MiniSim simulator.'''&lt;br /&gt;
&lt;br /&gt;
To generate files for use on the miniSim, you will use the TMT Output menu.  Environment creation workflow consists of building the visual database first.  The miniSim will render these output files after they are optimized and installed.  You must also process these visual files to produce a scenario control list (SCL) file.  After the SCL file has been created, you can choose Output &amp;gt;&amp;gt; Scenario LRI file from the TMT to create a Logical Road Information (LRI) correlated database file.  It will be necessary to convert the LRI file into a Binary LRI file (BLI), since that is the format the miniSim uses during simulation.  It can be useful to be able to read the text form of the LRI file when troubleshooting problems with the world output process.&lt;br /&gt;
&lt;br /&gt;
Conversion of the output flt files to an optimized format for use on the miniSim happens with a two-step process.  First a command list is created in the flt folder, and then that file is processed to generate the required files.&lt;br /&gt;
The database is ready for visualization on the miniSim when all the files have been installed.&lt;br /&gt;
&lt;br /&gt;
==  '''Tile Library Contents'''  ==&lt;br /&gt;
&lt;br /&gt;
The Tile Library has been designed as an open-ended, extendable library of re-usable components.  Tile models are a different class of model from model objects such as signs, vehicles or virtual objects.  Tile categories are intended to provide a coarse level of differentiation between tiles with different features (culture).  Generally, tiles will contain roads, roadway markings, terrain and vegetation.  More complex tiles will include signage or traffic control devices such as traffic signals, railroad crossing signals, and general signage.  In most cases, signs and traffic control devices are designed to be operated during simulation, which means they may be authored in ISAT to change appearance either during simulator initialization (i.e., changing a stop sign to a yield sign), or change dynamically during simulation (i.e., traffic light state changes from red to green to yellow).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tile Library content may be added to at any time without affecting previously constructed terrain databases.  However, it is important to understand that scenario events are closely coupled with geographic locations within the world.  Changing a world after scenario authoring has begun or following authoring completion may result in unexpected results or even failure to load or run the scenario in ISAT. &lt;br /&gt;
&lt;br /&gt;
Typically it is possible to change a portion of the road network if there are no scenario paths or elements on that portion.  Extending a road network beyond an intersection will not affect the road network on the upstream side of the intersection.&lt;br /&gt;
&lt;br /&gt;
[[File:tmt_adding_to_existing.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
This example assumes there are no scenario authored objects, events or paths in the areas modified by the addition of tile models to the original design.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tile models require additional development for night rendering effects.  Not all models in the library contain these effects.&lt;br /&gt;
&lt;br /&gt;
Tile categories include:&lt;br /&gt;
&lt;br /&gt;
#	City&lt;br /&gt;
#	Comm (commercial features)&lt;br /&gt;
#     Elev_maps (models contain elevation maps)&lt;br /&gt;
#	Filler (borders, panoramas and fillers)&lt;br /&gt;
#	Fwy (freeway)&lt;br /&gt;
#	Ind (Industrial features)&lt;br /&gt;
#	Mtn (Mountain)&lt;br /&gt;
#     Obsolete (these tiles should not be used)&lt;br /&gt;
#	Railroad (includes a rail line)&lt;br /&gt;
#	Res (Residential)&lt;br /&gt;
#	Rural (Countryside)&lt;br /&gt;
#     Rural_bike_lane (rural tiles with bike lanes) &lt;br /&gt;
#	Special (Tiles which are non-standard in some way, or project-specific and not intended for general-purpose use)&lt;br /&gt;
#	Suburb&lt;br /&gt;
#     Transition (tiles that connect between different road types and lanes)&lt;br /&gt;
#	Urban&lt;br /&gt;
&lt;br /&gt;
Due to the nature of the visual and virtual correlated databases, special effects such as wet or snow environments have been constructed as specialized tiles, with the intended effect built into the tile model. &lt;br /&gt;
&lt;br /&gt;
Time of day is a more general simulation effect, although for some complex tiles, a lighting effect has also been built into the tile.  These special-function tiles are identified by keyword within the tile name (wet, day, night).  &lt;br /&gt;
&lt;br /&gt;
Although it is possible to use day tiles at night or vice-versa, the resulting database may appear odd and incongruous to the viewer.&lt;br /&gt;
&lt;br /&gt;
Additional tile categories may be created by editing the alltiles.txt TMT configuration file located in the ProjectData\Tiles\ directory. &lt;br /&gt;
&lt;br /&gt;
===  '''Tile Model Naming Conventions'''  ===&lt;br /&gt;
As the tile library grows, it is useful to know how the tile model name is constructed.&lt;br /&gt;
&lt;br /&gt;
Tile model names are intended to provide some clue as to the nature or content of the tile, without requiring the user to actually view the model.  Viewing the model is, of course, a really great way to become familiar with the model.  &lt;br /&gt;
&lt;br /&gt;
Here are a few examples:&lt;br /&gt;
&lt;br /&gt;
*2ln_city_01&lt;br /&gt;
**2 lane road, tile version 1&lt;br /&gt;
*2ln_city_1x1_crv90_01_20&lt;br /&gt;
**2 lane road, road bed is a 90 degree curve, tile version 1, 20f elevation&lt;br /&gt;
*2ln_city_4way_20&lt;br /&gt;
**2 lane road, 4 way intersection, 20f elevation&lt;br /&gt;
*4ln_2x2_Hill_02&lt;br /&gt;
** 4 lane, 2x2 tile (1320f x 1320f), tile version 2&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' elevated tiles &amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt; '''WILL NOT''' &amp;lt;/span&amp;gt;connect to standard tiles.  You will require a hill tile to connect elevated and standard tile models.  Forcing connections to these tiles is not advisable '''unless''' the connecting model has the same elevation.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Tile versions are typically small variations from earlier version models.  However, they may be completely different content on a similar road layout.&lt;br /&gt;
&lt;br /&gt;
'''What happened to version &amp;lt;u&amp;gt;x&amp;lt;/u&amp;gt;?'''&lt;br /&gt;
&amp;lt;ul&amp;gt;In cases where there is a missing version number, chances are that tile version is either not yet developed, or the missing version was left out of the TMT for some reason.  There is no requirement that model versions be sequential, it just a mechanism to help classify a model.&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== '''Compatible Tile List'''  ==&lt;br /&gt;
&lt;br /&gt;
This command provides a list of tiles which are compatible in terms of edge specifications for placement at an open grid location in the terrain database.  You must select an open grid location adjacent to a placed tile to use this command.&lt;br /&gt;
&lt;br /&gt;
#Select a grid location.  &lt;br /&gt;
To select a grid location, double click (DBL) the grid location.  That selected grid location will draw a yellow outline, indicating it has been selected.&lt;br /&gt;
&lt;br /&gt;
[[File:TMT_selected_grid.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
#RMB &amp;gt;&amp;gt;Compatible Tile List or Edit &amp;gt;&amp;gt; Compatible Tile List.  A dialog will list all compatible tile choices for the selected grid location.&lt;br /&gt;
&lt;br /&gt;
[[File:TMT_selected_grid_compatible.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
Tiles are listed in terms of tile name, rotation, size and category.  Select a compatible tile by LMB a Tile Name in the dialog.  To place the compatible tile into the terrain, LMB the Apply button.  The tile is placed at the selected grid location in the terrain.  You can continue to choose other tiles from the dialog and apply them to the terrain until the desired tile has been placed.  LMB OK to close the dialog or Cancel to cancel.&lt;br /&gt;
&lt;br /&gt;
==  '''Manual Tile Placement'''  ==&lt;br /&gt;
&lt;br /&gt;
The most common way to create terrain databases in the TMT is by placing the tiles manually.  This provides the greatest control over creating the exact road network desired for simulation.  After a tile has been placed in the database, you can edit the tiles to meet specific requirements* through the use of ISAT to change features that were created as configurable features.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Editing the source tile model requires the use of a 3D editor.  Tile editing and 3d modeling is outside the scope of this document.&lt;br /&gt;
&lt;br /&gt;
To manually place tiles, choose a tile category from the left panel.  Select a tile and LMB on the icon.  Move the cursor to the right side, into the terrain layout.  You can rotate a tile by pressing any key.  Click on an open grid location to place the tile.  To detach the tile from the cursor, move the cursor to the edge of the terrain database window.&lt;br /&gt;
&lt;br /&gt;
The TMT will prevent placement if the following conditions occur:&lt;br /&gt;
1.	You are attempting to place a tile onto another tile.&lt;br /&gt;
2.	You are attempting to place a tile where the tile edge does not match.  The TMT will turn the placed tile edge red when this happens, indicating an invalid edge match.&lt;br /&gt;
&lt;br /&gt;
NOTE: You can override the edge match by pressing '''CTRL AND SHIFT''' when placing the tile.  Be aware this can cause discontinuities and visual mismatch when you override edge matching.&lt;br /&gt;
&lt;br /&gt;
After a tile is placed, you can modify the orientation by invoking commands from the Edit menu, RMB or Tool Bar.&lt;br /&gt;
1.	Select a tile or group of tiles in the terrain database.&lt;br /&gt;
2.	Choose a function from the Edit menu, RMB menu, or Tool Bar.&lt;br /&gt;
&lt;br /&gt;
==  '''Auto Tile Placement'''  ==&lt;br /&gt;
&lt;br /&gt;
You can fill in defined areas in the terrain database using automatic tile placement, which is used when no particular configuration is desired and a large region of coverage is desired.  From the Auto Tile Placement dialog, you can choose tile categories and individual tiles within each category for placement.  Tile placement is based upon a weighting factor which is controlled by this dialog.&lt;br /&gt;
&lt;br /&gt;
Selecting a grid area by DBL at an open grid location.  If properly selected you will see the terrain grid outlines in yellow.  Move the cursor to another location, holding the SHIFT key, and LMB again at the new location.  You will see a region of terrain grid now has a yellow border, indicating a valid selection.  Choose Edit &amp;gt;&amp;gt; Auto Tile Placing or RMB &amp;gt;&amp;gt; Auto Tile Placing.&lt;br /&gt;
&lt;br /&gt;
[[File:TMT_Auto_placement.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: if a grid area is not properly selected the command will not enable.&lt;br /&gt;
&lt;br /&gt;
The Auto Tile Placement Control Dialog will appear.  The dialog has two parts:&lt;br /&gt;
#	Category selection and adjustments&lt;br /&gt;
#	Library tile placement and adjustments&lt;br /&gt;
&lt;br /&gt;
In the Category selection and adjustment area, choose the tile categories you wish to use for auto tile placing.  You can select multiple categories, or LMB Select All.  When you have chosen tile categories, LMB the Add button.  Use CTRL to select discontinuous categories, or SHIFT to select a continuous list of categories.  You can also remove single or multiple categories from the destination list.&lt;br /&gt;
&lt;br /&gt;
In the Library Tile Selection and Adjustments section, you can choose the library tiles you wish to use in auto placement.  Tiles within the selected Tile Categories appear in the source (left bottom) window.  You can use Select All, Add, Remove and Clear buttons for both Tile Categories and Tiles.  Adjust the weighting factors of each tile by using the slider bar.  The Optimal Tiling button applies higher weights to tiles that have the most common edge specifications among the list of tiles chosen.  Click OK to apply the settings to automatically place tiles within the terrain.  Cancel will cancel the auto tile placement command.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==  '''Controllability: Unique vs. Generic Functionality'''  ==&lt;br /&gt;
&lt;br /&gt;
The MiniSim&amp;amp;trade; uses scenario control software to control individual components within a tile (ie., changing a traffic light or sign).  But what happens when there is more than one tile reference of the same tile within the terrain database?  In order to control each model component, tiles must be flagged as a unique tile instance.  This is achieved by enabling the Unique Control setting in the TMT&amp;amp;trade; (the traffic light icon) and then enabling Unique Control for a tile or selection of tiles.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Unique control options in the menu are disabled until the Unique Control Mode is enabled in the TMT.&lt;br /&gt;
&lt;br /&gt;
Select a tile by LMB or a group of tiles using fence select.  RMB &amp;gt;&amp;gt; Enable/Disable Unique Control (Selected Tiles) or Edit &amp;gt;&amp;gt; Enable/Disable Unique Control (Selected Tiles).  A uniquely controlled tile will display a small green X in the terrain layout view.  Because this function is a toggle, to turn off unique control, you can disable all controls or for the selected tile using the same menu as enable.&lt;br /&gt;
&lt;br /&gt;
===  '''When are Unique Controls necessary?'''  ===&lt;br /&gt;
&lt;br /&gt;
Unique controls are '''not''' necessary if there are no controls available within the tile!  &lt;br /&gt;
&lt;br /&gt;
However, if a tile contains SWITCHES, then the tile has been built to support changes to the simulation scene from scenario control.  For example, some tiles contain street signs.  It is often desirable to have a world contain unique street names.  If the world is built with Unique Controls enabled, then a scenario author may adjust each street sign to a different name using the Interactive Scenario Authoring Tool (ISAT).  This mechanism is used for all cases where a change in appearance is desired within the terrain tile.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The TMT will output a file for each Unique Control tile.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Turning a visual element off within a tile does not disable the CVED representation.'''  Even if the object is not visible to the simulator driver, the object still exists.&lt;br /&gt;
&lt;br /&gt;
This has implications if the miniSim is configured with collision effects enabled.  In this case, '''driving into a visually disabled object will result in a collision.'''&lt;br /&gt;
&lt;br /&gt;
Due to the nature of switch controls, it is possible to implement controllability for visual scene elements at any time.  However, there is no corresponding capability for any applicable CVED representation.&lt;br /&gt;
&lt;br /&gt;
For example, it is possible to create controllable road markings with different visual conditions (pristine, aged, off) but without additional programming CVED will not reflect this functionality.  In this case, the CVED road marking representation will always be present, until the CVED code has been modified to support a variable condition road marking.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
===  '''Load Management for Visual Databases'''  ===&lt;br /&gt;
&lt;br /&gt;
It is possible to create databases which will not perform optimally on the MiniSim&amp;amp;trade;.  To avoid this, adjust the visibility of terrain tiles by using the level of detail (LOD) node within each tile.  More complex tiles may contain additional LOD nodes.&lt;br /&gt;
&lt;br /&gt;
Right-click any tile and choose Tile LOD Settings… from the context menu.  The LOD dialog will highlight each LOD in the configuration window as you select LODs from the list.  You can change the Center, Switch Distance, Transition Range and Freeze flags for each LOD.  Setting a small Switch Distance will cause the tile to display when the eyepoint approaches closer to the tile.  Large values cause the tile to become visible over longer distances.  Excessively long values, especially within complex environments, may contribute to performance problems.&lt;br /&gt;
&lt;br /&gt;
It is most desirable to have terrain tiles visible only for the period they are needed.  The LOD Center X, Y and Z values can be manipulated to shift the LOD so that the tile disappears behind curves.  Thus, curve tiles are ideal for load management elements.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Changing the LOD Center values will require the Freeze flag to be enabled.  If the freeze flag is not enabled, the tile may not display as anticipated.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-03_10h56_40.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Notice how the curve tile LOD has been edited so the tile is not visible from the North-South road along the right side, and it is not displayed to the left of the large S-curve tile since it is unlikely the tile can be seen from that location anyway.&lt;br /&gt;
&lt;br /&gt;
LODs can be adjusted significantly as needed, as shown below.&lt;br /&gt;
[[File:2021-12-03_11h35_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
== '''Output for Visual Database'''  ==&lt;br /&gt;
&lt;br /&gt;
1.	After a world has been developed and saved to disk, you can publish the visual database world to disk.  From the TMT&amp;amp;trade; Output menu, choose Output Scenario/Visual Data.  A dialog will appear.  Disable the LRI flag, and use the default settings for OpenFlight Output. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' This will over-write the files located within the project flt directory; in the event you wish to retain these files, it is best to create a backup copy of the flt directory prior to generating output.&lt;br /&gt;
&lt;br /&gt;
2.	The next step is to generate a scenario control list for the terrain database/world that you've just generated.  The SCL is a text file that lists all available switches, which can be authored using the ISAT.  Without this file, although you can generate a world that will run on the MiniSim&amp;amp;trade;, you will be unable to author objects within the environment such as street signs, traffic lights, etc.&lt;br /&gt;
&lt;br /&gt;
Open a command window at the FLT directory.  You can use the windows explorer to navigate to the Database directory under Favorites: Favorites &amp;gt;&amp;gt; ProjectData_Databases.  Open the directory containing your database, then right-click on the FLT folder and choose “Open CMD here” from the context menu.&lt;br /&gt;
&lt;br /&gt;
At the command window, enter:&lt;br /&gt;
'''buildscl''' &amp;lt;DB_NAME.flt&amp;gt;&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Remember that DB_NAME is the name of your .MOS world file (terrain database), and you do not type the ‘&amp;lt;’ or ‘&amp;gt;’ characters.  &amp;lt;ENTER&amp;gt; means press the Enter key on your keyboard.&lt;br /&gt;
&lt;br /&gt;
The program buildscl will create a scl file that is the same prefix as your terrain file (i.e., buildscl myTerrain.flt will generate the file myTerrain.scl).&lt;br /&gt;
4.	Generate the optimized files for use on the Minisim simulator.  Open a command line in the flt output folder.  Type in the following command:&lt;br /&gt;
'''buildbatchlist''' &amp;lt;DB_NAME&amp;gt; &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To automatically execute the optimization script, include the execute flag on the command line:&lt;br /&gt;
&lt;br /&gt;
buildbatchlist &amp;lt;DB_NAME&amp;gt; -e &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The script will create a command file (do.bat) that will process all the flight files in your output flt folder.&lt;br /&gt;
&lt;br /&gt;
To manually execute the optimization command file on the command line:&lt;br /&gt;
'''do''' &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The command line will process all the flight output files.  When this is complete you will navigate up one  folder level to prepare for processing the LRI file.  &lt;br /&gt;
cd .. &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*NOTE – this is two periods, which means “go up one level”.&lt;br /&gt;
&lt;br /&gt;
**NOTE – if you forget to generate optimized files for the simulator the database installer script will not complete.&lt;br /&gt;
&lt;br /&gt;
==  '''Output for Correlated (Logical) Database'''  ==&lt;br /&gt;
&lt;br /&gt;
1.	After you have generated the visual database and a .scl file and optimized the flight output, create the correlated virtual environment database.  From the TMT&amp;amp;trade; Output menu, choose: Output Scenario/Visual Data and this time, disable all the OpenFlight&amp;amp;trade; Output options.  Although you may enter a different output prefix, it is easiest to maintain projects if the default file name is used for both the terrain database.mos and the correlated virtual database.lri file.&lt;br /&gt;
&lt;br /&gt;
A DOS window will display the status of the LRI build.  Because this window is not persistent, if there are any error messages you wish to save you must collect them from the window using the quickedit mode: select the text you wish to save, and press &amp;lt;ENTER&amp;gt;.  This places the text into a buffer, which you can now use to paste into a text log file for later use.&lt;br /&gt;
&lt;br /&gt;
The most typical error will be a warning that a .summary or .scl file has not been found.  In that case, you can proceed with the correlated virtual database build but no switches will be available to author.  To correct this, simply follow step2 from Output for Visual Database located above, and then re-output the correlated virtual database file.&lt;br /&gt;
&lt;br /&gt;
2.	Navigate to the world/project folder.  If you have a DOS window open to the FLT directory already, to move up one directory you can enter:&lt;br /&gt;
cd ..&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3.	From the DOS command window, enter the following:&lt;br /&gt;
'''mlri''' &amp;lt;database&amp;gt;&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will cause a script to convert the ASCII correlated database .LRI file to an optimized binary form.  This script will copy your database BLI file for use within ISAT to the ISAT directory.  If you wish to see the script command commands necessary to convert the LRI file, simply enter:&lt;br /&gt;
'''mlri''' &amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and the script will echo the command and parameters in the DOS window.&lt;br /&gt;
&lt;br /&gt;
==  '''Test the New Database'''  ==&lt;br /&gt;
&lt;br /&gt;
Just because a database can be built, and the BLI can be read by ISAT, does not mean the road network is entirely valid and drivable.  Testing can validate the database for simulated traffic and the External Driver (XD).&lt;br /&gt;
&lt;br /&gt;
To test the database, place an ADO on the roadmap/BLI in ISAT and extend a path over the entire route that the XD is intended to drive.  If ISAT cannot build a path over the entire route then there is some problem in the BLI to resolve.  It is likely that the point where the path ends is where simulated traffic will die during simulation and disappear from the scene.&lt;br /&gt;
&lt;br /&gt;
Reasons for this include:&lt;br /&gt;
# Forcing two tiles together in the TMT that do not share the same road characteristics (number of lanes, elevation).&lt;br /&gt;
# A problem in a tile on either side of the location where the path ends.'&lt;br /&gt;
# some other as yet unknown condition.&lt;br /&gt;
&lt;br /&gt;
A successful path is only the first step.  To be sure that you have a working database it is necessary to drive the desired route on the miniSim.  Ideally you would start the driver just behind the test ADO, and use a Maintain Gap or Force Velocity action to keep that test ADO in sight throughout the drive.&lt;br /&gt;
&lt;br /&gt;
Note: if the ADO is on a forced velocity and the XD speed exceeds the limit of what the ADO can support for cornering, it may disappear as a result.&lt;br /&gt;
&lt;br /&gt;
When both the test ADO and XD arrive at the end of the drive, it is safe to say the database is valid and ready for scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Note: Authoring scenarios and then making changes to the BLI can invalidate the scenario, so testing should be the first thing to do when starting a new project with a new database world.&lt;br /&gt;
&lt;br /&gt;
== '''Database Use Within ISAT'''  ==&lt;br /&gt;
&lt;br /&gt;
Following the successful creation of the visual and logical world, you will be able to open the world BLI from ISAT to create scenario events and conditions using your new database.  The build process automatically copies the .BLI and .placeholder support file into the %MINISIM_ROOT%\Data/ directory.  You can also access the primary files from the Projectdata\Databases/ directories.  Care should be taken to maintain one pristine copy of files for development, and where necessary, backup copies should be made prior to major changes to your scenario (.SCN) files.&lt;br /&gt;
&lt;br /&gt;
==  '''File Transfer to MiniSim&amp;amp;trade;''' ==&lt;br /&gt;
&lt;br /&gt;
Database worlds that are created using the TMT&amp;amp;trade; must be copied into the MiniSim&amp;amp;trade; directory tree before they are available for use within the MiniSim&amp;amp;trade; simulator.&lt;br /&gt;
&lt;br /&gt;
A script has been provided to copy files for user convenience, although it is advisable to be aware of the various file types and locations where these files are to be placed for proper configuration.&lt;br /&gt;
&lt;br /&gt;
To install a database world, run the following script from the database directory:&lt;br /&gt;
&lt;br /&gt;
'''dbinstall''' &amp;lt;DB_NAME&amp;gt;&amp;lt;Minisim&amp;amp;trade; Version Number&amp;gt;&amp;lt;ENTER&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This script expects the database files will be available from the location the script is activated, which means the default configuration as installed and described in this document.  In the event of an error, the script will discontinue operation and inform the user it has encountered a problem.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Non-standard file locations may cause the installation script to fail.&lt;br /&gt;
The following files are copied (version refers to the installed software version number):&lt;br /&gt;
&lt;br /&gt;
DB_NAME.scl	C:/MiniSim&amp;amp;trade;_version/bin.x64/&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;.FLT/*.IVE	C:/MiniSim&amp;amp;trade;_version/visuals/db_name/&lt;br /&gt;
&lt;br /&gt;
DB_NAME.BLI	C:/MiniSim&amp;amp;trade;_version/data /&lt;br /&gt;
&lt;br /&gt;
DB_NAME.FTR	C:/MiniSim&amp;amp;trade;_version/bin.x64/&lt;br /&gt;
&lt;br /&gt;
'''TMT&amp;amp;trade; Reference'''&lt;br /&gt;
Help: There is currently no online help feature available for the TMT&amp;amp;trade;.&lt;br /&gt;
&lt;br /&gt;
==  '''Associated file set''' ==&lt;br /&gt;
&lt;br /&gt;
The Tile Library contains a number of related files, all of which are necessary to the use of the TMT&amp;amp;trade; and creation of Minisim&amp;amp;trade; environments:&lt;br /&gt;
&lt;br /&gt;
#	allTiles.txt – this text file contains a list of the tile library tiles and categories (configuration file for the TMT&amp;amp;trade;).&lt;br /&gt;
#	CD1 – A text file containing a list of the Tile Library Tiles used in the MOS.&lt;br /&gt;
#	CD2 – A text file that defines the connective edges between tiles.&lt;br /&gt;
#	DDS – these are compressed texture files for use on the MiniSim&amp;amp;trade;.&lt;br /&gt;
#	FLT – These are binary OpenFlight&amp;amp;trade; files that contain geometry and references to image texture files.  These files are necessary for MiniSim&amp;amp;trade; simulator operation.&lt;br /&gt;
#	FTR – This is a TMT&amp;amp;trade; support file that contains all the tile references necessary for a terrain configuration including XYZ offset, rotation, and tile category type.  This file is necessary for MiniSim&amp;amp;trade; simulator operation.&lt;br /&gt;
#	ICN – this is a binary file that is used for the TMT&amp;amp;trade; tile icon.&lt;br /&gt;
#	Intersection.map – a text file that contains terrain data and specifications for unique elevation maps applied inside intersections.&lt;br /&gt;
#	IVE – these are binary converted files optimized for MiniSim&amp;amp;trade; use.&lt;br /&gt;
#	JPG – this is a binary snapshot view of the tile from an overhead view.&lt;br /&gt;
#	LatProfileList.lat – this text file contains all the lateral specifications for every road type.  It includes a cross-section profile and a material code index.&lt;br /&gt;
#	MOS – this binary file is a TMT&amp;amp;trade; project file, also referred to as a world or project file.&lt;br /&gt;
#	PATH/CORR – these are text data files that contain coordinate data describing either roads or intersection corridors.&lt;br /&gt;
#	PET – this text file contains logical database tag information.&lt;br /&gt;
#	RGB, RGBA, DDS –binary image texture files.  The RGB and RGBA files may also have associated .attr files: these files are produced from the modeling environment tools and are not currently used by the TMT&amp;amp;trade; or MiniSim&amp;amp;trade;.  However, the RGB, RGBA and DDS files are necessary for MiniSim&amp;amp;trade; simulator operation.  These files will already be present in the MiniSim&amp;amp;trade; configuration, but additional (new) files must be copied to the proper location.&lt;br /&gt;
#	SUP – this binary file is used by the TMT&amp;amp;trade;.&lt;br /&gt;
#	SurfaceMaterialSpecifications.xlsx – an Excel&amp;amp;trade; document that contains surface material codes for road surfaces.&lt;br /&gt;
#	tileSizes.txt – this text file contains a list of tile library tiles and their dimensions, given in Tile Units (increments of 660 ft; a 1 x 1 tile = 660ft x 660ft).  Secondary configuration file for the TMT&amp;amp;trade;.&lt;br /&gt;
#	TXT – this text file contains TMT&amp;amp;trade; information.  The TXT file will be updated when the binary FLT file changes, and should remain read/write.  If you want to force the TMT&amp;amp;trade; to re-process the tile library or any particular tile, delete the TXT files and the TMT&amp;amp;trade; will re-create them.&lt;br /&gt;
&lt;br /&gt;
==  '''Included Databases''' ==&lt;br /&gt;
&lt;br /&gt;
The following is a list of databases installed with the TMT&amp;amp;trade; with general descriptions:&lt;br /&gt;
#	day_night_01: A long environment containing urban, residential, highway and rural environment.  This database is designed for day or night use from the highway to rural area only.  The urban environment is a night-only area.&lt;br /&gt;
#	day_night_snow_01: The same environment as day_night_01 but with snow effects and roadways for the highway and rural roads.&lt;br /&gt;
#	nadsdemo_dsc: A demonstration database containing dry, wet, and snow environments.  This database includes a small urban area, a small rural area, and a small mountainous area.&lt;br /&gt;
#	nadsdemo_geospecific: A small, geo-specific database built to match a real-world location in Iowa.&lt;br /&gt;
#	nadsdemo_kiosk: A small, geo-typical database containing 3 separated environments.  Contains rural and urban environments.&lt;br /&gt;
#	simple_rural1: a basic, small rural environment&lt;br /&gt;
#	simple_rural2: a basic, small rural environment with unique tiles enabled.&lt;br /&gt;
#	rural_long: A simple rural environment intended for longer simulation drives.  It begins with a long, straight roadway and contains varying curves and hills, with some intersections and one cross-road.&lt;br /&gt;
#	test_all: A database that contains all the TMT tiles.  Tiles are connected to each other for each category, and connections have been forced.  This makes it possible to create a scenario for each tile category and to drive all the tiles, to become familiar with each tile and roadway type.  The original tile orientation has been preserved where possible.  Each tile category reads from top to bottom, left to right where possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;image_here&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==  '''Database Creation Guidelines''' ==&lt;br /&gt;
&lt;br /&gt;
Using the TMT&amp;amp;trade; it is possible to overload the visualization capacity of the MiniSim&amp;amp;trade;.  A few common sense rules will help to avoid that situation:&lt;br /&gt;
&lt;br /&gt;
#	Build only what you need.  If your scenario requires 3 miles of highway driving, there is no point in building a ten mile stretch of terrain database.  Keep the region of interest (ROI) or gaming area extent reduced to the smallest necessary footprint.&lt;br /&gt;
#	Fewer larger tiles are more efficient than many smaller tiles.  If you need 3 miles of highway, do not create a terrain that uses a small 1x1 tile to make the longer road.&lt;br /&gt;
#	If you cannot see it from the road, don’t include it in the terrain.  If something will never be visible, why include it in the terrain?  There is one caveat: sometimes you will want to enclose the ROI such that it is not possible to see beyond the terrain edge.  You will enclose the terrain using filler tiles, which are designed to block the view.  These are secondary tiles with very little detail, small amounts of features and no drivable roads.&lt;br /&gt;
#	Adjust the load for optimal performance.  Even if you follow these guidelines, you may still bump into processing limitations.  You can modify each tile within the TMT&amp;amp;trade; to display only when it is visible to the driver, and to turn off when it is not.  This is accomplished by using level of detail (LOD).  Each tile contains an LOD that is controlled from the TMT&amp;amp;trade; to permit the terrain database author to disable or enable tiles as needed to ensure consistent performance.&lt;br /&gt;
#	Although the TMT&amp;amp;trade; itself does not enforce a rule, mixing coordinate units within the same terrain database is likely to cause problems.  All tiles in the TMT&amp;amp;trade; Tile Library were constructed with units = feet, using the right-hand rule of coordinate systems: X increases to the right, Y increases forward, and Z increases upward.&lt;br /&gt;
#	Forcing tile edge matches: although you can force a match in the TMT&amp;amp;trade;, almost always you will not want to as it is likely to create problems within the visual terrain or logical database.  A rural road that is forced to match an urban road will appear OK in the TMT&amp;amp;trade;, but when you drive that database you will see how different the two road types are, and how the rural tile edge contains a different elevation profile than the urban edge.  Use a transition tile to change from one road type to another instead of forcing these types of matches.  There are only a few road types that can be forced that will still look and work due to their construction, profile and lane information.&lt;br /&gt;
&lt;br /&gt;
'''Note: ''' After you have begun authoring scenarios, it is no longer trivial to change the terrain database.  This is due to the internal data structure elements of the SCN and BLI files.  The best approach is to finalize the road network configuration prior to scenario authoring activities.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
==  '''Script Utilities''' ==&lt;br /&gt;
&lt;br /&gt;
A number of script utilities have been developed to assist with the terrain generation process. These files are located within the utils directory.  In addition to the scripts mentioned within this document, the following scripts are included:&lt;br /&gt;
&lt;br /&gt;
*lg.bat – This script will generate an LRI file from within the database project folder.  In order to use this script the TMT&amp;amp;trade; must have already published the tile models, and the user should also have created the db_world.scl file from the TMT&amp;amp;trade; tile models located in the flt folder.  This script is run from the same folder location as the db_world.mos file.&lt;br /&gt;
&lt;br /&gt;
*mlri.bat – This script will generate a .BLI file from a .LRI file, and is run from the same folder as the db_world.mos file.  The lri file can be published from the TMT&amp;amp;trade; or created using the lg.bat script.&lt;br /&gt;
&lt;br /&gt;
*view.bat – This script allows the user to review an object or tile model without having to create a database and scenario and driving them on the MiniSim&amp;amp;trade;.  The viewer is only for reviewing models, it cannot be used to review a scenario.  This command should be run from a command (DOS) window that is opened to the folder containing the models to be viewed.  In the event this command does not work, the user should run nadsconfig_system.bat and then use the osg_viewer.exe application to view the model, and then communicate the script failure to NADS so the error may be corrected.&lt;br /&gt;
&lt;br /&gt;
==  '''Lessons Learned: Things that can go wrong'''  ==&lt;br /&gt;
&lt;br /&gt;
Although the terrain creation process is fairly streamlined, a number of issues may arise that could lead to problems.  Mitigation strategies are provided to get you back into production:&lt;br /&gt;
&lt;br /&gt;
# Test every road map.  Just because the TMT produces a database does '''not''' guarantee the result is a completely drivable road network.  [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=TMT_Troubleshooting_Guide_(all_versions)#ADOs_Can.27t_Travel_On_Sections_of_the_Road_Network Test to make sure that it is.]&lt;br /&gt;
#	Every time you make a new build, generate both the visual and logical databases together.  This is because there are no versioning schemas built into the TMT&amp;amp;trade;, so it is necessary to re-generate all your files for a build in the same session.  This has the highest chance for success.  Often when a terrain control is not operating the way you think it should, the issue can be traced back to a mismatch between the visual and logical databases.&lt;br /&gt;
#	Use a script for consistency.  To repeat procedures over and over again with a consistent approach, use a script to ensure that you are using the commands and command line options the same way every time you perform a build.&lt;br /&gt;
#	Do not copy/paste large areas using the TMT&amp;amp;trade;.  This can create corrupted terrain databases.  Once a terrain file has been corrupted, there is no way to recover it.  By saving a terrain database as another file, you can jump-start the construction process and provide yourself with a backup file at the same time.  Copy/paste multiple tiles can be combined with rotation.&lt;br /&gt;
#	To control objects in the environment (signs, traffic signals, etc) it is necessary to ensure the database world has been created using the “Unique Tiles” option, as described in the section Controllability: Unique vs. Generic Functionality (p10).&lt;br /&gt;
&lt;br /&gt;
NOTE: You can have multiple TMT&amp;amp;trade; sessions open at once, using one database as a reference for LOD settings while building a second database.&lt;br /&gt;
&lt;br /&gt;
==  '''Unwanted collisions during simulation'''  ==&lt;br /&gt;
&lt;br /&gt;
If collisions are encountered with invisible objects during simulation - ie, there is no apparent source for the collisions, or if there are many collisions happening - the procedure involves:&lt;br /&gt;
1. Identify the tile containing the collisions.  A coordinate is helpful for this, which can be determined from ISAT (reported on the status bar) or miniSim (has to be enabled).&lt;br /&gt;
2. Review the tile.pet file for Objects.  &lt;br /&gt;
3. Each Object in the tile.pet will reference a sol2 object.&lt;br /&gt;
4. Locate the sol2 object from #3 then find the CollisionSoundID record.&lt;br /&gt;
5. Any positive number will enable collisions.  To disable, replace the value with -1.&lt;br /&gt;
&lt;br /&gt;
Note: If the object is not found in the sol2.txt file, then search all sol2_aux*.txt files.&lt;br /&gt;
Note: Remember to copy the modified file to ISAT\data if you are editing the file in NadsMiniSim_x.x\data (and vice-versa) to maintain consistency.&lt;br /&gt;
NOTE: You must exit miniSim and/or ISAT before making changes to system configuration files.&lt;br /&gt;
&lt;br /&gt;
[[File:determine_and_disable_collision_objects_02052021.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
=Appendix A=&lt;br /&gt;
==Obsolete and compatible tile models==&lt;br /&gt;
&lt;br /&gt;
Do '''NOT''' use obsolete tile models - instead, locate the compatible tile model and use that instead.  Obsolete models are included solely to avoid potentially corrupting existing world.mos files.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+ Obsolete and compatible Tile Models&lt;br /&gt;
|-&lt;br /&gt;
|Obsolete Tile||  use -&amp;gt; ||Compatible Tile&lt;br /&gt;
|-&lt;br /&gt;
|2ln_city_06&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_4ln_city'''&lt;br /&gt;
|-&lt;br /&gt;
|2ln_4ln_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_4ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|2ln_res_rural_trans&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_res'''&lt;br /&gt;
|-&lt;br /&gt;
|urban_4ln_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''5ln_urban_4ln_urban'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_3LN_2ln_Trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_3ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_2ln_gravel_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_gravel'''&lt;br /&gt;
|-&lt;br /&gt;
|suburb_trans_rural_01_night&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_suburb_2ln_rural_night'''&lt;br /&gt;
|-&lt;br /&gt;
|suburb_trans_rural_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_suburb_2ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_city_1x1_BL_Trans01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_city_4ln_BL_city'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_trans_4ln_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_4ln_urban'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_trans_rural_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_2ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_trans_4ln_2ln_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_4ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_3LN_3LnUrban_trans01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''3ln_fwy_3ln_urban'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_BL_rural_trans01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_BL_urban_2ln_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_rural_4ln_trans_01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_rural_2ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|BLVD_4ln_trans_01_20&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_BLVD_4ln_urban_e20'''&lt;br /&gt;
|-&lt;br /&gt;
|fway_3ln_2ln_trans_03&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_fwy_3ln_fwy'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_2ln_gravel_trans_02&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_gravel_02'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_trans03&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_rural_no_shoulder'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_trans01_3Mto12f&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_3M_rural'''&lt;br /&gt;
|-&lt;br /&gt;
|rural_trans02_10fto12f&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_rural_10f_lane'''&lt;br /&gt;
|-&lt;br /&gt;
|urban_6ln_4ln_transition&lt;br /&gt;
| is now:&lt;br /&gt;
|'''6ln_urban_4ln_urban_night'''&lt;br /&gt;
|-&lt;br /&gt;
|urban_6ln_4ln_transition_day&lt;br /&gt;
| is now:&lt;br /&gt;
|'''6ln_urban_4ln_urban_day'''&lt;br /&gt;
|-&lt;br /&gt;
|2ln_3way_rural_res01&lt;br /&gt;
| is now:&lt;br /&gt;
|'''2ln_rural_2ln_res_3way'''&lt;br /&gt;
|-&lt;br /&gt;
|4ln_city_1x1_BL_Trans01C&lt;br /&gt;
| is now:&lt;br /&gt;
|'''4ln_city_4ln_BL_city_ROT_C'''&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Appendix B=&lt;br /&gt;
The following is a partial list of applications used to support the creation of TMT&amp;amp;trade; compatible 3D models and textures.   There are many programs available.  The basic requirements necessary are the ability to create texture-mapped 3D geometry and the meta-data files containing simulator data.  These files may be examined in the ProjectData\Tiles folders installed with the TMT&amp;amp;trade;.&lt;br /&gt;
&lt;br /&gt;
A.	Graphics Programs&lt;br /&gt;
•	Adobe Photoshop&amp;amp;trade; or CreativeSuite&amp;amp;trade;&lt;br /&gt;
•	GIMP&amp;amp;trade;&lt;br /&gt;
•	Painter&amp;amp;trade;&lt;br /&gt;
•	Any other raster editing graphics application&lt;br /&gt;
&lt;br /&gt;
B.	3D Programs&lt;br /&gt;
•	Presagis&amp;amp;trade; Creator&lt;br /&gt;
•	Autodesk Maya&amp;amp;trade;&lt;br /&gt;
•	Autodesk 3D Studio&amp;amp;trade;&lt;br /&gt;
•	Google Sketchup&amp;amp;trade;&lt;br /&gt;
•	Any other 3D application capable of applying and saving textured 3D models&lt;br /&gt;
C.	Conversion Programs&lt;br /&gt;
•	Deep Exploration&amp;amp;trade;&lt;br /&gt;
•	Okino PolyTrans&amp;amp;trade;&lt;br /&gt;
•	Export from 3D Program&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''  Currently in order to use your models within the TMT&amp;amp;trade; to produce terrain databases, it will be necessary to utilize some form of conversion software to convert from the application native or export format into OpenFlight&amp;amp;trade;.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=3985</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=3985"/>
				<updated>2023-11-20T22:25:47Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* miniSim Data Dictionary add verbage to use SCNVIF sections for custom added cells*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
== miniSim Data Dictionary ==&lt;br /&gt;
The data dictionary is a compilation of the simulator data that is stored and available within the DAQ file after each drive. &lt;br /&gt;
&lt;br /&gt;
[[:File:Cells_miniSim_20231120.pdf]]&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
miniSim users may extend the data dictionary by adding custom cells to the collect and schedule files:&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSimCollect.general.txt&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSim.cec&lt;br /&gt;
&lt;br /&gt;
Typically new cells should be added into one of the SCNVIF sections.  Use the same SCNVIF section for both files:&lt;br /&gt;
&lt;br /&gt;
*cell 1 SCNVIF&lt;br /&gt;
*cell 7 SCNVIF&lt;br /&gt;
*cell 8 SCNVIF&lt;br /&gt;
*cell 9 SCNVIF&lt;br /&gt;
&lt;br /&gt;
== miniSim Documentation ==&lt;br /&gt;
All miniSim simulators ship with a documentation folder located on the desktop.  You can find miniSim and additional documentation within this folder.&lt;br /&gt;
&lt;br /&gt;
== miniSim Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Desktop and Viewport Settings ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detailed information about the PC display layout and the miniSim viewport and channel configuration settings is available here:&lt;br /&gt;
&lt;br /&gt;
[[:File:miniSim-Desktop_and_Viewport-Settings-v3_113022.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: My miniSim displays have changed.  What happened, and how can I fix it? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows has shown a tendency to re-enumerate the displays from time to time.  The result is that the miniSim display layout/configuration becomes incorrect.&lt;br /&gt;
&lt;br /&gt;
The relationship between the display layout and the viewport display settings in the miniSim Channel Configuration File (.ccf) no longer match.&lt;br /&gt;
&lt;br /&gt;
To correct, check the following in this order:&lt;br /&gt;
#	Displays are arranged from left to right: Matrox/Mosaic, Instrument Panel, Operator.(use mouse or arrow keys)&lt;br /&gt;
#	The Matrox/Mosaic display must be designated as the ‘main’ or ‘primary’ in Windows. The task bar may move to this display when this is set, so drag the task bar and icons to the operator display&lt;br /&gt;
#	Do not use the Matrox PowerDesk program to adjust the default locations for pop-up and application windows. This will cause many, many problems.&lt;br /&gt;
#	The top edges of the display icons are aligned (use mouse or arrow keys)&lt;br /&gt;
#	Reboot to make sure the configuration is stable. &lt;br /&gt;
#	Check video and USB connections. If they are loose, it may cause windows to re number the displays, which can make things move around unpredictably.&lt;br /&gt;
#	Open the correct Channel Configuration File (.ccf) in the \bin.x64 directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' there are several .ccf files in every system, and the ‘correct’ one is defined by the system settings in the ‘go.cmd’ file used to start miniSim.&lt;br /&gt;
&lt;br /&gt;
See next section. The third number in the Channel header(s) should be equal to the number of the main display as reported by Windows in ‘Display Settings’ minus 1. Only 0, 1, 2 are generally valid for standard miniSim configurations (2 Channel, 3 displays).&lt;br /&gt;
&lt;br /&gt;
:Channel 0 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 1.000000 1.000000&lt;br /&gt;
:6&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:Channel 1 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:1.000000 0.000000 2.000000 1.000000&lt;br /&gt;
:0 IP&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the right Channel Configuration File for my miniSim? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. to determine the correct ccf file, examine the command file that launches miniSim.&lt;br /&gt;
&lt;br /&gt;
The minisim is launched by running the correct go.cmd file in the '''NadsMiniSim_x.x.x\bin.x64''' folder.&lt;br /&gt;
&lt;br /&gt;
Typically, there have been shortcuts created on the miniSim desktop that are used to run the appropriate ‘go’ scripts.  There are often several go-scripts, this is usually to provide a way to launch the miniSim with or without various options (Video Capture, Advanced Automation, etc).&lt;br /&gt;
&lt;br /&gt;
If you right-click on the shortcut icon and choose ‘edit’ you can edit the go.cmd script.  A typical one looks like this:&lt;br /&gt;
&lt;br /&gt;
:set MININADSCOMMMODE=PSEXEC&lt;br /&gt;
:set DYNA=car&lt;br /&gt;
:set NUMCHN='''2'''&lt;br /&gt;
:set INSTRUMENTS='''on'''&lt;br /&gt;
:set FORMAT='''wide'''&lt;br /&gt;
:set INSETVIEW=off&lt;br /&gt;
:set SIDEMIRRORS='''on'''&lt;br /&gt;
:set MININADSDAQ='''on'''&lt;br /&gt;
&lt;br /&gt;
Based on these settings, the miniSim will read the following channel configuration file (.ccf) and use its contents for setting up the rendering channels and viewports.  In this case, the miniSim will open this file:&lt;br /&gt;
'''\bin.x64\mininads_2ch.wide.sidemirrors.inst.ccf'''&lt;br /&gt;
&lt;br /&gt;
This is the correct file to edit for this configuration. Remember to exit miniSim before making edits to the .ccf file.&lt;br /&gt;
'''If you make a change and see no effect, you may be editing the wrong file!'''&lt;br /&gt;
&lt;br /&gt;
When the miniSim runs, it copies the .ccf file that pertains to the options selected in the go.cmd, and copies it to '''mininads_1ch.ccf''', which is the one that is loaded when miniSim is launched.&lt;br /&gt;
&lt;br /&gt;
This means that the '''mininads_1ch.ccf''' has the same ‘Last Modified Date’ as the file you want to edit.&lt;br /&gt;
&lt;br /&gt;
If you list the contents of the \bin.X64 folder by date, you will see something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h03_56.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In this case, you will see that the '''mininads_2ch.wide.sidemirrors.inst.ccf''' is the file you want to edit, as it has the same last modified date as '''mininads_1ch.ccf'''.&lt;br /&gt;
&lt;br /&gt;
For a desktop layout like this from Windows in ‘Display Settings’&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h05_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This is a '''Two-Channel''' system, meaning that the front three displays on the Matrox/Mosaic are Channel 0, and the Instrument Panel display is Channel 1.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: Where do I find data relating to the brake pedal force/position? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: The data you are seeking is represented by the '''CFS_Brake_Pedal_Force''' variable, which can be viewed either with ISAT or with Matlab during data reduction. The value ranges from 0 lbs. to 180 lbs., where 0 indicates no force (no pedal travel) and 180 indicates 180 pounds of force (full pedal travel).&lt;br /&gt;
&lt;br /&gt;
If you see a variable named '''CFS_Brake_Pedal_Position''' you may ignore this as it is not currently being used.   &lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I adjust the brake pedal response? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Information to adjust the brake pedal response is detailed in this document: [[:File:Adjust_Brake_Response_11302022.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: The tactile transducer, mounted under the cab, suddenly does not respond when the miniSim is running. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the following:&lt;br /&gt;
&lt;br /&gt;
1. Verify these connections first:&lt;br /&gt;
: a. The main stereo speakers should be plugged into the green audio port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: b. The Dayton D-30 amplifier should be plugged into the orange port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: c. The tactile transducer should be connected to the Dayton D-30 amplifier using the included speaker wire.&lt;br /&gt;
&lt;br /&gt;
2. Note that the amplifier controls the volume of the tactile transducer and therefore must be plugged into a power source. If the amplifier is not plugged into power, this could be the reason the tactile transducer is not working.&lt;br /&gt;
&lt;br /&gt;
3. Check the volume level of the amplifier. If it is set too low, the tactile transducer may '''appear''' to not be working. We suggest a minimum amplifier volume setting of 25% of full volume. A volume setting which is too high will be experienced as an unpleasant vibration and low-end rumble that does not resemble a real car. &lt;br /&gt;
&lt;br /&gt;
4. Launch the Realtek audio manager from the Task Bar and select 5.1 audio. Then, disable the center and rear channels, leaving the front left and right speakers, and the subwoofer enabled.&lt;br /&gt;
&lt;br /&gt;
5. Use the Realtek audio manager to test each of the speakers individually by clicking on each speaker icon. As you select a speaker, the speaker will sound.  &lt;br /&gt;
&lt;br /&gt;
Some motherboards have the sub/center channels switched. In this case, a ⅛&amp;quot; mini-jack to stereo RCA cable can be used.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== miniSim Operation ==&lt;br /&gt;
=== Q: Auto-start miniSim drive===&lt;br /&gt;
The miniSim simulator can be configured to start a drive automatically or not, depending on your project requirements.  &lt;br /&gt;
&lt;br /&gt;
This involves a '''''system level configuration change'''''.  To run two projects simultaneously you will need to create a unique startup sequence for each project in order to use the correct configuration file.&lt;br /&gt;
&lt;br /&gt;
Setting auto-start involves a setting in the hardware.xml file in use; note there are different configuration files present on all miniSim simulators within this folder:&lt;br /&gt;
&lt;br /&gt;
miniSim_x.x\bin.x64\config&lt;br /&gt;
&lt;br /&gt;
Please exit miniSim before editing any .xml file.  You may want to backup these files prior to editing.&lt;br /&gt;
&lt;br /&gt;
'''Enable auto-start'''&lt;br /&gt;
&lt;br /&gt;
Change the string&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable auto-start, set the value to 0.&lt;br /&gt;
&lt;br /&gt;
=== Q: miniSim is not responding. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;A: At times you may find that your miniSim PC or miniSim software has become unresponsive. We define appropriate steps for correcting unresponsive behavior on a miniSim PC under the following conditions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''miniSim Software is Running but Will Not Load a Drive Scenario:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.  &lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart the miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# This step will fix this unresponsive behavior most of the time. &lt;br /&gt;
* '''A miniSim Drive Has Been Selected but Will Not Start:'''&lt;br /&gt;
: Assuming the mouse is functioning, click on the Settings tab and verify all lines are green (ready mode). If one or more lines are red, simply wait for all to become green. If still not green after about 90 seconds, close and restart the miniSim software normally. This step will fix this unresponsive behavior most of the time.&lt;br /&gt;
* '''miniSim Software Stops Running:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.&lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# If the miniSim software will not close, press Ctrl+Alt+Delete and open Task Manager. Within Task Manager, select the SimopServer program and close it. Restart miniSim.&lt;br /&gt;
# This process generally will recover miniSim from nearly any unresponsive state.&lt;br /&gt;
* '''miniSim PC Shuts Down Unexpectedly:'''&lt;br /&gt;
# Check for severe storms and possible power outages in your neighborhood.&lt;br /&gt;
# If you see smoke or smell something burning near the miniSim PC, carefully unplug the PC from the electrical outlet and fetch your fire extinguisher just in case. When immediate danger passes, consult a local hardware expert to examine your PC for possible electrical shorts, overheating or failure of critical systems such as motherboard, hard drive and etc. Contact NADS miniSim in the event hardware components need to be replaced. See contact information below.&lt;br /&gt;
* '''The miniSim PC Will Not Boot:'''&lt;br /&gt;
# On rare occasions your miniSim PC may not boot to Windows. It may halt the boot process just prior to launching Windows. If your miniSim PC has stopped the boot process before a Windows launch, it is okay to touch the reset button on the PC (the small button next to the power button). If your miniSim PC does not have a reset button, touch the power button lightly one time. There may be a slight delay but then your miniSim PC will restart the boot process.  This is the safest way to handle an uncompleted boot sequence.&lt;br /&gt;
# In most cases if the system stops prematurely during the boot process, for example, while displaying the motherboard splash screen (typically AMI) or the blinking cursor just prior to the Windows logo, the PC is having trouble enumerating USB devices before loading windows.  &lt;br /&gt;
# If the system hangs up during the second boot attempt, please check the USB connections. In particular, be sure the mouse and keyboard (typically connected through a USB hub) are in their designated USB ports i.e. nearest to the round PS2 style port (top for tower systems or far left for rackmount systems). These are typically USB 2.0 ports and are checked first during the USB enumeration process at boot. It is critical that the mouse/keyboard connections are made in this way.&lt;br /&gt;
# If the mouse/keyboard are connected to the correct USB ports, and your miniSim PC still does not boot, disconnect all USB devices (except mouse and keyboard) and systematically reconnect them one at a time in between reboots. This process will eventually and effectively isolate which USB device may be causing the boot problem. To resolve this conflict, simply plug the suspected USB device into a different USB port. Moving these devices to a different port typically resolves this problem permanently. It often (unfortunately) requires some experimentation (read trial and error) but once you find the right combination of USB devices and ports, this problem goes away.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, there are certain steps you should not take to try and resolve an unresponsive miniSim PC condition. Some tactics could actually make the problem worse e.g. damage hard drives, corrupt the operating system, scramble your data. Here are some activities you should not engage in to try and resolve a hanging miniSim PC:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Troubleshooting steps you should NOT try:'''&lt;br /&gt;
* Do not press and hold the power button on the PC while miniSim is running.&lt;br /&gt;
* Do not unplug the PC from electrical outlet while miniSim is running.&lt;br /&gt;
* Do not unplug mouse, monitors or keyboard while miniSim is running.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Acceptable methods for shutting down an unresponsive PC:'''&lt;br /&gt;
* Close all running programs, press the Windows key and select Shut Down.&lt;br /&gt;
* Or, press Ctrl+Alt+Delete and select Shut Down.&lt;br /&gt;
* Or, touch the reset button or lightly touch the power button one time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Making Changes to the BIOS====&lt;br /&gt;
&lt;br /&gt;
If your miniSim PC is unresponsive in ways that are not covered above, you may need to make certain changes to the BIOS of your miniSim PC. Altering BIOS settings on a PC is delicate work and requires more than a passing knowledge of computers.  Instructions for modifying the BIOS follows but if you would like the assistance of a NADS professional, don’t hesitate to ask. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The BIOS change involves enabling Fast Boot. Fast Boot will disable your USB devices at boot-up thus preventing USB port conflicts and effectively preventing endless USB enumeration and rebooting.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enter BIOS setup, repeatedly press the Delete key while the computer is powering up.  Ultimately you will see a screen that looks like the screen shot below. (This assumes your miniSim PC was built in 2015 or later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Initial BIOS Screen.jpg|400px|thumb|center|Initial BIOS Screen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Navigate to the '''Advanced tab''' using the arrow keys on your keyboard and select it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.jpg|400px|thumb|center|Advanced Tab Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scroll down and select '''USB Configuration.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:USB Configuration.jpg|400px|thumb|center|USB Configuration Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make sure your BIOS settings match the settings on the right half of the screen as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:BIOS Settings.jpg|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set '''Fast Boot''' to '''Fast.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Fast Boot Selected.jpg|400px|thumb|center|Fast Boot set to Fast]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select '''Save Changes and Exit'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Save Changes and Exit.jpg|400px|thumb|center|Save Changes and Exit selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: these settings will disable your USB devices during boot. This will eliminate the USB enumeration problem but will also prevent you from accessing BIOS settings again without a PS2 style keyboard. Feel free to contact NADS for additional information on this condition.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bear in mind your BIOS screens may look different than the screenshots above but your objective remains the same, enable Fast Boot.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please don’t hesitate to contact us if you wish help with these settings. '''Word of Caution:''' make these changes during normal business hours. If you get stuck in BIOS settings on a weekend or middle of the night, we may not be available to help you.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= miniSim Software =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation data ===&lt;br /&gt;
Your data is the primary reason for simulation and is available from the miniSim in two ways:&lt;br /&gt;
&lt;br /&gt;
# Default measures - these are pre-defined measures available for up to 20 events.&lt;br /&gt;
# Logstreams - the entire range of variables is available for as many events as required.&lt;br /&gt;
&lt;br /&gt;
These two methods require setting up a scenario to create [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#What_is_a_Scenario_Event.3F '''events'''] that happen during simulation and are defined in a way to allow extracting them from the drive.&lt;br /&gt;
&lt;br /&gt;
Default measures are available immediately after the drive in the form of a text document, located in the DAQ folder on miniSim.&lt;br /&gt;
&lt;br /&gt;
Logstreams are flags embedded in the drive data and requires data reduction to make the information available after the drive.&lt;br /&gt;
&lt;br /&gt;
More information on these methods is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Data_Output_Methods here:]&lt;br /&gt;
&lt;br /&gt;
= ISAT/Scenario =&lt;br /&gt;
&lt;br /&gt;
=== New to ISAT? ===&lt;br /&gt;
A quick start overview is available [https://www.nads-sc.uiowa.edu/minisim/wiki/images/6/68/ISAT_Quick_Start.pdf '''here.'''] &lt;br /&gt;
&lt;br /&gt;
The ISAT User Guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents '''here.''']&lt;br /&gt;
&lt;br /&gt;
A scenario/ISAT troubleshooting guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Troubleshooting_Guide '''here.''']&lt;br /&gt;
&lt;br /&gt;
=== Data Logging: miniSim Default Measures ===&lt;br /&gt;
There are a fixed number of measures available and a limit of 20 events.&lt;br /&gt;
&lt;br /&gt;
More information including which measures are available and how to structure your scenario to support default measures is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Default_miniSim_Scenario_Measures here.]&lt;br /&gt;
&lt;br /&gt;
=== Q: How do we make an ADO or DDO go backward? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: Only DDOs can back up. To accomplish this, start by placing a DDO where desired.&lt;br /&gt;
&lt;br /&gt;
Next, create a path for the DDO; right-click on it and select Extend Path from the pop-up menu.&lt;br /&gt;
&lt;br /&gt;
Then, lay out a path (path nodes are a sequence of yellow dots) to indicate the desired route of travel.&lt;br /&gt;
&lt;br /&gt;
Finally, right-click on each node and select Rotate to set the direction that you wish the DDO to face. The direction at each node can be set independently.&lt;br /&gt;
&lt;br /&gt;
In order to make it appear as though the car is moving backwards, the arrows should point against the direction of travel. To avoid erratic movement, you should add sufficient nodes to create a smooth path. This will result in smoother and more realistic movement of the DDO, especially if you are changing direction rapidly.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I play a sound in my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario Using Audio in a Scenario]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I add a trigger to my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggers can be added to a scenario in ISAT through the menu '''Insert &amp;gt;&amp;gt; Coordinators'''&lt;br /&gt;
or, if the ISAT Elements panel is open, by left-click-drag any trigger off the panel and then releasing the left button where you want to place the trigger.&lt;br /&gt;
&lt;br /&gt;
After a trigger has been placed in your scenario you can reposition it by clicking and dragging it to a new location.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Trigger consist of multiple elements.  To reposition a trigger you will have to click-drag the trigger handle, which is a small red dot.  Clicking the larger trigger pane will move the pane, not the handle.  Moving the handle will move the trigger.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h07_26.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Some triggers also require a roadpad (roadpad, follow, Time To Arrival triggers).&lt;br /&gt;
Right-click on the trigger and choose '''Place Road Pad.'''&lt;br /&gt;
&lt;br /&gt;
'''Note: All triggers with road pads require a [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Triggers '''predicate'''] to activate the trigger.'''&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is a “Write to Cell” action? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cells are reserved data containers that define various attributes and operating characteristics of the miniSim and are stored after each drive in a unique drive DAQ file.&lt;br /&gt;
&lt;br /&gt;
A '''write to cell''' action allows you to send data to miniSim and simultaneously store this data in the DAQ file during simulation.  &lt;br /&gt;
&lt;br /&gt;
Most cells are managed by a subsystem (behaviors, dynamics, scenario control).  For these cells, writing to a cell is possible but not practical because the managing subsystem will overwrite that cell within the next frame.&lt;br /&gt;
&lt;br /&gt;
'''Examples''' (not a complete list!):&lt;br /&gt;
# Play a sound/audio file: Write to Cell SCC_Audio_Trigger&lt;br /&gt;
# Set event status or an event number for default miniSim data measures: Write to Cell SCC_Event_Status, SCC_Event_Number&lt;br /&gt;
# Saving data during a drive to the DAQ so it is available for analysis; i.e., timing of things, storing scenario variable data (variables are not persistent unless saved to a file or written to the DAQ): Write to Cell SCC_Custom1, or user defined&lt;br /&gt;
# Changing a simulator setting (Adaptive Cruise Control on/off, Automatic Lane Following): Write to Cell SCC_ALF_On, SCC_ACC_On&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Write to cell actions are expensive operations and there is currently a limit of 7 per frame.  '''Exceeding this number will likely result in the excess cells not being written'''. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some cells are managed by the Cab Information/Hardware subsystem (CIS).  Configuring miniSim to support operation by both scenario and CIS may require consulting with NADS to ensure correct operation.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell if the driver has left the road? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
One way to check if the driver has left the roadway is to use a lane deviation calculation: if the lane deviation is greater than &amp;lt;measured_total_lane_width&amp;gt; or less than -&amp;lt;measured_total_lane_width&amp;gt;, the driver is likely out of the lane.&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell what surface the driver is driving over?  ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Use the cell '''TPR_Surface_Type_Ind to detect the surface material code (SMC) under the driver. &lt;br /&gt;
&lt;br /&gt;
The first four elements of the TPR_Surface_Type_Ind correspond to 4 wheels of the ownship/external driver vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_16.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_27.png|400px]]&lt;br /&gt;
&lt;br /&gt;
MiniSim does not report surface material codes within intersections that do not have an elevation map associated with them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h22_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can find a complete list of available surface material codes (SMC) - (not all of these are used in the tile library, but this is the current version for SMC codes) under the TMT\ProjectData\Tiles\CommonLRIData\SurfaceMaterialSpecifications.xlsx.  &lt;br /&gt;
 &lt;br /&gt;
'''Note:''' Intersection elevation maps were introduced in TMT '''1.8.5'''.&lt;br /&gt;
 &lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the difference between SCC_Lane_Deviation and SCC_Lane_Spline_Deviation?  ===&lt;br /&gt;
&lt;br /&gt;
SCC_Lane_Spline_Deviation is computed from centerline data as a continuous spline and is recommended over SCC_Lane_Deviation.&lt;br /&gt;
&lt;br /&gt;
[[File:scc_lane_spline_deviation_20230918.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=3984</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=3984"/>
				<updated>2023-11-20T15:48:46Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* miniSim Documentation add data dictionary document*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
== miniSim Data Dictionary ==&lt;br /&gt;
The data dictionary is a compilation of the simulator data that is stored and available within the DAQ file after each drive. &lt;br /&gt;
&lt;br /&gt;
[[:File:Cells_miniSim_20231120.pdf]]&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
miniSim users may extend the data dictionary by adding custom cells to the collect and schedule files:&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSimCollect.general.txt&lt;br /&gt;
* NadsMiniSim_x.x\data\NadsMiniSim.cec&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== miniSim Documentation ==&lt;br /&gt;
All miniSim simulators ship with a documentation folder located on the desktop.  You can find miniSim and additional documentation within this folder.&lt;br /&gt;
&lt;br /&gt;
== miniSim Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Desktop and Viewport Settings ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detailed information about the PC display layout and the miniSim viewport and channel configuration settings is available here:&lt;br /&gt;
&lt;br /&gt;
[[:File:miniSim-Desktop_and_Viewport-Settings-v3_113022.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: My miniSim displays have changed.  What happened, and how can I fix it? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows has shown a tendency to re-enumerate the displays from time to time.  The result is that the miniSim display layout/configuration becomes incorrect.&lt;br /&gt;
&lt;br /&gt;
The relationship between the display layout and the viewport display settings in the miniSim Channel Configuration File (.ccf) no longer match.&lt;br /&gt;
&lt;br /&gt;
To correct, check the following in this order:&lt;br /&gt;
#	Displays are arranged from left to right: Matrox/Mosaic, Instrument Panel, Operator.(use mouse or arrow keys)&lt;br /&gt;
#	The Matrox/Mosaic display must be designated as the ‘main’ or ‘primary’ in Windows. The task bar may move to this display when this is set, so drag the task bar and icons to the operator display&lt;br /&gt;
#	Do not use the Matrox PowerDesk program to adjust the default locations for pop-up and application windows. This will cause many, many problems.&lt;br /&gt;
#	The top edges of the display icons are aligned (use mouse or arrow keys)&lt;br /&gt;
#	Reboot to make sure the configuration is stable. &lt;br /&gt;
#	Check video and USB connections. If they are loose, it may cause windows to re number the displays, which can make things move around unpredictably.&lt;br /&gt;
#	Open the correct Channel Configuration File (.ccf) in the \bin.x64 directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' there are several .ccf files in every system, and the ‘correct’ one is defined by the system settings in the ‘go.cmd’ file used to start miniSim.&lt;br /&gt;
&lt;br /&gt;
See next section. The third number in the Channel header(s) should be equal to the number of the main display as reported by Windows in ‘Display Settings’ minus 1. Only 0, 1, 2 are generally valid for standard miniSim configurations (2 Channel, 3 displays).&lt;br /&gt;
&lt;br /&gt;
:Channel 0 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 1.000000 1.000000&lt;br /&gt;
:6&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:Channel 1 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:1.000000 0.000000 2.000000 1.000000&lt;br /&gt;
:0 IP&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the right Channel Configuration File for my miniSim? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. to determine the correct ccf file, examine the command file that launches miniSim.&lt;br /&gt;
&lt;br /&gt;
The minisim is launched by running the correct go.cmd file in the '''NadsMiniSim_x.x.x\bin.x64''' folder.&lt;br /&gt;
&lt;br /&gt;
Typically, there have been shortcuts created on the miniSim desktop that are used to run the appropriate ‘go’ scripts.  There are often several go-scripts, this is usually to provide a way to launch the miniSim with or without various options (Video Capture, Advanced Automation, etc).&lt;br /&gt;
&lt;br /&gt;
If you right-click on the shortcut icon and choose ‘edit’ you can edit the go.cmd script.  A typical one looks like this:&lt;br /&gt;
&lt;br /&gt;
:set MININADSCOMMMODE=PSEXEC&lt;br /&gt;
:set DYNA=car&lt;br /&gt;
:set NUMCHN='''2'''&lt;br /&gt;
:set INSTRUMENTS='''on'''&lt;br /&gt;
:set FORMAT='''wide'''&lt;br /&gt;
:set INSETVIEW=off&lt;br /&gt;
:set SIDEMIRRORS='''on'''&lt;br /&gt;
:set MININADSDAQ='''on'''&lt;br /&gt;
&lt;br /&gt;
Based on these settings, the miniSim will read the following channel configuration file (.ccf) and use its contents for setting up the rendering channels and viewports.  In this case, the miniSim will open this file:&lt;br /&gt;
'''\bin.x64\mininads_2ch.wide.sidemirrors.inst.ccf'''&lt;br /&gt;
&lt;br /&gt;
This is the correct file to edit for this configuration. Remember to exit miniSim before making edits to the .ccf file.&lt;br /&gt;
'''If you make a change and see no effect, you may be editing the wrong file!'''&lt;br /&gt;
&lt;br /&gt;
When the miniSim runs, it copies the .ccf file that pertains to the options selected in the go.cmd, and copies it to '''mininads_1ch.ccf''', which is the one that is loaded when miniSim is launched.&lt;br /&gt;
&lt;br /&gt;
This means that the '''mininads_1ch.ccf''' has the same ‘Last Modified Date’ as the file you want to edit.&lt;br /&gt;
&lt;br /&gt;
If you list the contents of the \bin.X64 folder by date, you will see something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h03_56.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In this case, you will see that the '''mininads_2ch.wide.sidemirrors.inst.ccf''' is the file you want to edit, as it has the same last modified date as '''mininads_1ch.ccf'''.&lt;br /&gt;
&lt;br /&gt;
For a desktop layout like this from Windows in ‘Display Settings’&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h05_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This is a '''Two-Channel''' system, meaning that the front three displays on the Matrox/Mosaic are Channel 0, and the Instrument Panel display is Channel 1.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: Where do I find data relating to the brake pedal force/position? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: The data you are seeking is represented by the '''CFS_Brake_Pedal_Force''' variable, which can be viewed either with ISAT or with Matlab during data reduction. The value ranges from 0 lbs. to 180 lbs., where 0 indicates no force (no pedal travel) and 180 indicates 180 pounds of force (full pedal travel).&lt;br /&gt;
&lt;br /&gt;
If you see a variable named '''CFS_Brake_Pedal_Position''' you may ignore this as it is not currently being used.   &lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I adjust the brake pedal response? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Information to adjust the brake pedal response is detailed in this document: [[:File:Adjust_Brake_Response_11302022.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: The tactile transducer, mounted under the cab, suddenly does not respond when the miniSim is running. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the following:&lt;br /&gt;
&lt;br /&gt;
1. Verify these connections first:&lt;br /&gt;
: a. The main stereo speakers should be plugged into the green audio port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: b. The Dayton D-30 amplifier should be plugged into the orange port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: c. The tactile transducer should be connected to the Dayton D-30 amplifier using the included speaker wire.&lt;br /&gt;
&lt;br /&gt;
2. Note that the amplifier controls the volume of the tactile transducer and therefore must be plugged into a power source. If the amplifier is not plugged into power, this could be the reason the tactile transducer is not working.&lt;br /&gt;
&lt;br /&gt;
3. Check the volume level of the amplifier. If it is set too low, the tactile transducer may '''appear''' to not be working. We suggest a minimum amplifier volume setting of 25% of full volume. A volume setting which is too high will be experienced as an unpleasant vibration and low-end rumble that does not resemble a real car. &lt;br /&gt;
&lt;br /&gt;
4. Launch the Realtek audio manager from the Task Bar and select 5.1 audio. Then, disable the center and rear channels, leaving the front left and right speakers, and the subwoofer enabled.&lt;br /&gt;
&lt;br /&gt;
5. Use the Realtek audio manager to test each of the speakers individually by clicking on each speaker icon. As you select a speaker, the speaker will sound.  &lt;br /&gt;
&lt;br /&gt;
Some motherboards have the sub/center channels switched. In this case, a ⅛&amp;quot; mini-jack to stereo RCA cable can be used.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== miniSim Operation ==&lt;br /&gt;
=== Q: Auto-start miniSim drive===&lt;br /&gt;
The miniSim simulator can be configured to start a drive automatically or not, depending on your project requirements.  &lt;br /&gt;
&lt;br /&gt;
This involves a '''''system level configuration change'''''.  To run two projects simultaneously you will need to create a unique startup sequence for each project in order to use the correct configuration file.&lt;br /&gt;
&lt;br /&gt;
Setting auto-start involves a setting in the hardware.xml file in use; note there are different configuration files present on all miniSim simulators within this folder:&lt;br /&gt;
&lt;br /&gt;
miniSim_x.x\bin.x64\config&lt;br /&gt;
&lt;br /&gt;
Please exit miniSim before editing any .xml file.  You may want to backup these files prior to editing.&lt;br /&gt;
&lt;br /&gt;
'''Enable auto-start'''&lt;br /&gt;
&lt;br /&gt;
Change the string&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable auto-start, set the value to 0.&lt;br /&gt;
&lt;br /&gt;
=== Q: miniSim is not responding. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;A: At times you may find that your miniSim PC or miniSim software has become unresponsive. We define appropriate steps for correcting unresponsive behavior on a miniSim PC under the following conditions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''miniSim Software is Running but Will Not Load a Drive Scenario:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.  &lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart the miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# This step will fix this unresponsive behavior most of the time. &lt;br /&gt;
* '''A miniSim Drive Has Been Selected but Will Not Start:'''&lt;br /&gt;
: Assuming the mouse is functioning, click on the Settings tab and verify all lines are green (ready mode). If one or more lines are red, simply wait for all to become green. If still not green after about 90 seconds, close and restart the miniSim software normally. This step will fix this unresponsive behavior most of the time.&lt;br /&gt;
* '''miniSim Software Stops Running:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.&lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# If the miniSim software will not close, press Ctrl+Alt+Delete and open Task Manager. Within Task Manager, select the SimopServer program and close it. Restart miniSim.&lt;br /&gt;
# This process generally will recover miniSim from nearly any unresponsive state.&lt;br /&gt;
* '''miniSim PC Shuts Down Unexpectedly:'''&lt;br /&gt;
# Check for severe storms and possible power outages in your neighborhood.&lt;br /&gt;
# If you see smoke or smell something burning near the miniSim PC, carefully unplug the PC from the electrical outlet and fetch your fire extinguisher just in case. When immediate danger passes, consult a local hardware expert to examine your PC for possible electrical shorts, overheating or failure of critical systems such as motherboard, hard drive and etc. Contact NADS miniSim in the event hardware components need to be replaced. See contact information below.&lt;br /&gt;
* '''The miniSim PC Will Not Boot:'''&lt;br /&gt;
# On rare occasions your miniSim PC may not boot to Windows. It may halt the boot process just prior to launching Windows. If your miniSim PC has stopped the boot process before a Windows launch, it is okay to touch the reset button on the PC (the small button next to the power button). If your miniSim PC does not have a reset button, touch the power button lightly one time. There may be a slight delay but then your miniSim PC will restart the boot process.  This is the safest way to handle an uncompleted boot sequence.&lt;br /&gt;
# In most cases if the system stops prematurely during the boot process, for example, while displaying the motherboard splash screen (typically AMI) or the blinking cursor just prior to the Windows logo, the PC is having trouble enumerating USB devices before loading windows.  &lt;br /&gt;
# If the system hangs up during the second boot attempt, please check the USB connections. In particular, be sure the mouse and keyboard (typically connected through a USB hub) are in their designated USB ports i.e. nearest to the round PS2 style port (top for tower systems or far left for rackmount systems). These are typically USB 2.0 ports and are checked first during the USB enumeration process at boot. It is critical that the mouse/keyboard connections are made in this way.&lt;br /&gt;
# If the mouse/keyboard are connected to the correct USB ports, and your miniSim PC still does not boot, disconnect all USB devices (except mouse and keyboard) and systematically reconnect them one at a time in between reboots. This process will eventually and effectively isolate which USB device may be causing the boot problem. To resolve this conflict, simply plug the suspected USB device into a different USB port. Moving these devices to a different port typically resolves this problem permanently. It often (unfortunately) requires some experimentation (read trial and error) but once you find the right combination of USB devices and ports, this problem goes away.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, there are certain steps you should not take to try and resolve an unresponsive miniSim PC condition. Some tactics could actually make the problem worse e.g. damage hard drives, corrupt the operating system, scramble your data. Here are some activities you should not engage in to try and resolve a hanging miniSim PC:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Troubleshooting steps you should NOT try:'''&lt;br /&gt;
* Do not press and hold the power button on the PC while miniSim is running.&lt;br /&gt;
* Do not unplug the PC from electrical outlet while miniSim is running.&lt;br /&gt;
* Do not unplug mouse, monitors or keyboard while miniSim is running.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Acceptable methods for shutting down an unresponsive PC:'''&lt;br /&gt;
* Close all running programs, press the Windows key and select Shut Down.&lt;br /&gt;
* Or, press Ctrl+Alt+Delete and select Shut Down.&lt;br /&gt;
* Or, touch the reset button or lightly touch the power button one time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Making Changes to the BIOS====&lt;br /&gt;
&lt;br /&gt;
If your miniSim PC is unresponsive in ways that are not covered above, you may need to make certain changes to the BIOS of your miniSim PC. Altering BIOS settings on a PC is delicate work and requires more than a passing knowledge of computers.  Instructions for modifying the BIOS follows but if you would like the assistance of a NADS professional, don’t hesitate to ask. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The BIOS change involves enabling Fast Boot. Fast Boot will disable your USB devices at boot-up thus preventing USB port conflicts and effectively preventing endless USB enumeration and rebooting.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enter BIOS setup, repeatedly press the Delete key while the computer is powering up.  Ultimately you will see a screen that looks like the screen shot below. (This assumes your miniSim PC was built in 2015 or later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Initial BIOS Screen.jpg|400px|thumb|center|Initial BIOS Screen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Navigate to the '''Advanced tab''' using the arrow keys on your keyboard and select it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.jpg|400px|thumb|center|Advanced Tab Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scroll down and select '''USB Configuration.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:USB Configuration.jpg|400px|thumb|center|USB Configuration Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make sure your BIOS settings match the settings on the right half of the screen as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:BIOS Settings.jpg|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set '''Fast Boot''' to '''Fast.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Fast Boot Selected.jpg|400px|thumb|center|Fast Boot set to Fast]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select '''Save Changes and Exit'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Save Changes and Exit.jpg|400px|thumb|center|Save Changes and Exit selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: these settings will disable your USB devices during boot. This will eliminate the USB enumeration problem but will also prevent you from accessing BIOS settings again without a PS2 style keyboard. Feel free to contact NADS for additional information on this condition.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bear in mind your BIOS screens may look different than the screenshots above but your objective remains the same, enable Fast Boot.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please don’t hesitate to contact us if you wish help with these settings. '''Word of Caution:''' make these changes during normal business hours. If you get stuck in BIOS settings on a weekend or middle of the night, we may not be available to help you.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= miniSim Software =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation data ===&lt;br /&gt;
Your data is the primary reason for simulation and is available from the miniSim in two ways:&lt;br /&gt;
&lt;br /&gt;
# Default measures - these are pre-defined measures available for up to 20 events.&lt;br /&gt;
# Logstreams - the entire range of variables is available for as many events as required.&lt;br /&gt;
&lt;br /&gt;
These two methods require setting up a scenario to create [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#What_is_a_Scenario_Event.3F '''events'''] that happen during simulation and are defined in a way to allow extracting them from the drive.&lt;br /&gt;
&lt;br /&gt;
Default measures are available immediately after the drive in the form of a text document, located in the DAQ folder on miniSim.&lt;br /&gt;
&lt;br /&gt;
Logstreams are flags embedded in the drive data and requires data reduction to make the information available after the drive.&lt;br /&gt;
&lt;br /&gt;
More information on these methods is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Data_Output_Methods here:]&lt;br /&gt;
&lt;br /&gt;
= ISAT/Scenario =&lt;br /&gt;
&lt;br /&gt;
=== New to ISAT? ===&lt;br /&gt;
A quick start overview is available [https://www.nads-sc.uiowa.edu/minisim/wiki/images/6/68/ISAT_Quick_Start.pdf '''here.'''] &lt;br /&gt;
&lt;br /&gt;
The ISAT User Guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents '''here.''']&lt;br /&gt;
&lt;br /&gt;
A scenario/ISAT troubleshooting guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Troubleshooting_Guide '''here.''']&lt;br /&gt;
&lt;br /&gt;
=== Data Logging: miniSim Default Measures ===&lt;br /&gt;
There are a fixed number of measures available and a limit of 20 events.&lt;br /&gt;
&lt;br /&gt;
More information including which measures are available and how to structure your scenario to support default measures is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Default_miniSim_Scenario_Measures here.]&lt;br /&gt;
&lt;br /&gt;
=== Q: How do we make an ADO or DDO go backward? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: Only DDOs can back up. To accomplish this, start by placing a DDO where desired.&lt;br /&gt;
&lt;br /&gt;
Next, create a path for the DDO; right-click on it and select Extend Path from the pop-up menu.&lt;br /&gt;
&lt;br /&gt;
Then, lay out a path (path nodes are a sequence of yellow dots) to indicate the desired route of travel.&lt;br /&gt;
&lt;br /&gt;
Finally, right-click on each node and select Rotate to set the direction that you wish the DDO to face. The direction at each node can be set independently.&lt;br /&gt;
&lt;br /&gt;
In order to make it appear as though the car is moving backwards, the arrows should point against the direction of travel. To avoid erratic movement, you should add sufficient nodes to create a smooth path. This will result in smoother and more realistic movement of the DDO, especially if you are changing direction rapidly.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I play a sound in my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario Using Audio in a Scenario]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I add a trigger to my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggers can be added to a scenario in ISAT through the menu '''Insert &amp;gt;&amp;gt; Coordinators'''&lt;br /&gt;
or, if the ISAT Elements panel is open, by left-click-drag any trigger off the panel and then releasing the left button where you want to place the trigger.&lt;br /&gt;
&lt;br /&gt;
After a trigger has been placed in your scenario you can reposition it by clicking and dragging it to a new location.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Trigger consist of multiple elements.  To reposition a trigger you will have to click-drag the trigger handle, which is a small red dot.  Clicking the larger trigger pane will move the pane, not the handle.  Moving the handle will move the trigger.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h07_26.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Some triggers also require a roadpad (roadpad, follow, Time To Arrival triggers).&lt;br /&gt;
Right-click on the trigger and choose '''Place Road Pad.'''&lt;br /&gt;
&lt;br /&gt;
'''Note: All triggers with road pads require a [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Triggers '''predicate'''] to activate the trigger.'''&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is a “Write to Cell” action? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cells are reserved data containers that define various attributes and operating characteristics of the miniSim and are stored after each drive in a unique drive DAQ file.&lt;br /&gt;
&lt;br /&gt;
A '''write to cell''' action allows you to send data to miniSim and simultaneously store this data in the DAQ file during simulation.  &lt;br /&gt;
&lt;br /&gt;
Most cells are managed by a subsystem (behaviors, dynamics, scenario control).  For these cells, writing to a cell is possible but not practical because the managing subsystem will overwrite that cell within the next frame.&lt;br /&gt;
&lt;br /&gt;
'''Examples''' (not a complete list!):&lt;br /&gt;
# Play a sound/audio file: Write to Cell SCC_Audio_Trigger&lt;br /&gt;
# Set event status or an event number for default miniSim data measures: Write to Cell SCC_Event_Status, SCC_Event_Number&lt;br /&gt;
# Saving data during a drive to the DAQ so it is available for analysis; i.e., timing of things, storing scenario variable data (variables are not persistent unless saved to a file or written to the DAQ): Write to Cell SCC_Custom1, or user defined&lt;br /&gt;
# Changing a simulator setting (Adaptive Cruise Control on/off, Automatic Lane Following): Write to Cell SCC_ALF_On, SCC_ACC_On&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Write to cell actions are expensive operations and there is currently a limit of 7 per frame.  '''Exceeding this number will likely result in the excess cells not being written'''. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some cells are managed by the Cab Information/Hardware subsystem (CIS).  Configuring miniSim to support operation by both scenario and CIS may require consulting with NADS to ensure correct operation.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell if the driver has left the road? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
One way to check if the driver has left the roadway is to use a lane deviation calculation: if the lane deviation is greater than &amp;lt;measured_total_lane_width&amp;gt; or less than -&amp;lt;measured_total_lane_width&amp;gt;, the driver is likely out of the lane.&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell what surface the driver is driving over?  ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Use the cell '''TPR_Surface_Type_Ind to detect the surface material code (SMC) under the driver. &lt;br /&gt;
&lt;br /&gt;
The first four elements of the TPR_Surface_Type_Ind correspond to 4 wheels of the ownship/external driver vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_16.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_27.png|400px]]&lt;br /&gt;
&lt;br /&gt;
MiniSim does not report surface material codes within intersections that do not have an elevation map associated with them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h22_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can find a complete list of available surface material codes (SMC) - (not all of these are used in the tile library, but this is the current version for SMC codes) under the TMT\ProjectData\Tiles\CommonLRIData\SurfaceMaterialSpecifications.xlsx.  &lt;br /&gt;
 &lt;br /&gt;
'''Note:''' Intersection elevation maps were introduced in TMT '''1.8.5'''.&lt;br /&gt;
 &lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the difference between SCC_Lane_Deviation and SCC_Lane_Spline_Deviation?  ===&lt;br /&gt;
&lt;br /&gt;
SCC_Lane_Spline_Deviation is computed from centerline data as a continuous spline and is recommended over SCC_Lane_Deviation.&lt;br /&gt;
&lt;br /&gt;
[[File:scc_lane_spline_deviation_20230918.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Cells_miniSim_20231120.pdf&amp;diff=3983</id>
		<title>File:Cells miniSim 20231120.pdf</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Cells_miniSim_20231120.pdf&amp;diff=3983"/>
				<updated>2023-11-20T15:48:02Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3982</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3982"/>
				<updated>2023-10-02T18:38:12Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Cell Operations: Best Practice Add write to a specific cell array element */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the DSRI Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI: roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl: Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt;: Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB: Left mouse button&lt;br /&gt;
*DblClk: Double click LMB&lt;br /&gt;
*MMB: Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB: Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use [[#External_Reference|external reference scenario files]] to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Rehearsal without specifying a start location&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases ISAT will crash if the external driver (XD)/start location has not been specified or is missing due to a sol2 file configuration error.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the DSRI Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
ISAT uses resource files that are based on the model objects found in the miniSim.  They are proxy objects for the real models used during simulation.&lt;br /&gt;
&lt;br /&gt;
ISAT contains a rudimentary scripting language for automating some repetitive tasks.  Scripting is an advanced topic.  Because the scripting language is not well documented, it is recommended to copy existing scripts that perform similar functions and modify them.&lt;br /&gt;
&lt;br /&gt;
Because ISAT scenarios are text, you can make some edits quickly and easily using any text editor.&lt;br /&gt;
&lt;br /&gt;
'''However:&lt;br /&gt;
&lt;br /&gt;
When editing a scenario as text, always work on a backup copy in case something goes wrong in the text editing process that invalidates the scenario file to the point where ISAT cannot read it!&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
===How to write to a specific cell array element?===&lt;br /&gt;
&lt;br /&gt;
To write to a specific cell array element, enclose the array element in square brackets as shown below:&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot 2023-10-02 133413.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Screenshot_2023-10-02_133413.png&amp;diff=3981</id>
		<title>File:Screenshot 2023-10-02 133413.png</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Screenshot_2023-10-02_133413.png&amp;diff=3981"/>
				<updated>2023-10-02T18:37:42Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=3972</id>
		<title>FAQ</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=FAQ&amp;diff=3972"/>
				<updated>2023-09-18T18:06:49Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Q: How can I tell what surface the driver is driving over? add graphic for comparing scc_lane_deviation and scc_lane_spline_deviation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
== miniSim Documentation ==&lt;br /&gt;
All miniSim simulators ship with a documentation folder located on the desktop.  You can find miniSim and additional documentation within this folder.&lt;br /&gt;
&lt;br /&gt;
== miniSim Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Desktop and Viewport Settings ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Detailed information about the PC display layout and the miniSim viewport and channel configuration settings is available here:&lt;br /&gt;
&lt;br /&gt;
[[:File:miniSim-Desktop_and_Viewport-Settings-v3_113022.pdf]]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: My miniSim displays have changed.  What happened, and how can I fix it? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Windows has shown a tendency to re-enumerate the displays from time to time.  The result is that the miniSim display layout/configuration becomes incorrect.&lt;br /&gt;
&lt;br /&gt;
The relationship between the display layout and the viewport display settings in the miniSim Channel Configuration File (.ccf) no longer match.&lt;br /&gt;
&lt;br /&gt;
To correct, check the following in this order:&lt;br /&gt;
#	Displays are arranged from left to right: Matrox/Mosaic, Instrument Panel, Operator.(use mouse or arrow keys)&lt;br /&gt;
#	The Matrox/Mosaic display must be designated as the ‘main’ or ‘primary’ in Windows. The task bar may move to this display when this is set, so drag the task bar and icons to the operator display&lt;br /&gt;
#	Do not use the Matrox PowerDesk program to adjust the default locations for pop-up and application windows. This will cause many, many problems.&lt;br /&gt;
#	The top edges of the display icons are aligned (use mouse or arrow keys)&lt;br /&gt;
#	Reboot to make sure the configuration is stable. &lt;br /&gt;
#	Check video and USB connections. If they are loose, it may cause windows to re number the displays, which can make things move around unpredictably.&lt;br /&gt;
#	Open the correct Channel Configuration File (.ccf) in the \bin.x64 directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' there are several .ccf files in every system, and the ‘correct’ one is defined by the system settings in the ‘go.cmd’ file used to start miniSim.&lt;br /&gt;
&lt;br /&gt;
See next section. The third number in the Channel header(s) should be equal to the number of the main display as reported by Windows in ‘Display Settings’ minus 1. Only 0, 1, 2 are generally valid for standard miniSim configurations (2 Channel, 3 displays).&lt;br /&gt;
&lt;br /&gt;
:Channel 0 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 1.000000 1.000000&lt;br /&gt;
:6&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:.&lt;br /&gt;
:Channel 1 0 2 (Shear x2) (Twist x3) (Extends x4)&lt;br /&gt;
:0.000000 0.000000&lt;br /&gt;
:0.000000 0.000000 0.000000&lt;br /&gt;
:1.000000 0.000000 2.000000 1.000000&lt;br /&gt;
:0 IP&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the right Channel Configuration File for my miniSim? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. to determine the correct ccf file, examine the command file that launches miniSim.&lt;br /&gt;
&lt;br /&gt;
The minisim is launched by running the correct go.cmd file in the '''NadsMiniSim_x.x.x\bin.x64''' folder.&lt;br /&gt;
&lt;br /&gt;
Typically, there have been shortcuts created on the miniSim desktop that are used to run the appropriate ‘go’ scripts.  There are often several go-scripts, this is usually to provide a way to launch the miniSim with or without various options (Video Capture, Advanced Automation, etc).&lt;br /&gt;
&lt;br /&gt;
If you right-click on the shortcut icon and choose ‘edit’ you can edit the go.cmd script.  A typical one looks like this:&lt;br /&gt;
&lt;br /&gt;
:set MININADSCOMMMODE=PSEXEC&lt;br /&gt;
:set DYNA=car&lt;br /&gt;
:set NUMCHN='''2'''&lt;br /&gt;
:set INSTRUMENTS='''on'''&lt;br /&gt;
:set FORMAT='''wide'''&lt;br /&gt;
:set INSETVIEW=off&lt;br /&gt;
:set SIDEMIRRORS='''on'''&lt;br /&gt;
:set MININADSDAQ='''on'''&lt;br /&gt;
&lt;br /&gt;
Based on these settings, the miniSim will read the following channel configuration file (.ccf) and use its contents for setting up the rendering channels and viewports.  In this case, the miniSim will open this file:&lt;br /&gt;
'''\bin.x64\mininads_2ch.wide.sidemirrors.inst.ccf'''&lt;br /&gt;
&lt;br /&gt;
This is the correct file to edit for this configuration. Remember to exit miniSim before making edits to the .ccf file.&lt;br /&gt;
'''If you make a change and see no effect, you may be editing the wrong file!'''&lt;br /&gt;
&lt;br /&gt;
When the miniSim runs, it copies the .ccf file that pertains to the options selected in the go.cmd, and copies it to '''mininads_1ch.ccf''', which is the one that is loaded when miniSim is launched.&lt;br /&gt;
&lt;br /&gt;
This means that the '''mininads_1ch.ccf''' has the same ‘Last Modified Date’ as the file you want to edit.&lt;br /&gt;
&lt;br /&gt;
If you list the contents of the \bin.X64 folder by date, you will see something like this:&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h03_56.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In this case, you will see that the '''mininads_2ch.wide.sidemirrors.inst.ccf''' is the file you want to edit, as it has the same last modified date as '''mininads_1ch.ccf'''.&lt;br /&gt;
&lt;br /&gt;
For a desktop layout like this from Windows in ‘Display Settings’&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_15h05_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This is a '''Two-Channel''' system, meaning that the front three displays on the Matrox/Mosaic are Channel 0, and the Instrument Panel display is Channel 1.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: Where do I find data relating to the brake pedal force/position? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: The data you are seeking is represented by the '''CFS_Brake_Pedal_Force''' variable, which can be viewed either with ISAT or with Matlab during data reduction. The value ranges from 0 lbs. to 180 lbs., where 0 indicates no force (no pedal travel) and 180 indicates 180 pounds of force (full pedal travel).&lt;br /&gt;
&lt;br /&gt;
If you see a variable named '''CFS_Brake_Pedal_Position''' you may ignore this as it is not currently being used.   &lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I adjust the brake pedal response? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Information to adjust the brake pedal response is detailed in this document: [[:File:Adjust_Brake_Response_11302022.pdf]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: The tactile transducer, mounted under the cab, suddenly does not respond when the miniSim is running. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Check the following:&lt;br /&gt;
&lt;br /&gt;
1. Verify these connections first:&lt;br /&gt;
: a. The main stereo speakers should be plugged into the green audio port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: b. The Dayton D-30 amplifier should be plugged into the orange port on the back of the PC using a ⅛&amp;quot; mini-jack.&lt;br /&gt;
: c. The tactile transducer should be connected to the Dayton D-30 amplifier using the included speaker wire.&lt;br /&gt;
&lt;br /&gt;
2. Note that the amplifier controls the volume of the tactile transducer and therefore must be plugged into a power source. If the amplifier is not plugged into power, this could be the reason the tactile transducer is not working.&lt;br /&gt;
&lt;br /&gt;
3. Check the volume level of the amplifier. If it is set too low, the tactile transducer may '''appear''' to not be working. We suggest a minimum amplifier volume setting of 25% of full volume. A volume setting which is too high will be experienced as an unpleasant vibration and low-end rumble that does not resemble a real car. &lt;br /&gt;
&lt;br /&gt;
4. Launch the Realtek audio manager from the Task Bar and select 5.1 audio. Then, disable the center and rear channels, leaving the front left and right speakers, and the subwoofer enabled.&lt;br /&gt;
&lt;br /&gt;
5. Use the Realtek audio manager to test each of the speakers individually by clicking on each speaker icon. As you select a speaker, the speaker will sound.  &lt;br /&gt;
&lt;br /&gt;
Some motherboards have the sub/center channels switched. In this case, a ⅛&amp;quot; mini-jack to stereo RCA cable can be used.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== miniSim Operation ==&lt;br /&gt;
=== Q: Auto-start miniSim drive===&lt;br /&gt;
The miniSim simulator can be configured to start a drive automatically or not, depending on your project requirements.  &lt;br /&gt;
&lt;br /&gt;
This involves a '''''system level configuration change'''''.  To run two projects simultaneously you will need to create a unique startup sequence for each project in order to use the correct configuration file.&lt;br /&gt;
&lt;br /&gt;
Setting auto-start involves a setting in the hardware.xml file in use; note there are different configuration files present on all miniSim simulators within this folder:&lt;br /&gt;
&lt;br /&gt;
miniSim_x.x\bin.x64\config&lt;br /&gt;
&lt;br /&gt;
Please exit miniSim before editing any .xml file.  You may want to backup these files prior to editing.&lt;br /&gt;
&lt;br /&gt;
'''Enable auto-start'''&lt;br /&gt;
&lt;br /&gt;
Change the string&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;Sink device=&amp;quot;SimulatorInterface&amp;quot; port=&amp;quot;CIS_Auto_Ignition&amp;quot; ID=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To disable auto-start, set the value to 0.&lt;br /&gt;
&lt;br /&gt;
=== Q: miniSim is not responding. ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;A: At times you may find that your miniSim PC or miniSim software has become unresponsive. We define appropriate steps for correcting unresponsive behavior on a miniSim PC under the following conditions:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''miniSim Software is Running but Will Not Load a Drive Scenario:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.  &lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart the miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# This step will fix this unresponsive behavior most of the time. &lt;br /&gt;
* '''A miniSim Drive Has Been Selected but Will Not Start:'''&lt;br /&gt;
: Assuming the mouse is functioning, click on the Settings tab and verify all lines are green (ready mode). If one or more lines are red, simply wait for all to become green. If still not green after about 90 seconds, close and restart the miniSim software normally. This step will fix this unresponsive behavior most of the time.&lt;br /&gt;
* '''miniSim Software Stops Running:'''&lt;br /&gt;
# Assuming the mouse is functioning, simply close and then restart the miniSim program.&lt;br /&gt;
# If the mouse is not functioning, use the keyboard to close and restart miniSim program i.e. press Alt+Tab to select the minSim program and press Esc to close.&lt;br /&gt;
# If the miniSim software will not close, press Ctrl+Alt+Delete and open Task Manager. Within Task Manager, select the SimopServer program and close it. Restart miniSim.&lt;br /&gt;
# This process generally will recover miniSim from nearly any unresponsive state.&lt;br /&gt;
* '''miniSim PC Shuts Down Unexpectedly:'''&lt;br /&gt;
# Check for severe storms and possible power outages in your neighborhood.&lt;br /&gt;
# If you see smoke or smell something burning near the miniSim PC, carefully unplug the PC from the electrical outlet and fetch your fire extinguisher just in case. When immediate danger passes, consult a local hardware expert to examine your PC for possible electrical shorts, overheating or failure of critical systems such as motherboard, hard drive and etc. Contact NADS miniSim in the event hardware components need to be replaced. See contact information below.&lt;br /&gt;
* '''The miniSim PC Will Not Boot:'''&lt;br /&gt;
# On rare occasions your miniSim PC may not boot to Windows. It may halt the boot process just prior to launching Windows. If your miniSim PC has stopped the boot process before a Windows launch, it is okay to touch the reset button on the PC (the small button next to the power button). If your miniSim PC does not have a reset button, touch the power button lightly one time. There may be a slight delay but then your miniSim PC will restart the boot process.  This is the safest way to handle an uncompleted boot sequence.&lt;br /&gt;
# In most cases if the system stops prematurely during the boot process, for example, while displaying the motherboard splash screen (typically AMI) or the blinking cursor just prior to the Windows logo, the PC is having trouble enumerating USB devices before loading windows.  &lt;br /&gt;
# If the system hangs up during the second boot attempt, please check the USB connections. In particular, be sure the mouse and keyboard (typically connected through a USB hub) are in their designated USB ports i.e. nearest to the round PS2 style port (top for tower systems or far left for rackmount systems). These are typically USB 2.0 ports and are checked first during the USB enumeration process at boot. It is critical that the mouse/keyboard connections are made in this way.&lt;br /&gt;
# If the mouse/keyboard are connected to the correct USB ports, and your miniSim PC still does not boot, disconnect all USB devices (except mouse and keyboard) and systematically reconnect them one at a time in between reboots. This process will eventually and effectively isolate which USB device may be causing the boot problem. To resolve this conflict, simply plug the suspected USB device into a different USB port. Moving these devices to a different port typically resolves this problem permanently. It often (unfortunately) requires some experimentation (read trial and error) but once you find the right combination of USB devices and ports, this problem goes away.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Also, there are certain steps you should not take to try and resolve an unresponsive miniSim PC condition. Some tactics could actually make the problem worse e.g. damage hard drives, corrupt the operating system, scramble your data. Here are some activities you should not engage in to try and resolve a hanging miniSim PC:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Troubleshooting steps you should NOT try:'''&lt;br /&gt;
* Do not press and hold the power button on the PC while miniSim is running.&lt;br /&gt;
* Do not unplug the PC from electrical outlet while miniSim is running.&lt;br /&gt;
* Do not unplug mouse, monitors or keyboard while miniSim is running.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Acceptable methods for shutting down an unresponsive PC:'''&lt;br /&gt;
* Close all running programs, press the Windows key and select Shut Down.&lt;br /&gt;
* Or, press Ctrl+Alt+Delete and select Shut Down.&lt;br /&gt;
* Or, touch the reset button or lightly touch the power button one time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Making Changes to the BIOS====&lt;br /&gt;
&lt;br /&gt;
If your miniSim PC is unresponsive in ways that are not covered above, you may need to make certain changes to the BIOS of your miniSim PC. Altering BIOS settings on a PC is delicate work and requires more than a passing knowledge of computers.  Instructions for modifying the BIOS follows but if you would like the assistance of a NADS professional, don’t hesitate to ask. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The BIOS change involves enabling Fast Boot. Fast Boot will disable your USB devices at boot-up thus preventing USB port conflicts and effectively preventing endless USB enumeration and rebooting.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To enter BIOS setup, repeatedly press the Delete key while the computer is powering up.  Ultimately you will see a screen that looks like the screen shot below. (This assumes your miniSim PC was built in 2015 or later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Initial BIOS Screen.jpg|400px|thumb|center|Initial BIOS Screen]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Navigate to the '''Advanced tab''' using the arrow keys on your keyboard and select it.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.jpg|400px|thumb|center|Advanced Tab Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Scroll down and select '''USB Configuration.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:USB Configuration.jpg|400px|thumb|center|USB Configuration Selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Make sure your BIOS settings match the settings on the right half of the screen as shown below:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:BIOS Settings.jpg|400px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set '''Fast Boot''' to '''Fast.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Fast Boot Selected.jpg|400px|thumb|center|Fast Boot set to Fast]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Select '''Save Changes and Exit'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Save Changes and Exit.jpg|400px|thumb|center|Save Changes and Exit selected]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: these settings will disable your USB devices during boot. This will eliminate the USB enumeration problem but will also prevent you from accessing BIOS settings again without a PS2 style keyboard. Feel free to contact NADS for additional information on this condition.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bear in mind your BIOS screens may look different than the screenshots above but your objective remains the same, enable Fast Boot.  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Please don’t hesitate to contact us if you wish help with these settings. '''Word of Caution:''' make these changes during normal business hours. If you get stuck in BIOS settings on a weekend or middle of the night, we may not be available to help you.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= miniSim Software =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Simulation data ===&lt;br /&gt;
Your data is the primary reason for simulation and is available from the miniSim in two ways:&lt;br /&gt;
&lt;br /&gt;
# Default measures - these are pre-defined measures available for up to 20 events.&lt;br /&gt;
# Logstreams - the entire range of variables is available for as many events as required.&lt;br /&gt;
&lt;br /&gt;
These two methods require setting up a scenario to create [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#What_is_a_Scenario_Event.3F '''events'''] that happen during simulation and are defined in a way to allow extracting them from the drive.&lt;br /&gt;
&lt;br /&gt;
Default measures are available immediately after the drive in the form of a text document, located in the DAQ folder on miniSim.&lt;br /&gt;
&lt;br /&gt;
Logstreams are flags embedded in the drive data and requires data reduction to make the information available after the drive.&lt;br /&gt;
&lt;br /&gt;
More information on these methods is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Data_Output_Methods here:]&lt;br /&gt;
&lt;br /&gt;
= ISAT/Scenario =&lt;br /&gt;
&lt;br /&gt;
=== New to ISAT? ===&lt;br /&gt;
A quick start overview is available [https://www.nads-sc.uiowa.edu/minisim/wiki/images/6/68/ISAT_Quick_Start.pdf '''here.'''] &lt;br /&gt;
&lt;br /&gt;
The ISAT User Guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents '''here.''']&lt;br /&gt;
&lt;br /&gt;
A scenario/ISAT troubleshooting guide is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Troubleshooting_Guide '''here.''']&lt;br /&gt;
&lt;br /&gt;
=== Data Logging: miniSim Default Measures ===&lt;br /&gt;
There are a fixed number of measures available and a limit of 20 events.&lt;br /&gt;
&lt;br /&gt;
More information including which measures are available and how to structure your scenario to support default measures is available [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Default_miniSim_Scenario_Measures here.]&lt;br /&gt;
&lt;br /&gt;
=== Q: How do we make an ADO or DDO go backward? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
A: Only DDOs can back up. To accomplish this, start by placing a DDO where desired.&lt;br /&gt;
&lt;br /&gt;
Next, create a path for the DDO; right-click on it and select Extend Path from the pop-up menu.&lt;br /&gt;
&lt;br /&gt;
Then, lay out a path (path nodes are a sequence of yellow dots) to indicate the desired route of travel.&lt;br /&gt;
&lt;br /&gt;
Finally, right-click on each node and select Rotate to set the direction that you wish the DDO to face. The direction at each node can be set independently.&lt;br /&gt;
&lt;br /&gt;
In order to make it appear as though the car is moving backwards, the arrows should point against the direction of travel. To avoid erratic movement, you should add sufficient nodes to create a smooth path. This will result in smoother and more realistic movement of the DDO, especially if you are changing direction rapidly.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I play a sound in my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario Using Audio in a Scenario]&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How do I add a trigger to my scenario? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Triggers can be added to a scenario in ISAT through the menu '''Insert &amp;gt;&amp;gt; Coordinators'''&lt;br /&gt;
or, if the ISAT Elements panel is open, by left-click-drag any trigger off the panel and then releasing the left button where you want to place the trigger.&lt;br /&gt;
&lt;br /&gt;
After a trigger has been placed in your scenario you can reposition it by clicking and dragging it to a new location.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Trigger consist of multiple elements.  To reposition a trigger you will have to click-drag the trigger handle, which is a small red dot.  Clicking the larger trigger pane will move the pane, not the handle.  Moving the handle will move the trigger.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h07_26.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Some triggers also require a roadpad (roadpad, follow, Time To Arrival triggers).&lt;br /&gt;
Right-click on the trigger and choose '''Place Road Pad.'''&lt;br /&gt;
&lt;br /&gt;
'''Note: All triggers with road pads require a [https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#Triggers '''predicate'''] to activate the trigger.'''&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is a “Write to Cell” action? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cells are reserved data containers that define various attributes and operating characteristics of the miniSim and are stored after each drive in a unique drive DAQ file.&lt;br /&gt;
&lt;br /&gt;
A '''write to cell''' action allows you to send data to miniSim and simultaneously store this data in the DAQ file during simulation.  &lt;br /&gt;
&lt;br /&gt;
Most cells are managed by a subsystem (behaviors, dynamics, scenario control).  For these cells, writing to a cell is possible but not practical because the managing subsystem will overwrite that cell within the next frame.&lt;br /&gt;
&lt;br /&gt;
'''Examples''' (not a complete list!):&lt;br /&gt;
# Play a sound/audio file: Write to Cell SCC_Audio_Trigger&lt;br /&gt;
# Set event status or an event number for default miniSim data measures: Write to Cell SCC_Event_Status, SCC_Event_Number&lt;br /&gt;
# Saving data during a drive to the DAQ so it is available for analysis; i.e., timing of things, storing scenario variable data (variables are not persistent unless saved to a file or written to the DAQ): Write to Cell SCC_Custom1, or user defined&lt;br /&gt;
# Changing a simulator setting (Adaptive Cruise Control on/off, Automatic Lane Following): Write to Cell SCC_ALF_On, SCC_ACC_On&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Write to cell actions are expensive operations and there is currently a limit of 7 per frame.  '''Exceeding this number will likely result in the excess cells not being written'''. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some cells are managed by the Cab Information/Hardware subsystem (CIS).  Configuring miniSim to support operation by both scenario and CIS may require consulting with NADS to ensure correct operation.&lt;br /&gt;
&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell if the driver has left the road? ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
One way to check if the driver has left the roadway is to use a lane deviation calculation: if the lane deviation is greater than &amp;lt;measured_total_lane_width&amp;gt; or less than -&amp;lt;measured_total_lane_width&amp;gt;, the driver is likely out of the lane.&lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: How can I tell what surface the driver is driving over?  ===&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A. Use the cell '''TPR_Surface_Type_Ind to detect the surface material code (SMC) under the driver. &lt;br /&gt;
&lt;br /&gt;
The first four elements of the TPR_Surface_Type_Ind correspond to 4 wheels of the ownship/external driver vehicle.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_16.png|400px]]&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h21_27.png|400px]]&lt;br /&gt;
&lt;br /&gt;
MiniSim does not report surface material codes within intersections that do not have an elevation map associated with them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_14h22_10.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
You can find a complete list of available surface material codes (SMC) - (not all of these are used in the tile library, but this is the current version for SMC codes) under the TMT\ProjectData\Tiles\CommonLRIData\SurfaceMaterialSpecifications.xlsx.  &lt;br /&gt;
 &lt;br /&gt;
'''Note:''' Intersection elevation maps were introduced in TMT '''1.8.5'''.&lt;br /&gt;
 &lt;br /&gt;
[[#top|TOP]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;toccolours mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Q: What is the difference between SCC_Lane_Deviation and SCC_Lane_Spline_Deviation?  ===&lt;br /&gt;
&lt;br /&gt;
SCC_Lane_Spline_Deviation is computed from centerline data as a continuous spline and is recommended over SCC_Lane_Deviation.&lt;br /&gt;
&lt;br /&gt;
[[File:scc_lane_spline_deviation_20230918.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Scc_lane_spline_deviation_20230918.png&amp;diff=3971</id>
		<title>File:Scc lane spline deviation 20230918.png</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Scc_lane_spline_deviation_20230918.png&amp;diff=3971"/>
				<updated>2023-09-18T18:05:50Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3970</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3970"/>
				<updated>2023-09-15T15:48:38Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_Show_Driver_Speed.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario How to Use Audio in your Scenario]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_Display_Screen_Text.scn|Demo_ISAT_Display_Screen_Text.scn]]&lt;br /&gt;
: [[#Demo_ISAT_Monitor_Driver_Speed.scn|Demo_ISAT_Monitor_Driver_Speed.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3969</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3969"/>
				<updated>2023-09-15T15:46:24Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_Play_Audio.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario How to Use Audio in your Scenario]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3968</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3968"/>
				<updated>2023-09-15T15:44:55Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_Play_Audio.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario | How to Use Audio in your Scenario]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3967</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3967"/>
				<updated>2023-09-15T15:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_Play_Audio.scn add hyperlink to isat user guide section on audio*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario| How to Use Audio in your Scenario]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3966</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3966"/>
				<updated>2023-09-15T15:32:00Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_Play_Audio.scn add hyperlink*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents#How_to_Use_Audio_in_your_Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3965</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3965"/>
				<updated>2023-09-15T15:29:02Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3964</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3964"/>
				<updated>2023-09-15T15:28:20Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Control.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3963</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3963"/>
				<updated>2023-09-15T15:27:25Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_Lane_Context_Actions.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3962</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3962"/>
				<updated>2023-09-15T15:25:17Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_TTA_LVPO.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3961</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3961"/>
				<updated>2023-09-15T15:23:30Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Traffic_1.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Relative_Create.scn|Demo_ISAT_ADO_Relative_Create.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_Oncoming_Incursion.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3960</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3960"/>
				<updated>2023-09-15T15:22:26Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Random.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Relative_Create.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_Oncoming_Incursion.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3959</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3959"/>
				<updated>2023-09-15T15:22:04Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Passing_Maneuvers.scn */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_TTA_LVPO.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Relative_Create.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_Oncoming_Incursion.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3958</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3958"/>
				<updated>2023-09-15T15:21:37Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Oncoming_Incursion.scn add links to see also scn*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
: [[#Demo_ISAT_ADO_Control.scn|Demo_ISAT_ADO_Control.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn|Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_TTA_LVPO.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Relative_Create.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_Oncoming_Incursion.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3957</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3957"/>
				<updated>2023-09-15T15:18:24Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn add links to see also scn*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_TTA_LVPO.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_TTA_LVPO.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Relative_Create.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_Oncoming_Incursion.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3956</id>
		<title>ISAT Demonstration Scenarios</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_Demonstration_Scenarios&amp;diff=3956"/>
				<updated>2023-09-15T15:16:59Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Demo_ISAT_ADO_Control.scn add links to see also scenarios*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== About the ISAT Demonstration Scenarios ==&lt;br /&gt;
&lt;br /&gt;
Making something happen during a simulation in a repeatable and consistent fashion for different driving styles is the essence of scenario authoring.  Every thing that happens must be coordinated to some degree with the External Driver (XD).  For repeatability, it is also necessary to consider how different driving styles (aggressive vs. conservative) impact how the scenario unfolds for each.&lt;br /&gt;
&lt;br /&gt;
These demonstration scenarios were created to facilitate learning how to use ISAT and do scenario actions.  Each scenario demonstrates a key concept or element and may contain additional elements to support the main concept.  For example, all scenarios contain an introduction to the scenario for the XD and a termination trigger that will stop the simulation.&lt;br /&gt;
&lt;br /&gt;
'''These scenarios are not intended for use as completed data collection ready scenarios.  They are provided to answer the question &amp;quot;how can I do X Y Z..?&amp;quot;&lt;br /&gt;
&lt;br /&gt;
These scenario elements can be integrated into your scenarios using copy-paste except where elements have been created with a Create action.  For those elements it will be necessary to copy the parent element instead.&lt;br /&gt;
&lt;br /&gt;
TBC: Add a link to the library or directions how to get the files&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Control.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to control an ADO:&lt;br /&gt;
&lt;br /&gt;
•	ADO set dial &amp;gt; forced velocity = 0 to keep ADO stationary.&lt;br /&gt;
&lt;br /&gt;
•	Release the forced velocity, assign a maintain gap.&lt;br /&gt;
&lt;br /&gt;
•	Release the maintain gap, assign a target velocity.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
: [[#Demo_ISAT_ADO_Oncoming_Incursion.scn|Demo_ISAT_ADO_Oncoming_Incursion.scn]]&lt;br /&gt;
: [[#Demo_ISAT_ADO_TTA_LVPO.scn|Demo_ISAT_ADO_TTA_LVPO.scn]]&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn ==&lt;br /&gt;
This scenario demonstrates how to vary the velocity of an ADO using a Sum of Sines expression: &lt;br /&gt;
&lt;br /&gt;
*Uses a forced velocity action;&lt;br /&gt;
*Try to maintain a constant speed at 30 mph;&lt;br /&gt;
*Notice how the speed of the ADO changes during the drive.&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
There is also a forced velocity Sin function available with 4 parameters&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Oncoming_Incursion.scn&lt;br /&gt;
:Demo_ISAT_ADO_TTA_LVPO.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Oncoming_Incursion.scn ==&lt;br /&gt;
This scenario demonstrates the use of a forced lane offset to cause an oncoming ADO to veer into the driver’s lane:&lt;br /&gt;
&lt;br /&gt;
*Additional ambient traffic is included to provide a normal driving environment;&lt;br /&gt;
*A following ADO will encourage slow drivers to travel the speed limit;&lt;br /&gt;
*Because we do not want to rely on the driver travelling at the right speed, we match the event ADO velocity to the driver to ensure the event happens as planned.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_TTA_LVPO.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Passing_Maneuvers.scn ==&lt;br /&gt;
This scenario demonstrates how to implement an ADO passing maneuver on 4 lane and 2 lane roads:&lt;br /&gt;
&lt;br /&gt;
*4 lane roads can use either Set Dial &amp;gt; ADO &amp;gt; Lane Change OR Set_Button &amp;gt; ADO &amp;gt; Lane Change;&lt;br /&gt;
*'''Lane change actions are not supported on 2 lane roads; &lt;br /&gt;
- Use a lane offset to produce something similar to a passing maneuver&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Random.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Rand() function to assign a randomized gap to an ADO:&lt;br /&gt;
&lt;br /&gt;
*Typical gap assignments are fixed/constant;&lt;br /&gt;
*Use of a randomized value introduces some inconsistency to the ADO position, which is organic and more realistic.&lt;br /&gt;
*Requires the use of variables and expressions.&lt;br /&gt;
*Saves the calculated randomizations to the DAQ for validation (review in ISAT).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_TTA_LVPO.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Relative_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the Relative Create flag for ADOs.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Relative Create works only with negative values.&lt;br /&gt;
&lt;br /&gt;
Used to create traffic behind the external driver independent of the location where the ADOs are initially placed.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Traffic_1.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_Traffic_1.scn ==&lt;br /&gt;
This scenario demonstrates how to create traffic in a scenario:&lt;br /&gt;
&lt;br /&gt;
*Create ADOs or copy/paste to locations within the drive;&lt;br /&gt;
*Create ADOs with a Creation Radius (they get created as the External Driver drives the route);&lt;br /&gt;
*Create ADOs with a trigger Create action;&lt;br /&gt;
*Generate traffic with a Traffic Source;&lt;br /&gt;
*Generate traffic with the Traffic Manager (or change TM sets).&lt;br /&gt;
&lt;br /&gt;
Each method has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
Demo_ISAT_ADO_Relative_Create.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_ADO_TTA_LVPO.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Time to Arrival trigger to create a crashpossible event:&lt;br /&gt;
&lt;br /&gt;
*The scenario contains some distracting elements;&lt;br /&gt;
*The event ADO behavior is highly dependent on the speed of the XD.&lt;br /&gt;
- If the driver is going too fast it may cause the event ADO to disappear&lt;br /&gt;
*A time trigger with creation radius acts as a proximity trigger to end the drive, in case the driver steers out of the crash area. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
&lt;br /&gt;
:Demo_ISAT_ADO_Control.scn&lt;br /&gt;
:Demo_ISAT_ADO_Forced_Velocity_Sum_of_Sines.scn&lt;br /&gt;
:Demo_ISAT_ADO_Oncoming_Incursion.scn&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Alert_Slow_Moving_Object.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to implement a proximity alert to warn the driver of a slow moving vehicle ahead:&lt;br /&gt;
&lt;br /&gt;
*Speed monitor to ensure the driver is travelling at a velocity where the event can happen&lt;br /&gt;
*Alarm triggers when proximity threshold is achieved&lt;br /&gt;
&lt;br /&gt;
Because there is no good way to tell in advance where the event happens, the end of drive happens following the alert.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Avoid_Obstacle.scn ==&lt;br /&gt;
&lt;br /&gt;
This demo scenario demonstrates a collision avoidance event using ambient traffic and a DDO obstacle:&lt;br /&gt;
&lt;br /&gt;
*The event requires some setup to position the event vehicles&lt;br /&gt;
*The obstacle is a DDO (desk) contained within a van model that has operable rear doors which swing open&lt;br /&gt;
*The DDO transitions from a coupled object to a free motion object&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Create_Elements.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create scenario elements during a drive with the Create Element action.&lt;br /&gt;
&lt;br /&gt;
*Remember all triggers share the same actions; thus, any trigger may contain a create action.&lt;br /&gt;
*Only 1 create action is permitted per trigger.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Default_Measures.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to use the miniSim Default Measures in a scenario to produce a valid report for the drive:&lt;br /&gt;
&lt;br /&gt;
*Must follow the write to cell procedure for events:&lt;br /&gt;
:#initialize event status and event number to zero at scenario start&lt;br /&gt;
:#change SCC_EventStatus from 0 to 1 for the event, and close to 0 after the event&lt;br /&gt;
:#change SCC_EventNumber throughout the drive (incremental count starting with 1, 2, 3, etc.)&lt;br /&gt;
*Produces a report.txt for each drive&lt;br /&gt;
*The drive report.txt for each drive is located in the DAQ folder location.&lt;br /&gt;
&lt;br /&gt;
'''Note: if proper write to cell steps aren’t followed, all measures will be empty in the report.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Data_Measures_Logstreams.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of Log Streams for documenting significant locations or events in your DAQ file.&lt;br /&gt;
&lt;br /&gt;
*Best practice: initialize all Logstreams to some value at the start.&lt;br /&gt;
*Events may be numbered, or subdivided using the same logstream.  This demo uses LogStream 1.&lt;br /&gt;
&lt;br /&gt;
*The scenario author and data reduction scientist must agree on what measures are important to encode.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_DDOs.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates different ways to use DDOs and DDDOs.  Both types typically begin moving when the scenario starts, unless you assign a creation radius or control the DDO speed.&lt;br /&gt;
&lt;br /&gt;
1.	DDO: simple path follower.&lt;br /&gt;
&lt;br /&gt;
2.	DDDO (dependent path follower): includes a target path node and a target point.  The &lt;br /&gt;
DDDO movement is constrained so when the specified object is at the target point, the DDDO will be at the target path node irrespective of the speed assigned to each node.&lt;br /&gt;
DDO and DDDOs can be pedestrians, animals or vehicles.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Display_Screen_Text.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display text messages to the screen.&lt;br /&gt;
&lt;br /&gt;
Text font, color and locations are specified at: NadsMiniSim_x.x\bin.x64\config\scenario_text.xml&lt;br /&gt;
&lt;br /&gt;
'''*Be sure to maintain a backup if you edit this file!&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
Demo_ISAT_Show_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_ENV_Dynamic_Fog.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to gradually apply fog and the difference between fog and visibility. The usual method of adding weather effects to a scenario is by defining a region of influence which means the effect is applied abruptly to the scene at the region boundaries (on/off). &lt;br /&gt;
&lt;br /&gt;
*Fog and Visibility are Weather Effects&lt;br /&gt;
-	Insert &amp;gt;&amp;gt; Environment Conditions &lt;br /&gt;
*Fog density is managed with 3 variables: &lt;br /&gt;
::#FogDistance&lt;br /&gt;
::#MaximumFog&lt;br /&gt;
::#FogDensity&lt;br /&gt;
*An example of reduced Visibility is included near the end of this drive to show how that setting is different from fog.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_time_of_day.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change the time of day:&lt;br /&gt;
&lt;br /&gt;
*Variables are used to track day-night cycles &lt;br /&gt;
*Time settings (Hour) were chosen arbitrarily&lt;br /&gt;
::'''Small time differences will not affect environment; ie. 07:10 – 07:30&lt;br /&gt;
*A parked F150 ADO in the scenario has auto-headlights enabled&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Headlight control from scenario requires changes to the miniSim hardware.xml configuration file – they do not automatically turn on at night&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Simulation_on_Collision.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate simulation if a collision happens during a drive.  Collisions may occur with ADOs, DDOs, DDDOs and static objects that are present in the scene.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
It is possible to configure miniSim or edit the scenario object list file (SOL2.txt) to disable collisions either globally or for specific objects.  In that event this scenario will not terminate due to a collision.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Exit_Follow_Trigger_Create.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates use of the Follow Trigger:&lt;br /&gt;
&lt;br /&gt;
*The follow trigger can activate between any two dynamic objects;&lt;br /&gt;
*Most commonly uses the XD for one of the two objects (leader or follower);&lt;br /&gt;
*Trigger instigator (predicate) can be either;&lt;br /&gt;
*The follow trigger action stack is processed when the trigger conditions have been met;&lt;br /&gt;
*When the actions are executed an oncoming Ambulance ADO is created.&lt;br /&gt;
&lt;br /&gt;
== Demo_ISAT_Get_ObjTTC.scn==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to get a Time To Collision for dynamic and stationary objects (DDOs and ADOs):&lt;br /&gt;
&lt;br /&gt;
*Any time delays in the action stack collecting data and reporting it will create a variance between what you measure in ISAT and what gets reported in the DAQ;&lt;br /&gt;
*Cells and variables are used to get the information for TTC and distance;&lt;br /&gt;
*Variables are written to SCC_Custom1 – 3 for distance, TTC and the raw distance value reported by GetObjDistPow2;&lt;br /&gt;
*3 events are shown to illustrate re-use of the same variables throughout for the target object:&lt;br /&gt;
::#DDO dynamic&lt;br /&gt;
::#DDO stationary&lt;br /&gt;
::#ADO stationary&lt;br /&gt;
*Logstreams are used for event numbering and distances to each object;&lt;br /&gt;
*If you re-use the same object name, you must remove the previous object – only 1 should be present in the simulation at any time.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE:&lt;br /&gt;
Static objects cannot be created in realtime with the Create Element action, but they can be created as DDOs. They default to their first visual option; change with a set switch action.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Lane_Context_Actions.scn ==&lt;br /&gt;
This scenario demonstrates how to limit actions to a specific lane.&lt;br /&gt;
&lt;br /&gt;
*Lane filter can only be used with roadpad triggers.&lt;br /&gt;
*Useful for situational cases: if the driver is in the correct lane, then they will not receive alert.  If the driver is in the wrong lane, then they will.&lt;br /&gt;
*Also useful for ADO control at the lane level.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
Demo_ISAT_ADO_Control.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Loop_Management_Traffic.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to configure a scenario where it is necessary to drive multiple loops:&lt;br /&gt;
&lt;br /&gt;
*Increment a counter at the location the loop counts increase;&lt;br /&gt;
::Each time through the loop a unique action happens&lt;br /&gt;
::Increment and decrement operators are not expressions!&lt;br /&gt;
*Expression triggers fire on loops (one per loop);&lt;br /&gt;
*Can create more than ADOs.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Monitor_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to monitor driver velocity.  Triggers are configured to monitor driving too slowly (under speed) and driving too fast.  The threshold between under and over speed is intentionally difficult to maintain – the goal is to achieve a few alerts of either kind during the drive:&lt;br /&gt;
&lt;br /&gt;
*Variable sets are used for under, over speed cases:&lt;br /&gt;
::a timer that increments a variable for each;&lt;br /&gt;
::an additional conditional (variable) so there is no alert at scenario start, while the driver is getting up to operating speed.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Play_Audio.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to play audio messages on miniSim using the write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger action.&lt;br /&gt;
A short delay after the write to cell action is recommended.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Recommended practice requires a second write to cell action to ‘clear’ the previous audio message.&lt;br /&gt;
&lt;br /&gt;
Playing two write to cell &amp;gt;&amp;gt; SCC_Audio_Trigger actions back to back with no delay, and no ‘clear’ likely results in a single audio message.  For long messages, use the length of the message as a delay to avoid over-writing the message being played with any subsequent messages.&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
[[How to Use Audio in your Scenario|How_to_Use_Audio_in_your_Scenario]]&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Right_Incursion.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to present a crash possible event using a right-side incursion:&lt;br /&gt;
&lt;br /&gt;
•	Ambient traffic and features are used during the drive; • The event is coupled with an oncoming vehicle distraction;&lt;br /&gt;
•	The event is masked by features in the scene.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Set_Switch.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to change objects during a simulation with a Set Switch action (static object, DDO, ADO objects).&lt;br /&gt;
&lt;br /&gt;
•	The set switch action requires the model switch name;&lt;br /&gt;
•	Switches for all models are listed in the  file NadsMiniSim_x.x\bin.x64\ModelList.txt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Stop_Drive.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to terminate a simulation from the scenario:&lt;br /&gt;
&lt;br /&gt;
• A roadpad trigger tells the driver it is time to stop and shift into park, and creates an Expression trigger to:&lt;br /&gt;
-	monitor the transmission gear,&lt;br /&gt;
-	terminate the simulation if the driver shifts into Park.&lt;br /&gt;
A Roadpad trigger acts as a backup that ends the drive if the XD doesn’t stop. &lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Show_Driver_Speed.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action. &lt;br /&gt;
&lt;br /&gt;
* A time trigger is configured to monitor conditions; in this case, the external driver’s speed.&lt;br /&gt;
* The monitoring trigger is created by a roadpad trigger to ensure the driver is moving; therefore driver velocity is not zero.&lt;br /&gt;
&lt;br /&gt;
* The monitoring trigger fires repeatedly during the drive.&lt;br /&gt;
* A variable is set to the value of a cell containing the driver velocity;&lt;br /&gt;
* That value is displayed on screen.&lt;br /&gt;
&lt;br /&gt;
See Also:&lt;br /&gt;
:Demo_ISAT_Display_Screen_Text.scn&lt;br /&gt;
:Demo_ISAT_Monitor_Driver_Speed.scn&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Track_Button_Press.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display variables on screen using the Set Visual Display Text action:&lt;br /&gt;
&lt;br /&gt;
•	A time trigger This demo scenario uses expression triggers to detect button presses (turn signal activation).&lt;br /&gt;
•	Variables are used to track which signal was activated (left vs. right) and demo progress.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''The values used in the scenario may be site-specific; if your miniSim does not produce the values used, this scenario may fail.&lt;br /&gt;
&lt;br /&gt;
To determine the correct values for your miniSim, drive any scenario and press the left, then the right turn signals and review this drive DAQ in ISAT.  The relevant cell is CIS_Turn_Signal.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Traffic_Light.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates the use of a Traffic Light Trigger:&lt;br /&gt;
&lt;br /&gt;
*A traffic light trigger activates at a specified signal state;&lt;br /&gt;
*Relies on a traffic light action to set the signal to a specified state;&lt;br /&gt;
*That state must already exist in the traffic signal timing table configuration for the intersection&lt;br /&gt;
::dbl-click on the traffic signal to open the signal timing table&lt;br /&gt;
&lt;br /&gt;
*A more robust method would use a time to arrival (TTA) trigger that can accommodate different XD velocities or driving styles (conservative vs. aggressive, slow vs. fast) instead of the roadpad and delays used in this demo.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Virtual_Objects.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to display and control virtual objects during a drive.  Virtual objects render to screen space on top of everything on display; they do not typically occupy 3d space within the scene.&lt;br /&gt;
&lt;br /&gt;
One possible application for virtual objects is to use them as a custom heads up display (HUD) or alert system within the scenario.&lt;br /&gt;
&lt;br /&gt;
By default virtual objects initialize to state 0 (off/disabled) at scenario start.&lt;br /&gt;
&lt;br /&gt;
'''Note:&lt;br /&gt;
'''Currently only Render Type = Overlay and Main Screen are supported.&lt;br /&gt;
&lt;br /&gt;
==Demo_ISAT_Yellow_Light_Dilemma.scn ==&lt;br /&gt;
&lt;br /&gt;
This scenario demonstrates how to create a Yellow Light dilemma at an intersection.  &lt;br /&gt;
&lt;br /&gt;
#There must be a working signal state table;&lt;br /&gt;
#The traffic signal is controlled by a time to arrival (TTA) trigger;&lt;br /&gt;
#If the XD decides to stop, a roadpad trigger created by (2) will reset the signal to green so the XD can continue the drive;&lt;br /&gt;
#A roadpad trigger terminates the drive after the intersection.&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=APPENDIX_B&amp;diff=3955</id>
		<title>APPENDIX B</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=APPENDIX_B&amp;diff=3955"/>
				<updated>2023-09-15T15:08:50Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* MiniSim Data Acquisition Cell Definitions add email link for more complete docs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Table of contents|Table of Contents]]&lt;br /&gt;
&lt;br /&gt;
[[APPENDIX_A|◄PREVIOUS]]   [[APPENDIX_B_CONTINUED|NEXT►]]&lt;br /&gt;
==MiniSim Data Acquisition Cell Definitions==&lt;br /&gt;
&lt;br /&gt;
A partial list of the data collection requirements for the simulator are listed in the following table.&lt;br /&gt;
&lt;br /&gt;
More complete documentation is available on [mailto:dsri-minisim@uiowa.edu|on request].&lt;br /&gt;
&lt;br /&gt;
CSSDC = Change State Signal Data Collection, and indicates that data is collected only when the state changes.&lt;br /&gt;
&lt;br /&gt;
[[File: def1.png|800px|thumb|center]]&lt;br /&gt;
[[File: def2.png|800px|thumb|center]]&lt;br /&gt;
[[File: pg20.png|800px|thumb|center]]&lt;br /&gt;
[[File: def21.png|800px|thumb|center]]&lt;br /&gt;
[[File: def22.png|800px|thumb|center]]&lt;br /&gt;
[[File: pg30.png|800px|thumb|center]]&lt;br /&gt;
[[File: pg31.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[APPENDIX_A|◄PREVIOUS]]   [[APPENDIX_B_CONTINUED|NEXT►]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=APPENDIX_B&amp;diff=3954</id>
		<title>APPENDIX B</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=APPENDIX_B&amp;diff=3954"/>
				<updated>2023-09-15T15:05:14Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* MiniSim Data Acquisition Cell Definitions add a partial list verbage*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Table of contents|Table of Contents]]&lt;br /&gt;
&lt;br /&gt;
[[APPENDIX_A|◄PREVIOUS]]   [[APPENDIX_B_CONTINUED|NEXT►]]&lt;br /&gt;
==MiniSim Data Acquisition Cell Definitions==&lt;br /&gt;
&lt;br /&gt;
A partial list of the data collection requirements for the simulator are listed in the following table.&lt;br /&gt;
CSSDC = Change State Signal Data Collection, and indicates that data is collected only when the state changes.&lt;br /&gt;
&lt;br /&gt;
[[File: def1.png|800px|thumb|center]]&lt;br /&gt;
[[File: def2.png|800px|thumb|center]]&lt;br /&gt;
[[File: pg20.png|800px|thumb|center]]&lt;br /&gt;
[[File: def21.png|800px|thumb|center]]&lt;br /&gt;
[[File: def22.png|800px|thumb|center]]&lt;br /&gt;
[[File: pg30.png|800px|thumb|center]]&lt;br /&gt;
[[File: pg31.png|800px|thumb|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[APPENDIX_A|◄PREVIOUS]]   [[APPENDIX_B_CONTINUED|NEXT►]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3953</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3953"/>
				<updated>2023-09-15T15:02:18Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* What is ISAT? add more info about isat*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the DSRI Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI: roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl: Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt;: Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB: Left mouse button&lt;br /&gt;
*DblClk: Double click LMB&lt;br /&gt;
*MMB: Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB: Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use [[#External_Reference|external reference scenario files]] to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Rehearsal without specifying a start location&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases ISAT will crash if the external driver (XD)/start location has not been specified or is missing due to a sol2 file configuration error.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the DSRI Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
ISAT uses resource files that are based on the model objects found in the miniSim.  They are proxy objects for the real models used during simulation.&lt;br /&gt;
&lt;br /&gt;
ISAT contains a rudimentary scripting language for automating some repetitive tasks.  Scripting is an advanced topic.  Because the scripting language is not well documented, it is recommended to copy existing scripts that perform similar functions and modify them.&lt;br /&gt;
&lt;br /&gt;
Because ISAT scenarios are text, you can make some edits quickly and easily using any text editor.&lt;br /&gt;
&lt;br /&gt;
'''However:&lt;br /&gt;
&lt;br /&gt;
When editing a scenario as text, always work on a backup copy in case something goes wrong in the text editing process that invalidates the scenario file to the point where ISAT cannot read it!&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3952</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3952"/>
				<updated>2023-09-15T14:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* What is ISAT? change NADS to DSRI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the DSRI Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI: roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl: Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt;: Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB: Left mouse button&lt;br /&gt;
*DblClk: Double click LMB&lt;br /&gt;
*MMB: Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB: Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use [[#External_Reference|external reference scenario files]] to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Rehearsal without specifying a start location&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases ISAT will crash if the external driver (XD)/start location has not been specified or is missing due to a sol2 file configuration error.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the DSRI Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3951</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3951"/>
				<updated>2023-09-15T14:52:28Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /*  Known Issues add blurb re: missing start or XD */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the DSRI Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI: roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl: Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt;: Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB: Left mouse button&lt;br /&gt;
*DblClk: Double click LMB&lt;br /&gt;
*MMB: Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB: Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use [[#External_Reference|external reference scenario files]] to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Rehearsal without specifying a start location&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some cases ISAT will crash if the external driver (XD)/start location has not been specified or is missing due to a sol2 file configuration error.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3950</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3950"/>
				<updated>2023-09-15T14:48:04Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Conventions Used in this Document formatting, add : to list elements for legibility */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the DSRI Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI: roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl: Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt;: Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB: Left mouse button&lt;br /&gt;
*DblClk: Double click LMB&lt;br /&gt;
*MMB: Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB: Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use [[#External_Reference|external reference scenario files]] to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3949</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3949"/>
				<updated>2023-09-15T14:46:31Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Who should use this document? Change NADS to DSRI*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the DSRI Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use [[#External_Reference|external reference scenario files]] to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3948</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3948"/>
				<updated>2023-09-14T20:00:04Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /*  Known Issues add link to external ref section for Known Issues*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use [[#External_Reference|external reference scenario files]] to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3947</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3947"/>
				<updated>2023-08-29T20:36:04Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Triggers formatting*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3946</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3946"/>
				<updated>2023-08-29T20:35:41Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Triggers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.  '''The differences between triggers is their activation methods.'''&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3945</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3945"/>
				<updated>2023-08-29T20:34:07Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Roadpad Trigger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3944</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3944"/>
				<updated>2023-08-29T20:33:43Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Roadpad Trigger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The highlighted lane shows which lane is the '''activating lane'''.  Other lane/s will not activate the trigger action stack.&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3943</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3943"/>
				<updated>2023-08-29T20:32:11Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Roadpad Trigger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|800px]]&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3942</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3942"/>
				<updated>2023-08-29T20:31:50Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Roadpad Trigger */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3941</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3941"/>
				<updated>2023-08-29T20:31:22Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Roadpad Trigger add roadpad trigger graphic*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
[[File:Screenshot (208).png|250px]]&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Screenshot_(208).png&amp;diff=3940</id>
		<title>File:Screenshot (208).png</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Screenshot_(208).png&amp;diff=3940"/>
				<updated>2023-08-29T20:30:06Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3939</id>
		<title>ISAT User Guide Table of Contents</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=ISAT_User_Guide_Table_of_Contents&amp;diff=3939"/>
				<updated>2023-08-29T20:28:55Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: /* Triggers add trigger graphics*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who should use this document? ==&lt;br /&gt;
Anyone learning to use the NADS Interactive Scenario Authoring Tool (ISAT) to create scenarios for simulation, or who is interested in learning more about ISAT, ISAT elements or creating scenarios.&lt;br /&gt;
&lt;br /&gt;
This user guide contains an introduction to the ISAT interface and how to use ISAT for various tasks during the creation of scenario files (also known as scenario authoring).&lt;br /&gt;
&lt;br /&gt;
Example scenarios are provided to help illustrate concepts and tasks.&lt;br /&gt;
&lt;br /&gt;
===Conventions Used in this Document===&lt;br /&gt;
This section contains abbreviations and conventions used as a shortened description to make spelling out every step using text unnecessary.&lt;br /&gt;
&lt;br /&gt;
*BLI roadmap of the road network constructed using the Tile Mosaic Tool (TMT)&lt;br /&gt;
*CTRL or Ctrl Press the Control (Ctrl) key&lt;br /&gt;
*CTL-&amp;lt;some other key&amp;gt; Press and hold the Ctrl and then press &amp;lt;some other key&amp;gt;.  Most typically used for copy (CTRL-C) or paste (CTRL-V).&lt;br /&gt;
*LMB Left mouse button&lt;br /&gt;
*DblClk Double click LMB&lt;br /&gt;
*MMB Middle mouse button (or scroll wheel as button)&lt;br /&gt;
*RMB Right mouse button&lt;br /&gt;
&lt;br /&gt;
Words or phrases separated by &amp;gt;&amp;gt; indicate the word or phrase after &amp;gt;&amp;gt; is a child of the word or phrase preceding these characters.  For example, to describe inserting a Traffic Source in ISAT from the Insert menu:&lt;br /&gt;
:LMB Insert &amp;gt;&amp;gt; Coordinators &amp;gt;&amp;gt; Source &amp;gt;&amp;gt; LMB&lt;br /&gt;
:NOTE: LMB is assumed for all menu items and may not be explicitly included&lt;br /&gt;
&lt;br /&gt;
For commands entered into a DOS command line interface (CLI) window, characters within &amp;lt;&amp;gt; are intended as generic and should be replaced in your CLI with the actual file name, without the &amp;lt;&amp;gt; characters&lt;br /&gt;
:&amp;lt;Enter&amp;gt; or (Enter) means to press the Enter key&lt;br /&gt;
&lt;br /&gt;
===Demonstration Scenarios===&lt;br /&gt;
Demonstration scenario files have been provided to assist with learning how to use ISAT or the mechanics of specific actions or sequences of actions '''as examples''' and are not intended to be examples of completed scenarios unless identified as such.&lt;br /&gt;
&lt;br /&gt;
These demo scenarios should '''not be considered''' actual scenarios, because they often lack supporting event logging (logstreams) as well as lacking any general context in terms of an overall scenario.  The demo scenarios are intentionally simplistic and intended only to provide working examples of specific topics or actions.&lt;br /&gt;
&lt;br /&gt;
===Using Demo Scenarios===&lt;br /&gt;
You may use the demo scenarios in ISAT for rehearsal or import and drive them on miniSim.  Feel free to copy isat elements from the demo scenario files and modify for use in your own scenarios as needed.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt; '''Known Issues'''&amp;lt;/span&amp;gt;==&lt;br /&gt;
&lt;br /&gt;
Added 2022.07.01 '''Relative Creation''' does not currently work for ADOs on miniSim.  &lt;br /&gt;
&lt;br /&gt;
'''Expression clarification'''&lt;br /&gt;
&lt;br /&gt;
Increment and decrement operators (++, --) are not considered expressions by behaviors.  They should not be flagged as expressions when used in the Value field of a Set Variable action.&lt;br /&gt;
&lt;br /&gt;
Added 2019.11.07 '''File reset issue'''&lt;br /&gt;
&lt;br /&gt;
ISAT has a long-standing bug which can reset your static object options when your scenario file is saved to disk.&lt;br /&gt;
&lt;br /&gt;
'''It is strongly recommended that you use external reference scenario files to avoid this.  '''ISAT does not reset static object options in the xref file.&lt;br /&gt;
&lt;br /&gt;
Added 2021.12.29 Expression Triggers and Values&lt;br /&gt;
&lt;br /&gt;
'''Using Values in Expression Triggers'''&lt;br /&gt;
&lt;br /&gt;
To ensure proper execution of expression triggers, it is recommended that the values used include the desired range by decreasing the lower threshold or increasing the upper threshold '''instead of using the exact value.'''&lt;br /&gt;
&lt;br /&gt;
For example, to process values in a range (7031 - 7040):&lt;br /&gt;
&lt;br /&gt;
[[File:2021-12-29_12h38_09.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note: remember that negative values must be calculated since the expression parser does not parse negative values otherwise.'''&lt;br /&gt;
&lt;br /&gt;
For example, to properly parse a specific transmission gear (Park):&lt;br /&gt;
'''ReadCell('CFS_Auto_Transmission_Mode', 1) = ( 0 - 2 )'''&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Overview &amp;amp; Interface Basics'''==&lt;br /&gt;
This section contains information about ISAT and the ISAT interface.&lt;br /&gt;
&lt;br /&gt;
===What is ISAT?===&lt;br /&gt;
ISAT is the NADS Interactive Scenario Authoring Tool.  ISAT is used to create simulation scenarios:&lt;br /&gt;
&lt;br /&gt;
*2D roadmap '''viewer'''&lt;br /&gt;
*Native file format: SCN (scenario.scn)&lt;br /&gt;
&lt;br /&gt;
'''Requires a roadmap (BLI)'''&lt;br /&gt;
&lt;br /&gt;
===ISAT is NOT:===&lt;br /&gt;
ISAT is &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''not an object editor'''&amp;lt;/span&amp;gt; for creating or modifying 3D model objects, signs or roads.&lt;br /&gt;
&lt;br /&gt;
=='''miniSim Scenario Components Overview*'''==&lt;br /&gt;
The following diagram illustrates the context of scenario authoring to provide an overview of related components.&lt;br /&gt;
[[File:miniSim_scenario_compnents.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
*See the NADS miniSim user guide for miniSim simulator architecture details&lt;br /&gt;
&lt;br /&gt;
TBC hyperlink to miniSim user guide &amp;amp; page ref&lt;br /&gt;
&lt;br /&gt;
==='''What is a Scenario?'''===&lt;br /&gt;
'''A scenario defines everything that happens to the driver during a simulation.'''&lt;br /&gt;
&lt;br /&gt;
Uses '''Actions''' and '''events''' to control the scenario; i.e., familiarization or restart drive, hazard detection &amp;amp; recognition or obstacle avoidance.&lt;br /&gt;
&lt;br /&gt;
*Coupled to a roadmap (BLI)&lt;br /&gt;
*Scenario behaviors (responsible for executing scenarios) run at 30Hz&lt;br /&gt;
&lt;br /&gt;
==='''Anatomy of a Scenario'''===&lt;br /&gt;
Scenarios typically have an initialization period followed by one or more events.  A final event is the last event to occur before simulation is terminated.&lt;br /&gt;
&lt;br /&gt;
[[File:anatomy_of_a_scenario.png|center|400px]]&lt;br /&gt;
&lt;br /&gt;
Scenario events may contain one or more actions.&lt;br /&gt;
&lt;br /&gt;
====Scenario files are '''text files'''====&lt;br /&gt;
*Can be edited by a text editor&lt;br /&gt;
*Portions of a scenario file can be generated programmatically:&lt;br /&gt;
**ISAT ISC&lt;br /&gt;
**Python&lt;br /&gt;
**Shell script&lt;br /&gt;
&lt;br /&gt;
[[File:scenario_as_text.png|center|640px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows the same scenario in (left to right) ISAT, Emacs and Notepad++ text editors&lt;br /&gt;
&lt;br /&gt;
====Scenario Text File====&lt;br /&gt;
Typically you can borrow elements from other scenario files by copying elements from one scenario and pasting them into another using a text editor or ISAT.&lt;br /&gt;
*'''If editing text, &amp;lt;u&amp;gt;always&amp;lt;/u&amp;gt; check your edits in ISAT!'''&lt;br /&gt;
*Copy/Paste - delete paths from elements when the BLI is different between your source &amp;amp; destination BLI files.  The following scenario elements contain paths:&lt;br /&gt;
::ADO (with a path specified)&lt;br /&gt;
:: Any roadpad trigger (roadpad, Time to Arrival, Follow)&lt;br /&gt;
&lt;br /&gt;
'''NOTE: A Traffic Source is not a portable element but it can be re-created in ISAT or integrated into a new scenario by copying the element from the source scenario then using a text editor to paste it into the destination scenario'''&lt;br /&gt;
&lt;br /&gt;
'''How can I find information in multiple files easily?'''&lt;br /&gt;
&lt;br /&gt;
Text files are easy to examine in a command (shell) window.&lt;br /&gt;
&lt;br /&gt;
Example '''search for time trigger in all scenario files''':&lt;br /&gt;
&amp;gt;'''grep TimeTrigger *.scn''' | grep ISAT | grep Name &amp;lt;Enter&amp;gt;&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger2&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger3&amp;quot;''&lt;br /&gt;
::''ISAT-Samples-Avoid.scn:          Name &amp;quot;TimeTrigger1&amp;quot;''&lt;br /&gt;
&lt;br /&gt;
===How to know what to look for in the scenario text file?===&lt;br /&gt;
If you know what to look for in a scenario GREP can help you locate files containing that element or text quickly.&lt;br /&gt;
&lt;br /&gt;
What if you don't know what to look for?  How do you find something when you don't have any idea what to look for?&lt;br /&gt;
&lt;br /&gt;
*Create a new scenario&lt;br /&gt;
*Create the scenario element you need or are looking for:&lt;br /&gt;
::ADO, Trigger/Coordinator&lt;br /&gt;
::Give the element a unique name that you can search for in the text file&lt;br /&gt;
*Save the file, then edit the file in a text editor&lt;br /&gt;
::Find the element name to see element syntax and parameters&lt;br /&gt;
&lt;br /&gt;
TBC: Insert demonstration to find an expression trigger that relates to the speed of the ownship&lt;br /&gt;
&lt;br /&gt;
=='''What is a Scenario Event?'''==&lt;br /&gt;
A scenario event is made from one or more ''actions'' created to present '''situational information''' to the external driver (research participant, trainee or simulation viewer) in some logical sequence;&lt;br /&gt;
::force a vehicle to change speed&lt;br /&gt;
::force a vehicle to brake, change lanes or turn&lt;br /&gt;
::create or destroy scenario elements&lt;br /&gt;
Or:&lt;br /&gt;
::change scenario elements:&lt;br /&gt;
:::initialize variables&lt;br /&gt;
:::change traffic signal state&lt;br /&gt;
:::etc.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Scenario Events'''===&lt;br /&gt;
*When the external driver approaches a specified location, cause oncoming traffic to veer into the drivers' lane to force a driver response&lt;br /&gt;
*As the external driver approaches a specified location, control ambient traffic to expose a vehicle stopped in the drivers' lane&lt;br /&gt;
*When the Time to Arrival (to a specified location) is 4 seconds, change the traffic signal to yellow and activate traffic stopped at the intersection (aka red light runner)&lt;br /&gt;
&lt;br /&gt;
==='''What is an Action?'''===&lt;br /&gt;
Actions are specific commands that happen intentionally during a simulation:&lt;br /&gt;
*Time, situational, calculation or location based&lt;br /&gt;
*Caused by the external driver or some other action, hardware configuration or calculation&lt;br /&gt;
::can create or delete objects, including other scenario elements&lt;br /&gt;
[[File:action_overview.png|400px||border|caption]]&lt;br /&gt;
&lt;br /&gt;
Typically actions are linked with other actions to create a '''scenario event''' as shown in the figure above.&lt;br /&gt;
&lt;br /&gt;
==='''Typical Actions'''===&lt;br /&gt;
*Activate a scenario element&lt;br /&gt;
*Calculate something:&lt;br /&gt;
::-Time to arrival (TTA)&lt;br /&gt;
::-Time to collision (TTC)&lt;br /&gt;
::-headway&lt;br /&gt;
*Check state of simulator or driver&lt;br /&gt;
*Create something (any scenario element)&lt;br /&gt;
*Destroy a scenario element&lt;br /&gt;
*End simulation (terminates the current drive)&lt;br /&gt;
*Play a sound&lt;br /&gt;
*Set a variable&lt;br /&gt;
*Set ADO vehicle speed ('''not''' the external driver)&lt;br /&gt;
&lt;br /&gt;
==='''Adding an action to a trigger'''===&lt;br /&gt;
&lt;br /&gt;
The following example uses a Time Trigger; remember that '''all triggers share the same actions'''.&lt;br /&gt;
&lt;br /&gt;
To add an action to a trigger you can double-click on the trigger, navigate to the '''Actions''' panel, and click on New to create a new action.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_23.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The possible actions are listed under the '''Action Type''' drop-down menu.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h47_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions are arranged in a 'stack' and are processed from top to bottom.  If you use multiple actions you should enable the '''sequential flag''' to ensure each action is executed in sequence.  Without the sequential flag, actions will be processed as fast as the simulator behaviors can execute.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-11-30_12h52_58.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Actions may be re-ordered in the stack using the '''arrows''' located near the action stack list.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Modes of Operation'''==&lt;br /&gt;
[[File:ISAT_modes_of_operation.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Edit&lt;br /&gt;
*Rehearsal&lt;br /&gt;
*DAQ playback&lt;br /&gt;
*Monitor '''Currently not available'''&lt;br /&gt;
&lt;br /&gt;
==='''Edit &amp;amp; Rehearsal Modes'''===&lt;br /&gt;
&lt;br /&gt;
*Edit - this is where scenario authors will spend the most time.&lt;br /&gt;
::Creation or modification of scenario&lt;br /&gt;
::Link to or import portions of other scenario elements&lt;br /&gt;
&lt;br /&gt;
[[File:mode_edit.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Rehearsal&lt;br /&gt;
::Debug &amp;amp; test scenario&lt;br /&gt;
::Simulates scenario using Behaviors and Vehicle Dynamics&lt;br /&gt;
::Displays error messages from behaviors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:mode_rehearsal.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Rehearsal mode &amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;simulates &amp;lt;/span&amp;gt;the external driver;&lt;br /&gt;
your simulation may not respond as expected:&lt;br /&gt;
::i.e., if the driver was instructed to 'remain on the right lane', the simulated ownship may not stay in the desired lane&lt;br /&gt;
::Some control of the simulated ownship is possible in ISAT using the Rehearsal Mode &amp;gt;&amp;gt; Advanced Options panel&lt;br /&gt;
::speed, lane changes&lt;br /&gt;
&lt;br /&gt;
==='''Playback Mode'''===&lt;br /&gt;
*Playback mode will play back a DAQ file from a miniSim drive&lt;br /&gt;
*Can search for specific conditions; i.e. CFS_Brake_Pedal_Force &amp;gt; 0.1&lt;br /&gt;
*Display data streams&lt;br /&gt;
*Graph collected data (limited to single cells)&lt;br /&gt;
*Record a video file of the playback&lt;br /&gt;
&lt;br /&gt;
[[File:mode_playback.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''miniSim Scenario Components'''===&lt;br /&gt;
&lt;br /&gt;
The following diagram shows an overview of scenario related components of the NADS miniSim and how these components work together.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_scenario_components_wDAQ.png|400px]]&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Workspace'''==&lt;br /&gt;
ISAT uses standard Windows[TM] graphical user interface conventions such as floating windows/panels/dialogs and dockable widgets.&lt;br /&gt;
&lt;br /&gt;
The primary region where the road network and placed scenario elements are shown is known as the workspace.  In the default layout, menus are located across the top of the interface.  A region of icons is located beneath the menu region.  Additional ISAT widgets may be positioned along the right or left edges of the interface.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_workspace_general.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In cases where ISAT needs to place an element, notice the cursor changes to an ''insert element cursor'' when you select from menus or icons.&lt;br /&gt;
&lt;br /&gt;
The menu and icon widgets require a LMB to access and place into the workspace.    For the ISAT elements widget, LMB and '''drag''' the element into the workspace.&lt;br /&gt;
&lt;br /&gt;
====ISAT Workspace Status Bar====&lt;br /&gt;
The status bar contains useful information to the scenario author:&lt;br /&gt;
*position (continuously reports location of the cursor)&lt;br /&gt;
[[File:isat_status_bar_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
When configured, the status bar can also report:&lt;br /&gt;
*Name of scenario elements&lt;br /&gt;
*Roadway information:&lt;br /&gt;
:: road name&lt;br /&gt;
::default speed limit&lt;br /&gt;
::surface material code for location under the cursor&lt;br /&gt;
&lt;br /&gt;
====Status Bar Settings====&lt;br /&gt;
The status bar settings can be accessed by choosing Edit &amp;gt;&amp;gt; Preferences &amp;gt;&amp;gt;Status Bar Settings.  Use the existing codes to configure the status bar to display the desired information.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_user_prefs_status_bar_settings.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====ISAT Iconography====&lt;br /&gt;
ISAT provides graphic hints for triggers placed in scenario that can be useful when editing or maintaining scenarios.&lt;br /&gt;
&lt;br /&gt;
The general format is a border enclosing miniature icons of the trigger and first action contained in that trigger.  Additional information representing one or many actions is also shown.&lt;br /&gt;
&lt;br /&gt;
[[File:hints1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT will list all trigger actions when a trigger is selected, but these hints provide a way to quickly identify what actions have been authored.&lt;br /&gt;
&lt;br /&gt;
[[File:hint2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*A Roadpad trigger, one action: '''Traffic Light Action'''&lt;br /&gt;
*B Roadpad trigger, multiple actions, first action is '''Remove Element'''&lt;br /&gt;
*C Roadpad trigger, multiple actions, first action is '''Set Dial'''&lt;br /&gt;
*D Roadpad trigger, constrained to road (lane), no actions - this is an empty trigger&lt;br /&gt;
*E Roadpad trigger, multiple actions, first action is '''Log Data'''&lt;br /&gt;
*F Global Time Trigger, single action: '''Set Dial'''&lt;br /&gt;
&lt;br /&gt;
[[File:handle.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The element handle is the red dot visible in most of the triggers.&lt;br /&gt;
The handle can be dragged into position, and the trigger will follow the handle&lt;br /&gt;
&lt;br /&gt;
Drag the trigger off the handle to offset it's location from the handle&lt;br /&gt;
&lt;br /&gt;
==='''Measuring Distance in ISAT'''===&lt;br /&gt;
To measure between two locations in ISAT:&lt;br /&gt;
*measurement is a linear measurement&lt;br /&gt;
Press &amp;amp; hold Ctrl and Shift keys, RMB on roadmap/BLI&lt;br /&gt;
Position cursor over any other location&lt;br /&gt;
&lt;br /&gt;
The measurement will update dynamically to reflect the distance from the cursor to the original 'pinned' location.&lt;br /&gt;
&lt;br /&gt;
TBC link to video example&lt;br /&gt;
&lt;br /&gt;
=='''Scenario Authoring &amp;amp; miniSim Architecture Overview'''==&lt;br /&gt;
This section contains scenario authoring documentation.&lt;br /&gt;
&lt;br /&gt;
=='''ISAT Elements'''==&lt;br /&gt;
:ISAT objects consist of two main types: the objects that can be inserted using ISAT, and the objects already present in a roadmap/BLI.&lt;br /&gt;
&lt;br /&gt;
[[File:object_types_isat.png|400px]]&lt;br /&gt;
&lt;br /&gt;
1. Objects placed in ISAT&lt;br /&gt;
:These are objects defined in the Scenario Object Library (SOL2) and can be placed onto a roadmap by the scenario author:&lt;br /&gt;
::*ADO&lt;br /&gt;
::*DDO&lt;br /&gt;
::*DDDO&lt;br /&gt;
::*Static Object&lt;br /&gt;
::*Virtual Object*&lt;br /&gt;
::*Trigger/Coordinator&lt;br /&gt;
::*Traffic Source&lt;br /&gt;
&lt;br /&gt;
:'''NOTE:''' Virtual objects are defined in the scenario, not in the SOL2.&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
2.  Scenario world objects&lt;br /&gt;
:These are objects that exist in the roadmap and have not been added by the scenario author.  These objects may be either authorable (can be changed by the scenario author) or not (the object cannot be selected or changed in ISAT).&lt;br /&gt;
::*Traffic Lights&lt;br /&gt;
:::Traffic lights are embedded into intersections for traffic control purposes.&lt;br /&gt;
::The SOL2 contains a traffic light object that can be placed in ISAT; this is '''not''' a traffic light that controls traffic.  It is a static object that only looks like a traffic light and can be controlled like any other static object.&lt;br /&gt;
::NOTE: There can be only one traffic light assigned to an intersection path.  In some cases, i.e. on approach to a toll booth, multiple signals may be required visually.&lt;br /&gt;
&lt;br /&gt;
==='''ADO Scenario Object'''===&lt;br /&gt;
*Vehicles that '''use vehicle dynamics''' and are AI controlled&lt;br /&gt;
:Exceeding vehicle dynamics capability can cause issues&lt;br /&gt;
::i.e., if ADO '''must''' exceed 10g's, the operation will likely fail&lt;br /&gt;
::failure may cause ADO to disappear or be planted into the ground or fly into the air and freeze&lt;br /&gt;
*ADOs are 'aware' of other simulation entities&lt;br /&gt;
:ADOs will attempt to change lanes to go around slow moving objects if this functionality is not disabled by the scenario author&lt;br /&gt;
:ADOs may halt if they cannot move around a slow moving object or change lanes&lt;br /&gt;
*The scenario author sets default ADO behaviors; i.e.:&lt;br /&gt;
:initial velocity&lt;br /&gt;
:turn signals&lt;br /&gt;
:headlights&lt;br /&gt;
:lane changes, etc.&lt;br /&gt;
*RMB on ADO to specify path&lt;br /&gt;
TBC insert RMB ADO menu graphic&lt;br /&gt;
*Actions to modify ADO behavior&lt;br /&gt;
:Set Dial&lt;br /&gt;
:Set Button&lt;br /&gt;
::instruct the ADO to maintain distance relative to the driver&lt;br /&gt;
:::maintain gap&lt;br /&gt;
::cause the ADO to do something specific; i.e.:&lt;br /&gt;
:::enable brake light&lt;br /&gt;
:::accelerate or slow or stop&lt;br /&gt;
:::change lanes&lt;br /&gt;
&lt;br /&gt;
==='''DDO Scenario Object'''===&lt;br /&gt;
*DDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
*DDOs have two modes of operation:&lt;br /&gt;
#Follow a path using kinematics&lt;br /&gt;
#Free motion object&lt;br /&gt;
::OpenDynamicsEngine library is used to model free motion objects dynamic behavior&lt;br /&gt;
:::bouncing/rolling ball&lt;br /&gt;
:::object falling off back of truck&lt;br /&gt;
&lt;br /&gt;
==='''DDDO Scenario Object'''===&lt;br /&gt;
*Includes a target that affects DDO velocity/position along path&lt;br /&gt;
*DDDOs are 'dumb' objects&lt;br /&gt;
::Do '''not''' obey traffic rules&lt;br /&gt;
::DDDOs follow a path blindly; also known as 'path follower'&lt;br /&gt;
::Are not 'aware' of other entities within the simulation&lt;br /&gt;
::No collision detection between the DDO and other scenario elements&lt;br /&gt;
===Free Motion Object===&lt;br /&gt;
A free motion object is a non-vehicle DDO that:&lt;br /&gt;
*need to have realistic motion&lt;br /&gt;
*needs to interact with the environment&lt;br /&gt;
:simple collision detection&lt;br /&gt;
:objects that fall off vehicles&lt;br /&gt;
*static objects on road that start moving&lt;br /&gt;
:rolling ball (i.e., on a hill or slope)&lt;br /&gt;
'''NOTE:''' vehicle dynamics do not apply to Free Motion Objects&lt;br /&gt;
&lt;br /&gt;
Free motion objects have 3 modes:&lt;br /&gt;
#coupled&lt;br /&gt;
#relative trajectory&lt;br /&gt;
#free motion&lt;br /&gt;
:may require a mesh file to define a portion of the road surface to react against&lt;br /&gt;
&lt;br /&gt;
Change object mode using Set Dial &amp;gt;&amp;gt; DDO &amp;gt;&amp;gt; Change Mode action&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic&lt;br /&gt;
&lt;br /&gt;
==='''Static Object'''===&lt;br /&gt;
*Model objects are defined within the SOL2&lt;br /&gt;
:vehicles, animals, obstacles, signs&lt;br /&gt;
:any model object defined in the SOL2 as a static object&lt;br /&gt;
*May contain multiple visual representations&lt;br /&gt;
:options may be set as initial condition of the object, or changed during simulation using Set Dial action &amp;gt;&amp;gt; StaticObjManager&lt;br /&gt;
*Can use ADO models as static objects (as defined in the SOL2)&lt;br /&gt;
*Not intended to move (change position) during simulation&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Signal'''===&lt;br /&gt;
Traffic signals are objects with special operation and function; they are coupled to intersections and routes of travel through intersections to control traffic flow similiar to their function in the real world.  Traffic signals are part of the source tile model and may not be re-positioned or physically altered by scenario except for their visual signal state appearance; i.e., red, green or yellow signals.&lt;br /&gt;
&lt;br /&gt;
To control intersection traffic signals use Edit &amp;gt;&amp;gt; Traffic Light ManagerTraffic signals use a Signal State Table (SST) to control which signal states are active and when.  Each intersection with traffic signals will have an associated SST.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_manager.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows an intersection in the workspace to the right, and the traffic signal state table for that intersection on the left.  At this point additional states (for signal condition) can be added by clicking the '''Add state button'''.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_table2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows two states defined for the intersection, represented by the two columns of state condition.&lt;br /&gt;
&lt;br /&gt;
Continue adding states until the desired signal cycle has been defined.  Generally this consists of red, green or yellow states.&lt;br /&gt;
&lt;br /&gt;
NOTE: There is currently no way to automatically author a series of traffic light signals&lt;br /&gt;
&lt;br /&gt;
To author traffic signal lights in sequence or on a route, the scenario author has to manage the signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_state_duration.png|400px]]&lt;br /&gt;
&lt;br /&gt;
To edit the signal state duration RMB on the duration field header and choosing '''Edit state duration''' on the context menu.  Enter the desired value then click OK.&lt;br /&gt;
&lt;br /&gt;
====Traffic Signal Types====&lt;br /&gt;
The ISAT status bar reports Traffic Signal Type name.  There are two signal types:&lt;br /&gt;
#Standard signal - IDs may have no identifying information&lt;br /&gt;
:Valid signal states: Red, Yellow, Green, Flashing Red, Flashing Yellow, OFF&lt;br /&gt;
#Extended signal - The extended traffic signal type was developed to support dedicated traffic paths through intersections.  These signals can be identified by the type code in their name:&lt;br /&gt;
:NORM (normal)&lt;br /&gt;
:: uses standard signal states&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name_normal.png|400px]]&lt;br /&gt;
:LTRN (Left Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Left Green, Left Yellow, etc.&lt;br /&gt;
:RTRN (Right Turn)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Right Green, Right Yellow, etc.&lt;br /&gt;
:STRT (Straight)&lt;br /&gt;
:: signal states used should reflect signal type; i.e., Straight Green, Straight Yellow, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_extended_type_name.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===Changing Signal States in Scenario===&lt;br /&gt;
Traffic signals are controlled in scenario by using a Traffic Signal Action to change the SST.  &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Traffic Signal Action works by changing the SST, '''not by changing the traffic signal.'''  This is a subtle but important difference. &lt;br /&gt;
&lt;br /&gt;
Setting a signal to an undefined state effectively does nothing to the traffic signal.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram shows a fully populated SST, with one signal row highlighted in red, and one state column highlighted in green.  The associated intersection corridor is highlighted, showing the signal controls a dedicated left turn.&lt;br /&gt;
&lt;br /&gt;
During simulation, the initial signal state is defined by the left column.  As the simulation proceeds, the signal state changes according to the duration states defined across the state table, proceeding left to right and then wrapping around to the beginning after the last defined state.  Each traffic signal appearance changes according to the configuration of the SST.&lt;br /&gt;
&lt;br /&gt;
As a driver approaches this intersection, assume the signal state is in the column left of the highlighted column ('''R'''ed), and the desired action is to change the signal to green.&lt;br /&gt;
&lt;br /&gt;
The action used to change a traffic signal state is the '''Traffic Light Action'''.&lt;br /&gt;
Using a traffic light action requires the specification of a signal state, the traffic signal to affect, and a duration.&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_signal_action1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram the scenario author has specified the desired state as '''Green''' as shown in the action dialog.&lt;br /&gt;
&lt;br /&gt;
However, referring back to the previous state table diagram, there is no such state present in the SST.  That means this particular action will fail, and the traffic signal will not change as the driver approaches the intersection - because the action does not create a new signal state, it works by advancing the state table condition (column) to the specified condition.  If the condition is not present in the SST then nothing will appear to happen.&lt;br /&gt;
&lt;br /&gt;
In this example, the action should be edited to use the correct signal state '''Left Turn Green''', which is present in the SST.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Accessing the traffic signal action after it has been created can be problematic!'''&lt;br /&gt;
:i.e., ISAT frequently crashes when accessing the traffic signal trigger actions&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Solution:''' Isolate traffic signal action into some other trigger, i.e. in a Time Trigger that '''only''' contains the traffic signal action.  If you have to make minor edits the scenario file can be edited as text in a text editor. Major edits may require re-creating the action from scratch, if ISAT cannot access the action.&lt;br /&gt;
&lt;br /&gt;
[[File:known_issue_traffic_light_action_workaround.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Change A Traffic Light Using Scenario Action====&lt;br /&gt;
To change a traffic signal, use the Set Dial &amp;gt;&amp;gt; Traffic Light action.&lt;br /&gt;
'''NOTE:''' The Traffic Light action does not '''change the signal directly.'''  The action simply advances the traffic light state in the signal state table.&lt;br /&gt;
*If the specified target condition is not present in the signal state table, the traffic signal state does not change&lt;br /&gt;
&lt;br /&gt;
[[File:traffic_light_state_table.png|400px]]&lt;br /&gt;
&lt;br /&gt;
This diagram shows a fully populated traffic signal state change for an intersection.&lt;br /&gt;
&lt;br /&gt;
*Static object traffic lights&lt;br /&gt;
:These are objects, not true traffic signals and so they are not controlled with the Traffic Light manager.&lt;br /&gt;
&lt;br /&gt;
==='''Traffic Source'''===&lt;br /&gt;
A traffic source is a coordinator used to create traffic at specific locations in the road map (unlike the Traffic Manager).  This is useful for creating ambient traffic.  Traffic Sources creates ADOs or DDOs at random or user-specified intervals.&lt;br /&gt;
&lt;br /&gt;
Elements created using a Traffic Source will be created at the locations specified by the user.  If traffic is specified at multiple locations the actual location for each creation will be determined randomly during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using the Relative Creation flag on ADOs created by the traffic source will not create traffic at the specified location on the map, but use the information in the Relative Creation fields to populate traffic in the scene during simulation.&lt;br /&gt;
&lt;br /&gt;
This method allows for more flexibility but care must be taken not to create so many ADOs that miniSim is unable to make frame rate.  Too many ADOs will cause the scene to jump and 'jitter' and it will feel slower than normal.&lt;br /&gt;
&lt;br /&gt;
==='''Virtual Object'''===&lt;br /&gt;
This object has a visual representation but does not exist as a 3D model in the simulated world:&lt;br /&gt;
:*2D shape&lt;br /&gt;
:*Overlay on screen of project into the scene&lt;br /&gt;
:*supports animation (change of unique states)&lt;br /&gt;
&lt;br /&gt;
A virtual object can be one of several predefined shapes or a '''custom image''' file:&lt;br /&gt;
:*Virtual objects will draw '''over''' scene elements during simulation&lt;br /&gt;
:*Virtual objects do not render accurately during ISAT scenario rehearsal&lt;br /&gt;
&lt;br /&gt;
===Custom (icon) file virtual objects===&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_custom_icon_file.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Some versions of MiniSim_2.3 do not support custom virtual objects.  For those installs, if you require this type of functionality, a workaround exists in the form of a 2D model that can be customized (i.e, sprite).&lt;br /&gt;
&lt;br /&gt;
Virtual objects may be customized using graphics files (texture images) to display any desired custom element.  This typically requires the use of a bitmap graphic.  Various file formats are supported: JPG, BMP, PNG.  It is possible some types of these formats may not work - in those cases, try an alternate format.&lt;br /&gt;
&lt;br /&gt;
If image transparency is required and the custom icon does not display during simulation, please email dsri-minisim@uiowa.edu with a description of the issue, your scenario and custom virtual object image file.&lt;br /&gt;
&lt;br /&gt;
Custom icon files must be located within the Nads MiniSim path for resources - at NadsMiniSim_x.x\data\visuals\Models\ModelTx.&lt;br /&gt;
&lt;br /&gt;
===Standard virtual object shapes===&lt;br /&gt;
The virtual object shapes include:&lt;br /&gt;
# Circle&lt;br /&gt;
# Triangle&lt;br /&gt;
# Octagon&lt;br /&gt;
# Star&lt;br /&gt;
# Diamond&lt;br /&gt;
# Icon &amp;lt;- this is for custom virtual object graphics&lt;br /&gt;
# Rectangle&lt;br /&gt;
# Hexagon&lt;br /&gt;
&lt;br /&gt;
The virtual object fill and border color and transparency can be set in the virtual object properties dialog panel.&lt;br /&gt;
&lt;br /&gt;
[[File:virtual_object_std_shape.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Virtual Object Workaround====&lt;br /&gt;
&lt;br /&gt;
There is a scenario authoring method that can be used to emulate virtual object functionality through the use of a DDO that is coupled to any dynamic scene element, including the External Driver.  One model has been created to support this method called &amp;quot;sprite&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The sprite model is a 2D object present in the scene, and can therefore be occluded by other scene elements during simulation.&lt;br /&gt;
&lt;br /&gt;
[[File:trafsign_sprite.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
The sprite model is designed as a flat plane that continuously faces the viewer.  It contains different sized planes and can be customized through textures.&lt;br /&gt;
&lt;br /&gt;
When authoring your scenario, configure the sprite object to Off unless it should be visible at scenario start.  During the scenario you can control the sprite appearance with a setSwitch action.&lt;br /&gt;
&lt;br /&gt;
[[File:sprite_setSwitch_action_021121.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The who to effect should use the name of the DDO placed in your scenario.  The switch name will be s_sprite as shown above.  Any valid option can be used.  An invalid option (greater than 30) will disable the sprite the same as selecting the OFF option.&lt;br /&gt;
&lt;br /&gt;
==='''Coordinators'''===&lt;br /&gt;
Coordinators are used to control scenario elements:&lt;br /&gt;
*'''Intersection manager'''&lt;br /&gt;
:Controls traffic within intersections&lt;br /&gt;
*'''Traffic Light Manager'''&lt;br /&gt;
:Controls traffic light signal state (signal appearance)&lt;br /&gt;
*'''Triggers'''&lt;br /&gt;
:Traffic Light trigger&lt;br /&gt;
:Expression trigger&lt;br /&gt;
:Roadpad trigger&lt;br /&gt;
:Time to arrival trigger&lt;br /&gt;
:Follow trigger&lt;br /&gt;
&lt;br /&gt;
==='''Triggers'''===&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#FF0000&amp;quot;&amp;gt;'''All trigger types share the same Action types'''&amp;lt;/span&amp;gt;&lt;br /&gt;
*IF Then conditional&lt;br /&gt;
*Predicate: i.e., the activating agent&lt;br /&gt;
:If predicate is TRUE, then do Action(s)&lt;br /&gt;
*Road related triggers are categorized by predicate type&lt;br /&gt;
:Named element&lt;br /&gt;
:Road (lane)&lt;br /&gt;
:Nth vehicle on path only&lt;br /&gt;
&lt;br /&gt;
'''What trigger is appropriate?'''&lt;br /&gt;
To determine which trigger is most appropriate, consider the task you are trying to accomplish.&lt;br /&gt;
&lt;br /&gt;
'''Global Time Trigger'''&lt;br /&gt;
[[File:isat_time_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some point in time.&lt;br /&gt;
&lt;br /&gt;
Time triggers are also useful as &amp;quot;placeholder triggers&amp;quot;; used to apply persistent actions to multiple elements with unique settings for each element.  Normally a persistent action is the last action possible in a trigger since the persistent action fires continuously.  Putting persistent actions into a time trigger allows the scenario author to continue an action stack in the parent trigger if necessary.&lt;br /&gt;
&lt;br /&gt;
Time triggers can be used as a 'stopwatch' - elapsed time, such as ending a drive after 3 minutes by setting the trigger to fire using an Activation Delay of 180s (GTT &amp;gt;&amp;gt; General).&lt;br /&gt;
&lt;br /&gt;
Often used as a placeholder for actions such as initializing variables, displaying text messages to the screen using Set Visual Display Text actions, etc.&lt;br /&gt;
&lt;br /&gt;
'''Note''': A time trigger can have global elapsed time and activation delay of 0, which causes the action stack in the time trigger to activate when that trigger is created.&lt;br /&gt;
&lt;br /&gt;
'''Roadpad Trigger'''&lt;br /&gt;
[[File:isat_roadpad_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen at some location in the drive that does not require event timing to be comparable for all participant drivers.  For cases where event timing must be comparable among all participant drivers use the Time to Arrival trigger (TTA) instead of a roadpad trigger.&lt;br /&gt;
&lt;br /&gt;
'''Time to Arrival Trigger'''&lt;br /&gt;
[[File:isat_time_to_arrival_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen relative to some point in the drive, and also ensure all study drivers experience the same event timing irrespective of driver style (conservative, slow vs. aggressive, fast).  Time to arrival (TTA) trigger uses a time calculation from the trigger pad activation to a target location specified in the trigger.&lt;br /&gt;
&lt;br /&gt;
'''Traffic Light Trigger'''&lt;br /&gt;
[[File:isat_traffic_light_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger activates actions when the specified traffic signal state is reached.  For example, if the desired action is to create a DDO pedestrian to step into traffic when the traffic signal is yellow, then the Traffic Signal Manager must be used to author the appropriate signal states for the traffic signal.&lt;br /&gt;
&lt;br /&gt;
Typically some other trigger is used to control the traffic signal (ie, to change the signal to Yellow on approach).  It is therefore perfectly valid to put the actions within this other trigger rather than relying on the traffic light trigger.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Once a traffic light action has been authored, ISAT may be prone to crashing when accessing that trigger.  This problem can be avoided by creating a time trigger and isolating the traffic light action there, allowing the parent trigger to be modified without crashing.  Adjustments can be made to the traffic light action time trigger in a text editor, or recreated if it becomes necessary to make adjustments and ISAT continues to crash when trying to make edits.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The traffic light action does not change the traffic signal state, and it requires a valid state sequence to exist in the signal timing table (Edit &amp;gt;&amp;gt; Traffic Light Manager).  The traffic light action '''will not create a signal state''' that does not already exist in the signal timing table.&lt;br /&gt;
&lt;br /&gt;
'''Expression Trigger''' &lt;br /&gt;
[[File:isat_expression_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something must be monitored, evaluated or calculated such as checking a variable or cell value, velocity of the driver or the state of simulator hardware (steering wheel angle, brake or accelerator pedal position) or distance from the driver to some other object in the scenario.&lt;br /&gt;
&lt;br /&gt;
Multiple expressions can be used within the same expression trigger.  In those cases, all expressions must evaluate to True in order for the action stack to execute unless using an '''OR''' operator.&lt;br /&gt;
&lt;br /&gt;
Use the '''OR''' operator - the pipe character &amp;quot;|&amp;quot; if you want to activate the action stack if '''any''' of the expressions evaluates to True.&lt;br /&gt;
&lt;br /&gt;
In the following example, the trigger checks for TrialNumber = 1 and FirstButtonPress variables, and then checks if Aux Button 1 or 0 was pressed:&lt;br /&gt;
&lt;br /&gt;
'''ReadVar('TrialNumber') = 1.0 &amp;amp; ReadVar('FirstButtonPress') = 1.0 &amp;amp; (ReadCell('Auxiliary_Buttons', 0) &amp;gt; 0 | ReadCell('Auxiliary_Buttons',1) &amp;gt; 0)'''&lt;br /&gt;
 &lt;br /&gt;
'''Note''': Expressions can also be embedded into some other triggers, most notably the Set Dial &amp;gt;&amp;gt; ADO &amp;gt;&amp;gt; Forced Velocity action often used in Roadpad triggers.&lt;br /&gt;
&lt;br /&gt;
'''Follow Trigger'''&lt;br /&gt;
[[File:isat_follow_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
Use this trigger when something has to happen based on one ADO position relative to another scenario element (including the XD).  The follow trigger requires a leader and a follower to be specified; when this condition is met, the trigger action stack activates.&lt;br /&gt;
&lt;br /&gt;
'''Note''': Both leader and follower must be positioned on the follow trigger roadpad to satisfy the follow parameters.&lt;br /&gt;
&lt;br /&gt;
'''Geometric Position'''&lt;br /&gt;
[[File:isat_geometric_position_trigger.png|150px]]&lt;br /&gt;
&lt;br /&gt;
This trigger is most useful to perform actions for off-road actors such as walkers.  The trigger predicate is limited to Name or Type and requires a geometric position to be defined.&lt;br /&gt;
&lt;br /&gt;
A more limited version of the geometric position trigger can be implemented with a Global Time Trigger that contains a Creation Radius.  Placing the creation radius defines the area where the trigger may be activate.&lt;br /&gt;
&lt;br /&gt;
===Trigger Operation===&lt;br /&gt;
One shot&lt;br /&gt;
:Fire trigger once only&lt;br /&gt;
&lt;br /&gt;
Debounce&lt;br /&gt;
:Debounce is the interval between multiple trigger activations when predicate is TRUE and actions have completed execution&lt;br /&gt;
:Controls the 'rate of fire' of the trigger&lt;br /&gt;
:Debounce prevents unintentional repeat execution of the trigger actions&lt;br /&gt;
&lt;br /&gt;
For example, a time trigger with a debounce of 0.96 seconds and actions that take 1 frame to complete will fire once per second.&lt;br /&gt;
&lt;br /&gt;
===Trigger General Settings===&lt;br /&gt;
*Lifetime&lt;br /&gt;
:How long the trigger is alive (active)&lt;br /&gt;
:Default 0 means trigger lives unless the trigger is deleted&lt;br /&gt;
*Activation Delay&lt;br /&gt;
:Time after the trigger is created when it becomes active&lt;br /&gt;
*Creation Radius&lt;br /&gt;
:How close the external driver has to be to the trigger before it is created&lt;br /&gt;
:Delete trigger when the external driver is no longer within the distance specified&lt;br /&gt;
*One shot&lt;br /&gt;
:Fire the trigger only once&lt;br /&gt;
*Priority&lt;br /&gt;
:Used with interdependent triggers to establish trigger priority:&lt;br /&gt;
::i.e., a roadpad trigger sets a variable, and an expression trigger reacts to that variable.  The roadpad trigger should have a 'high priority', the expression trigger should be set to 'Low priority'.&lt;br /&gt;
*Debounce&lt;br /&gt;
:Time after firing the predicate remains inactive&lt;br /&gt;
&lt;br /&gt;
===Roadpad Trigger===&lt;br /&gt;
A roadpad trigger (RPT) is defined on a segment of road or intersection by a path called a road pad (or pad).&lt;br /&gt;
&lt;br /&gt;
The roadpad pad defines a geographic region where the trigger can be activated.&lt;br /&gt;
&lt;br /&gt;
The trigger activates when the trigger predicate steps on the pad '''anywhere on the pad'''.  It is '''not''' necessary for the trigger predicate to step on the pad at the beginning (start) of the pad.&lt;br /&gt;
&lt;br /&gt;
*By Name Set&lt;br /&gt;
:ISAT will prompt for existing scenario model object/s&lt;br /&gt;
*By Type Set&lt;br /&gt;
:Type of object; i.e., External driver, ADO, etc.&lt;br /&gt;
*By Road&lt;br /&gt;
:Filter trigger to a specific lane; i.e., predicate has to be on the roadpad '''and''' in target lane&lt;br /&gt;
:Can be used to implement conditional trigger activation&lt;br /&gt;
::An audio message to change lanes can be suppressed if the driver is already in the correct lane&lt;br /&gt;
&lt;br /&gt;
TBC insert Road Trigger dialog graphic&lt;br /&gt;
&lt;br /&gt;
===Time to Arrival Trigger===&lt;br /&gt;
The Time to Arrival Trigger (TTA) is similar to the Roadpad Trigger and adds a timer&lt;br /&gt;
:Time to reach target point&lt;br /&gt;
:Can use an expression to calculate time&lt;br /&gt;
:Arrival time can take acceleration into account&lt;br /&gt;
&lt;br /&gt;
Target point&lt;br /&gt;
:The location used to measure vehicle distance&lt;br /&gt;
&lt;br /&gt;
Time to Arrival Trigger example&lt;br /&gt;
&lt;br /&gt;
[[File:TTA.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A is the target point used in the trigger calculations&lt;br /&gt;
&lt;br /&gt;
===Follow Trigger===&lt;br /&gt;
The Follow Trigger (FT) is another type of roadpad trigger&lt;br /&gt;
*Trigger activates when vehicle A is Distance X from vehicle B&lt;br /&gt;
:Distance can be in feet or time&lt;br /&gt;
:Both vehicles must be on roadpad;&lt;br /&gt;
::very long roadpads are common with this trigger&lt;br /&gt;
:Vehicles can include the External Driver&lt;br /&gt;
:Expression takes priority over time field&lt;br /&gt;
&lt;br /&gt;
TBC FT graphics&lt;br /&gt;
&lt;br /&gt;
===Additional Triggers===&lt;br /&gt;
&lt;br /&gt;
[[File:other_triggers.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*Global Time (GTT)&lt;br /&gt;
:Elapsed time from start of scenario&lt;br /&gt;
:To use GTT as a timer, add an Activation Delay set to the desired elapsed time&lt;br /&gt;
&lt;br /&gt;
=== Expression Trigger===&lt;br /&gt;
&lt;br /&gt;
Execute actions if input expression evaluates to TRUE; the expression is specified on the trigger Predicate tab.&lt;br /&gt;
&lt;br /&gt;
====Syntax====&lt;br /&gt;
Expression triggers support a simple language syntax with operators and functions.&lt;br /&gt;
The syntax is infix notation; i.e. a + b, not a b +.&lt;br /&gt;
&lt;br /&gt;
Note: It is not generally possible to embed one function call inside another:&lt;br /&gt;
cos(sin(x)) is therefore an invalid expression.  ISAT will report invalid expressions during rehearsal of a scenario.  Invalid expressions are not supported and will not operate as written during simulation.&lt;br /&gt;
&lt;br /&gt;
'''Exception:''' Currently it is possible to use the square root function with GetObjDistPow2 as in the following example:&lt;br /&gt;
&lt;br /&gt;
sqrt(GetObjDistPow2('Target_Object_Name'))&lt;br /&gt;
&lt;br /&gt;
Multiple expressions may be combined using the logical AND (&amp;amp;) or OR (&amp;quot;|&amp;quot; pipe character).&lt;br /&gt;
&lt;br /&gt;
Exp1 '''&amp;amp;''' Exp2, Exp1 '''&amp;amp;''' Exp2 '''&amp;amp;''' Exp ''N''&lt;br /&gt;
&lt;br /&gt;
All expressions must be true for the trigger to evaluate to TRUE and execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Exp1 '''|''' Exp2&lt;br /&gt;
One of the expressions must be true for the trigger to execute the action stack.&lt;br /&gt;
&lt;br /&gt;
Negative values are not directly supported by the expression parser.  To use a negative value, it must be a calculated value such as the following:&lt;br /&gt;
&lt;br /&gt;
'''ReadCell('CFS_Steering_Wheel_Angle',0)&amp;lt;(0-5.0)'''&lt;br /&gt;
&lt;br /&gt;
==== Operators ====&lt;br /&gt;
Operators are used to create expressions.&lt;br /&gt;
&lt;br /&gt;
'''String'''&lt;br /&gt;
:Used within quotes as a string literal; i.e., 'some string'&lt;br /&gt;
&lt;br /&gt;
Grouping&lt;br /&gt;
:Parentheses group elements together; i.e.,&lt;br /&gt;
:'''()'''; (a), (a + b)&lt;br /&gt;
&lt;br /&gt;
Multiplication&lt;br /&gt;
:'''*'''; a * b&lt;br /&gt;
&lt;br /&gt;
Division&lt;br /&gt;
:'''/'''; a / b&lt;br /&gt;
&lt;br /&gt;
Addition&lt;br /&gt;
:'''+'''; a + b&lt;br /&gt;
&lt;br /&gt;
Subtraction&lt;br /&gt;
:'''-'''; a - b&lt;br /&gt;
&lt;br /&gt;
Note: negative values must be expressed with a subtraction operation:&lt;br /&gt;
(0 - 5), not -5 (invalid)&lt;br /&gt;
&lt;br /&gt;
Greater than&lt;br /&gt;
:'''&amp;gt;'''; a &amp;gt; b&lt;br /&gt;
&lt;br /&gt;
Less than&lt;br /&gt;
:'''&amp;lt;'''; a &amp;lt; b&lt;br /&gt;
&lt;br /&gt;
Logical And&lt;br /&gt;
:'''&amp;amp;'''; a &amp;amp; b&lt;br /&gt;
&lt;br /&gt;
Both a and b, otherwise returns 0 (FALSE)&lt;br /&gt;
&lt;br /&gt;
Logical Or&lt;br /&gt;
:'''|'''; a | b&lt;br /&gt;
&lt;br /&gt;
a or b returns 1 (TRUE)&lt;br /&gt;
&lt;br /&gt;
====Expression Functions ====&lt;br /&gt;
Functions are used with operators to create expressions.&lt;br /&gt;
&lt;br /&gt;
Function: '''sin'''&lt;br /&gt;
:sin -sine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:sin(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The sin() function returns the sine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The sin() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''cos'''&lt;br /&gt;
:cos –cosine&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:cos(float x)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The cos() function returns the cosine of x, where x is given in radians.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:The cos() function returns a value between -1 and 1.  &lt;br /&gt;
&lt;br /&gt;
Function: '''ReadCell'''&lt;br /&gt;
:ReadCell()&lt;br /&gt;
&lt;br /&gt;
Read a Cell value.&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:ReadCell(string Name, int Cell Array index)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:ReadCell returns the value of a given cell (a cell is the current instance of a variable that will be maybe written to a daq file).&lt;br /&gt;
&lt;br /&gt;
Index specifies a 0 based index into the array. Since most cells are single element arrays, a value 0 indicates the first element.&lt;br /&gt;
&lt;br /&gt;
Cells valid for the ReadCell function are defined within the cell collect file NadsMiniSim.cec located in the miniSim_x.x\data folder.&lt;br /&gt;
The ReadCell function operates on shared memory during simulation, it does not read cell data from the DAQ file.&lt;br /&gt;
&lt;br /&gt;
Cells that are defined may be written to the DAQ; the collect file specifies which cells are saved into the DAQ and what frequency to use for the write operation.&lt;br /&gt;
The NadsMiniSimCollect.general.txt file is located in the miniSim_x.x\data folder.&lt;br /&gt;
&lt;br /&gt;
Available Cells:&lt;br /&gt;
Any cell that has been defined in the .cec file.  For example:&lt;br /&gt;
&lt;br /&gt;
:'''LogStreams''': Array of 5 floats. Logstreams are a set of values the scenario author can write to through “write to logstream” actions.&lt;br /&gt;
:'''AccelPedalPos''': Single Value. The current position of the accelerator pedal &lt;br /&gt;
:'''BrakePedalForce''': Single Value. The current force on the brake pedal in pounds &lt;br /&gt;
:'''SteeringWheelAngle''': Single Value. The current rotation of the steering wheel&lt;br /&gt;
:'''CruiseControl''': Single Value. The current cruise control position. (values are cab/platform specific)&lt;br /&gt;
:'''TurnSignal''': Single Value. The current position of the turn signal (values are cab/platform specific) &lt;br /&gt;
:'''OvVel''': Single Value. The participant’s current speed in miles per hour&lt;br /&gt;
:'''OvLaneDev''': Single Value. The participant’s lane deviation in feet. &lt;br /&gt;
:'''OvHeadwayToLeadVeh''': Single Value. The distance in feet to the first vehicle in front of the participant. -1 if no vehicle can be found.&lt;br /&gt;
:'''OvTtcToLeadVeh''': Single Value. The time to collision to the first vehicle ahead of the participant. &lt;br /&gt;
:'''Horn''': Single Value. The state of the horn (values are cab/platform specific)&lt;br /&gt;
:'''DynObj_Vel''': Array of 20 floats. The speed of a given dynamic object. Dynamic Objects are sorted in terms of distance to driver.&lt;br /&gt;
:'''OvVelLocal''': Single Value. The participant’s current speed in miles per hour, using the value local to scenario control&lt;br /&gt;
&lt;br /&gt;
For a complete list of cells and array elements please see the miniSim data dictionary spreadsheet.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Returns the value of the specified cell.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
	ReadCell(‘LogStreams’,5)  &amp;gt;  3&lt;br /&gt;
&lt;br /&gt;
Function: '''CellEquals'''&lt;br /&gt;
:Cell Equals, array element, value to compare&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:CellEquals(string name, int index, float value)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:The Cell Equals function is similar to the ReadCell function, except it adds an additional value to compare against the cell value.&lt;br /&gt;
&lt;br /&gt;
Like ReadCell, name specifies the name of the cell, index specifies the cell array index (use 0 for single value cells).&lt;br /&gt;
&lt;br /&gt;
Available Cells: &lt;br /&gt;
:Any cell that is defined in the .cec file.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Units: 1 or 0&lt;br /&gt;
:1 if the cell value is equal to the passed in comparison value; otherwise 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjDistPow2'''&lt;br /&gt;
:Get object distance squared&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjDistPow2(string name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjDistPow2 returns the distance squared between the external driver and the dynamic object specified by ‘name’.&lt;br /&gt;
&lt;br /&gt;
Distance squared is used to avoid having to perform an expensive square root calculation every frame.&lt;br /&gt;
&lt;br /&gt;
If the specified object cannot be found, a value larger than 100 million is returned.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Feet; Distance in feet measured from the eye position of the driver to the CG (centroid) of the dynamic object specified.&lt;br /&gt;
&lt;br /&gt;
A very large number is returned if the specified object cannot be found (larger than 100 million)&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjDistPow2(‘OncomingCar1’)  &amp;lt;  2500&lt;br /&gt;
&lt;br /&gt;
'''Note:''' To get an actual distance, multiply by the square root (sqrt())&lt;br /&gt;
: sqrt(GetObjDistPow2('Target_Obj'))&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjTtcToOv'''&lt;br /&gt;
:Get Object Time To Collision to Own Vehicle&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjTtcToOv(string object name)&lt;br /&gt;
&lt;br /&gt;
Description &lt;br /&gt;
:GetObjTtcToOv gets the time to collision from the dynamic object specified by the name parameter, to the own vehicle.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Seconds&lt;br /&gt;
:Time (seconds) to collision from the own vehicle to the dynamic object specified by the name parameter.&lt;br /&gt;
:0 is returned if the object specified cannot be found.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Function: '''GetObjVel'''&lt;br /&gt;
:Get Object Velocity &lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:GetObjVel(string object name)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:GetObjVel gets the velocity in meters per second of the first dynamic object with the name specified by the ‘name’ argument.&lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:Unit: Meters per second&lt;br /&gt;
:The speed of the specified dynamic object; 0 if no object is found&lt;br /&gt;
&lt;br /&gt;
'''Note:''' Multiply by 2.23694 for miles per hour.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:GetObjVel(‘PullOutVeh’) &amp;gt; 15.4&lt;br /&gt;
&lt;br /&gt;
Function: '''Rand'''&lt;br /&gt;
:Random&lt;br /&gt;
&lt;br /&gt;
Syntax&lt;br /&gt;
:Rand(int value)&lt;br /&gt;
:Rand(string name)&lt;br /&gt;
:Rand(string name, string type, double parameter, double parameter)&lt;br /&gt;
:Rand(string name, string type, int parameter, int parameter)&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
:Rand returns a random value specified by the name of the generator, the type of distribution and its parameters.&lt;br /&gt;
&lt;br /&gt;
If the user does not specify the name of the generator and only specifies a number as the only parameter, the Rand function will use a default random number generator to produce random numbers.&lt;br /&gt;
&lt;br /&gt;
If the user only enters the name of a user created random number generator, the random number generator will produce a value between 0 and 1.&lt;br /&gt;
If a name of generator is supplied that has not been created, the Rand function will display an error message in the ISAT debug window and return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
The rand function supports multiple types of distributions that can be used to generate a random number.&lt;br /&gt;
&lt;br /&gt;
Types of Distributions:&lt;br /&gt;
:normal: Normal Distribution(mean, standard deviation). The normal distribution generates random numbers near the mean with a specific standard deviation.&lt;br /&gt;
:gamma: Gamma Distribution(alpha, beta). The gamma distribution generates a random value that models waiting times for the Poisson process.&lt;br /&gt;
:uniformInt: Uniform Integer Distribution(min, max). The uniform integer distribution generates a random integer number between the lower and upper bounds. &lt;br /&gt;
:uniform: Uniform Real Distribution(min, max). The uniform real distribution generates a random floating point number between the lower and upper bounds.&lt;br /&gt;
&lt;br /&gt;
The values stated in the parenthesis above are the parameters for each distribution in order. If the incorrect number of parameters are entered or if they are entered incorrectly, the debug window in ISAT will display an error message and the rand function will return 0 (during scenario rehearsal).&lt;br /&gt;
&lt;br /&gt;
If the distribution is entered incorrectly, the debug window will also display an error message. &lt;br /&gt;
&lt;br /&gt;
Return Value&lt;br /&gt;
:A random value from 0 to 1 if the type of distribution is not specified.&lt;br /&gt;
&lt;br /&gt;
If the type of distribution is specified, returns a random value determined from the type of distribution and the given parameters.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
:Rand(‘myRandGenerator’,’uniformInt’,1,10)&lt;br /&gt;
:This example returns a random integer value from 1 to 10.&lt;br /&gt;
&lt;br /&gt;
Rand(5) or Rand(‘myRandGenerator’)&lt;br /&gt;
:These examples return a random value between 0 and 1.&lt;br /&gt;
&lt;br /&gt;
Function: '''sqrt'''&lt;br /&gt;
Square root&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:sqrt(parameter)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
: return the square root of the specified parameter.&lt;br /&gt;
: parameter can be another function, such as GetObjDistPow2()&lt;br /&gt;
&lt;br /&gt;
Function: '''ReadVar'''&lt;br /&gt;
:Read a variable&lt;br /&gt;
&lt;br /&gt;
Syntax:&lt;br /&gt;
:ReadVar(string Name)&lt;br /&gt;
&lt;br /&gt;
Return Value:&lt;br /&gt;
:Returns the string value of variable specified in &amp;lt;variable_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Traffic Light Trigger (TLT)===&lt;br /&gt;
Execute actions when target traffic signal is set to target state;&lt;br /&gt;
when the traffic signal state matches the target state, execute actions.&lt;br /&gt;
&lt;br /&gt;
=='''Audio Components'''==&lt;br /&gt;
The components of the Audio sub-system includes configuration and data files installed into the NadsMiniSim_x.xx\data\sound\DefaultCabSound\Instructs folder.&lt;br /&gt;
&lt;br /&gt;
[[File:audio_components.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The audio engine  contains multiple channels and has a theoretical limit of 512 simultaneous sounds.&lt;br /&gt;
&lt;br /&gt;
NOTE: Not all .wav files are compatible with the Audio Engine.&lt;br /&gt;
&lt;br /&gt;
=Scenario World Objects=&lt;br /&gt;
Scenario world objects are defined in the tile model source. They are not added by the scenario author since they are objects already present in the roadmap/BLI.  &lt;br /&gt;
&lt;br /&gt;
[[File:object_types_world.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Typically, but not always, these objects can be authored in ISAT. However, some scenario world objects have no options - these cannot be selected in ISAT; therefore such objects cannot be authored.  &lt;br /&gt;
&lt;br /&gt;
Removal of world objects requires editing the source tile model using a 3D application.  In some cases an alternate tile model is available identical to the original but without objects.&lt;br /&gt;
&lt;br /&gt;
Contact NADS if removal of a world object is needed.&lt;br /&gt;
&lt;br /&gt;
Other scenario world objects, such as Traffic Signals, are specialized function objects that can be authored.  Traffic signals are authored using the Traffic Light Manager: Edit &amp;gt;&amp;gt; Traffic Light Manager.&lt;br /&gt;
&lt;br /&gt;
=Troubleshooting Scenario Objects That Reset=&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Scenario World Objects ==&lt;br /&gt;
Scenario world objects are already present when you create a new scenario - they are not added by the scenario author.  These objects may be visible in miniSim but not in ISAT, or they may be visible in ISAT and seem to be controllable, but the objects 'reset' to their defaults when viewed on miniSim.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_47.png|700px]]&lt;br /&gt;
&lt;br /&gt;
The objects which 'reset' are a symptom of settings in the TMT that are not configured to allow scenario authoring of objects.&lt;br /&gt;
&lt;br /&gt;
[[File:2019-10-23_16h18_52.png|700px]]&lt;br /&gt;
&lt;br /&gt;
When objects appear to 'reset' or if you can edit an object in ISAT but don't see your changes in miniSim, correct the problem by resolving controllability in the TMT settings: https://www.screencast.com/t/ZH5Dh178.&lt;br /&gt;
&lt;br /&gt;
=Scenario Coordinate Types=&lt;br /&gt;
There are two types of coordinates used in scenarios.  The first is roadway coordinates.  These coordinates are contextual (tied to a specific road or intersection and position) and are used for ADO objects and roadpad paths in general.&lt;br /&gt;
&lt;br /&gt;
After a roadway coordinate has been generated, it is not updated unless the scenario author makes changes to the start, end or location of the entire path or pad.&lt;br /&gt;
&lt;br /&gt;
Roadway coordinate are the reason it is not possible to change a roadmap using the TMT and expect a previously authored scenario to work on the altered roadmap.  If the length or location of a road changes, the path/pad will update to the extent possible.  &lt;br /&gt;
&lt;br /&gt;
If the road has been eliminated and no longer exists in the roadmap/BLI, ISAT will report an error and not open the scenario file.&lt;br /&gt;
&lt;br /&gt;
A. Field breakdown:&lt;br /&gt;
RoadPos keyword &amp;lt;name of road:lane:position on road:path length&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_-6600_4620:0:5737.06:0.00&amp;quot; &lt;br /&gt;
  Path &amp;quot;R:r1_-6600_4620:0[5736.06:5873.83]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
[[File:isat_coordinate_types.png|400px]]&lt;br /&gt;
&lt;br /&gt;
B.&lt;br /&gt;
Name &amp;quot;VirtObj&amp;quot; &lt;br /&gt;
  Option 2 &lt;br /&gt;
  Position -6.8375599E+002 5.6331237E+003 0.0000000E+000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second type is world coordinates, which are Cartesian coordinates with X increasing to the right, Y increasing forward, and Z increasing up.&lt;br /&gt;
&lt;br /&gt;
='''Scenario Authoring'''=&lt;br /&gt;
Scenario authoring is the creation, editing and testing of everything that happens during a simulation drive.&lt;br /&gt;
&lt;br /&gt;
==Cell Operations: Best Practice==&lt;br /&gt;
Reading and writing to cells is a computationally expensive process.   Best practice is to centralize all the reads/write to one place so that it’s only done once per cell.&lt;br /&gt;
&lt;br /&gt;
Once a cell is read, the value is copied to a variable and only the variable is used throughout all the triggers that need it.&lt;br /&gt;
&lt;br /&gt;
The same process applies to writing to cells.  Use of variables can reduce the Cell Operations overhead greatly.&lt;br /&gt;
&lt;br /&gt;
==Before You Begin==&lt;br /&gt;
Before beginning a scenario, it is necessary to understand the following requirements:&lt;br /&gt;
&lt;br /&gt;
=== Drive Requirements===&lt;br /&gt;
How long is the drive?&lt;br /&gt;
What type of roadway?&lt;br /&gt;
Are there any specialized road elements (intersections, interchanges, freeway ramps)?&lt;br /&gt;
Are there any environmental requirements (should the simulation replicate a real world location, or is a generic environment acceptable)?&lt;br /&gt;
Is there a particular roadway configuration that is needed (long straight rural road vs. typical urban environment with intersections, signals, etc)?&lt;br /&gt;
&lt;br /&gt;
=== Traffic Requirements ===&lt;br /&gt;
What types of traffic will be needed?&lt;br /&gt;
Will ambient traffic interact with the external driver?&lt;br /&gt;
What types of interaction will be required (traffic cloud, lead vehicle, follow vehicle)?&lt;br /&gt;
&lt;br /&gt;
=== Events ===&lt;br /&gt;
The purpose of an event is to present a situation to the external driver.  In order for the simulation to produce meaningful data, it is critical that events unfold for each driver in a comparable way.  Therefore, each event must be designed with this repeatability in mind.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' one of the most variable scenario elements is the driving style of each external driver: how conservative or aggressive they drive, velocities throughout the scenario, how comfortable the driver is travelling with simulated vehicles, etc. &lt;br /&gt;
&lt;br /&gt;
Repeatability often includes static elements (each driver encounters scenario elements in the same location) or in cases where the driver performance is taken into account, accommodation of the driver dynamic (velocity, lane position) through the use of time to arrival triggers (TTA) or follow triggers.  A TTA trigger will fire based on time to a target location - thus a driver travelling at 45mph or a driver travelling at 55mph can both experience the same action relative to that target location, irrespective of the different driver velocities.&lt;br /&gt;
&lt;br /&gt;
==Beginning A Scenario==&lt;br /&gt;
All scenarios designed to be driven require a start location - the place where the driver will be located when the simulated drive begins.&lt;br /&gt;
&lt;br /&gt;
To insert a start location into a scenario:&lt;br /&gt;
&lt;br /&gt;
:Insert &amp;gt;&amp;gt; External Driver &amp;gt;&amp;gt; LMB on road, intersection or terrain object&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_position.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' scenarios that only contain data and are not intended to be driven - for example, signs or traffic that are used as external reference files do not require a start location, since that will be defined within the parent scenario.&lt;br /&gt;
&lt;br /&gt;
==Initial Conditions==&lt;br /&gt;
Initial conditions define how the simulated scene is configured: will the drive occur during daylight or night time conditions?  Will the ownship (external driver vehicle) have headlights enabled?  What type of vehicle will it be?  Will there be objects or traffic visible to the driver?&lt;br /&gt;
These form the initial conditions of the simulation experience.  Additional initial conditions would include initialization of variables or establishing networked communication as needed by the scenario.&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_miniSim.png|400px]]&lt;br /&gt;
&lt;br /&gt;
By default ISAT sets the initial condition '''Time of Day''' to 12:00 noon.  The time of day is controlled from the Initial Conditions dialog:&lt;br /&gt;
&lt;br /&gt;
Edit &amp;gt;&amp;gt; Initial Conditions&lt;br /&gt;
&lt;br /&gt;
[[File:isat_initial_conditions_scenario.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring: Actions==&lt;br /&gt;
Actions are the scenario elements that make things happen during simulation.  Actions do specific things, like display a text message on screen for the driver, create a scenario element, change the velocity of simulated traffic, change a traffic signal, etc.&lt;br /&gt;
&lt;br /&gt;
[[File:trigger_action_panels.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows the action panel for left to right: an expression trigger, a roadpad trigger and a global time trigger showing different panels based on the actions present in each trigger.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:'''Actions can be created, edited or removed from the '''Actions panel''' of '''any trigger'''.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The Actions panel changes based on the action type created.&lt;br /&gt;
When multiple actions have been defined, control the sequence of actions by changing the action order in the list using the up or down arrows next to the list.&lt;br /&gt;
&lt;br /&gt;
[[File:action_panel_overview.png|400px]]&lt;br /&gt;
&lt;br /&gt;
If multiple actions need to happen in a specific order, set the order using the arrows and then flag the action list as '''sequential'''.  This instructs behaviors to process the actions in the list order.&lt;br /&gt;
&lt;br /&gt;
Using a delay for any action will pause processing of the '''following actions'''; the action happens first, then the delay is applied.&lt;br /&gt;
&lt;br /&gt;
===Scenario Authoring: Action Types===&lt;br /&gt;
There are two types of actions:&lt;br /&gt;
# Instantaneous - the action takes up to one frame to complete, i.e.:&lt;br /&gt;
:set target velocity&lt;br /&gt;
:write to cell&lt;br /&gt;
# Persistent&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;'''*Persistent actions do not end'''&amp;lt;/span&amp;gt;, or take multiple frames to complete:&lt;br /&gt;
:Forced lane offset&lt;br /&gt;
:Forced velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
&lt;br /&gt;
==='''Actions'''===&lt;br /&gt;
*The &amp;quot;Who to Affect&amp;quot; field defines what is affected by the action&lt;br /&gt;
:Instigator set: who activated the trigger&lt;br /&gt;
:Name: one or more named elements&lt;br /&gt;
:Type: Apply changes to all objects matching the specified type&lt;br /&gt;
:Relative: Position relative to the trigger location&lt;br /&gt;
&lt;br /&gt;
*Sequential&lt;br /&gt;
:Actions to execute sequentially, one after the other&lt;br /&gt;
:Specify delay between actions&lt;br /&gt;
:: Action executes, then delay&lt;br /&gt;
&lt;br /&gt;
:Some actions are persistent and never &amp;quot;finish&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Scenario example: display text &amp;amp; roadpad trigger to stop the drive===&lt;br /&gt;
This scenario is very simple and contains a global time trigger (GTT) that tells the driver what to do.  After the driver travels along the roadway, a roadpad trigger (RPT) is used to tell the driver to stop driving.  The same RPT also creates an expression trigger to terminate the drive.&lt;br /&gt;
&lt;br /&gt;
TBC example scenario file&lt;br /&gt;
&lt;br /&gt;
Because the external driver is not under control except by instructions, it's possible they might ignore the halt message and continue driving.  A second failsafe RPT then terminates the drive.&lt;br /&gt;
&lt;br /&gt;
==='''Actions: Button vs. Dial'''===&lt;br /&gt;
*Dial changes a setting&lt;br /&gt;
*Button: always runs in a single frame&lt;br /&gt;
:-&amp;quot;immediate&amp;quot; change.  Typically buttons have less control than a '''Set Dial''' action&lt;br /&gt;
&lt;br /&gt;
==='''ADO Actions'''===&lt;br /&gt;
[[File:ado_action_types_button_vs_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''DDO Actions'''===&lt;br /&gt;
[[File:ddo_set_dial.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==='''External Driver Actions'''===&lt;br /&gt;
External driver behavior can be influenced by reinforcing scenario actions through audible speeding alerts, on-screen text instructions and messages or audio instructions.&lt;br /&gt;
&lt;br /&gt;
Driving behavior can be influenced with situational elements&lt;br /&gt;
:Car in the drivers blind spot&lt;br /&gt;
:Lead vehicle&lt;br /&gt;
:Aggressive following vehicle&lt;br /&gt;
:Temporary lane closure&lt;br /&gt;
:lane specific instructions&lt;br /&gt;
&lt;br /&gt;
Scenarios should '''not rely on specific driver actions to be successful'''&lt;br /&gt;
:to the extent possible; sometimes you do need the driver to respond/behave in a controlled manner.&lt;br /&gt;
:A work zone blocking one lane typically will require a roadpad placed upstream from the work zone to shift traffic into the correct lane&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Controlling driver actions should be an experimental design consideration.&lt;br /&gt;
&lt;br /&gt;
==='''Special Actions'''===&lt;br /&gt;
These actions need special handling:&lt;br /&gt;
*Reset or &amp;quot;toggle&amp;quot;:&lt;br /&gt;
:Audio&lt;br /&gt;
:Display Text&lt;br /&gt;
&lt;br /&gt;
:'''Ado'''&lt;br /&gt;
::Audio State&lt;br /&gt;
::Forced Velocity&lt;br /&gt;
::Maintain Gap&lt;br /&gt;
::Visual State&lt;br /&gt;
&lt;br /&gt;
*If using these persistent actions, place them at the '''end''' of an action sequence (because no action following these will execute):&lt;br /&gt;
:Forced Lane Offset&lt;br /&gt;
:Forced Velocity&lt;br /&gt;
:Maintain Gap&lt;br /&gt;
:Visual State&lt;br /&gt;
&lt;br /&gt;
*Note: If the Visual State action contains a duration then it will be handled as a normal action, with subsequent actions firing after it.  However, if there is no duration supplied with the Visual State action it behaves like a persistent action, and nothing following it in the Action stack will ever fire.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:multiple_simultaneous_actions.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The diagram above shows how one parent trigger can be used to create multiple simultaneous triggers&lt;br /&gt;
&lt;br /&gt;
*How to activate multiple unique force velocity (FV) or maintain gap (MG) actions:&lt;br /&gt;
#create the needed triggers from a general parent trigger, 1 per action&lt;br /&gt;
#put common actions into the parent trigger&lt;br /&gt;
::reset FV&lt;br /&gt;
::reset MG&lt;br /&gt;
&lt;br /&gt;
==Scenario Authoring How To==&lt;br /&gt;
This section contains simple examples for various typical scenario situations.&lt;br /&gt;
&lt;br /&gt;
===How do I specify an event?===&lt;br /&gt;
First, determine which method is best for you - the default measures (limited measures, 20 events max) or logstreams (all simulation data, no event maximum).&lt;br /&gt;
&lt;br /&gt;
Regardless of method, you specify an event by identifying areas of significance in the drive and marking them so the data within the event region can be processed.  Any trigger combination that can specify event start and event end may be used.&lt;br /&gt;
&lt;br /&gt;
[[File:2022-07-01_11h21_52.png|400px]]&lt;br /&gt;
&lt;br /&gt;
===How to know Which Coordinator or Trigger I need?===&lt;br /&gt;
The answer to this question lies in the type of information needed for an event:&lt;br /&gt;
&lt;br /&gt;
*Time&lt;br /&gt;
:global time trigger&lt;br /&gt;
:or an expression trigger that calculates time&lt;br /&gt;
*Position or Location&lt;br /&gt;
:roadpad trigger&lt;br /&gt;
::or a time to arrival (TTA) trigger&lt;br /&gt;
::or an expression trigger that calculates distance&lt;br /&gt;
*Calculation&lt;br /&gt;
:Expression trigger&lt;br /&gt;
&lt;br /&gt;
===How to Instruct the External Driver===&lt;br /&gt;
&lt;br /&gt;
Instructions to the external driver can be accomplished  by three main methods:&lt;br /&gt;
# Instruct the driver using experimental protocol (instructional or briefing presentation)&lt;br /&gt;
# Information messages displayed on screen: '''Action: ''set visual display text'' '''&lt;br /&gt;
# Information messages delivered as audio messages: '''Action: ''write to cell &amp;gt; SCC_Audio_Trigger &amp;gt;&amp;lt;audio ID&amp;gt;'' '''&lt;br /&gt;
&lt;br /&gt;
===How to Add Traffic in the Scene ===&lt;br /&gt;
&lt;br /&gt;
Generating traffic will happen in one of 5 ways:&lt;br /&gt;
# Created explicitly by inserting ADO, or copy/paste existing ADOs&lt;br /&gt;
# Created with a script&lt;br /&gt;
# Via a Create action inside a trigger, or placing scripted traffic inside a create action within a trigger&lt;br /&gt;
# From a '''Traffic Source'''*&lt;br /&gt;
# From the '''Traffic Manager'''**&lt;br /&gt;
&lt;br /&gt;
Each of these methods has advantages and disadvantages.&lt;br /&gt;
&lt;br /&gt;
==== Create Explicitly ====&lt;br /&gt;
&lt;br /&gt;
The biggest advantage with this method of traffic creation is the high degree of control the scenario author has over:&lt;br /&gt;
# location of the created ADO&lt;br /&gt;
# Name of the created ADO&lt;br /&gt;
# Travel path of the created ADO&lt;br /&gt;
# Control when each ADO is created within the scene via Settings &amp;gt;&amp;gt; Creation Radius&lt;br /&gt;
&lt;br /&gt;
The disadvantage is that creating a high volume of traffic will take some work with this method.&lt;br /&gt;
&lt;br /&gt;
==== Created with a Script ====&lt;br /&gt;
&lt;br /&gt;
This method combines the advantages of Creating Explicitly with volume.  It is possible to create a large volume of traffic very easily with a script.&lt;br /&gt;
&lt;br /&gt;
Disadvantages of using high volumes of traffic with a script: in the event it becomes necessary for a high degree of control over these ADOs, more is not better because ADOs will adapt to road conditions under their own power, unless the default ADO settings have been modified:&lt;br /&gt;
'''lane changes, including lane changes to accommodate freeway ramps'''&lt;br /&gt;
'''velocity adjustments'''&lt;br /&gt;
&lt;br /&gt;
==== Via a Create action inside a trigger ====&lt;br /&gt;
Combines the advantages of the previous 2 methods with control over when to activate that traffic using a trigger action.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Creating too many ADOs at one point in the drive can cause the miniSim to bog down for a few frames.  If too many ADOs are present and active in the simulation at one time, this can cause the miniSim to drop frames and run sluggishly.  This is highly noticeable and may increase the potential for the External Driver to experience '''simulator sickness.'''&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Source''' ====&lt;br /&gt;
&lt;br /&gt;
Traffic Sources rely on two methods to populate a scene with traffic:&lt;br /&gt;
# location specific, with each ADO created for a traffic source being a 'spawn location' for ADOs, or&lt;br /&gt;
# location agnostic if the ADO has '''relative creation''' enabled, thus being created relative to the object identified.&lt;br /&gt;
&lt;br /&gt;
In addition to being created relative to a scenario element, ADOs are created relative to the specified scenario element:&lt;br /&gt;
# In front of (Longitudinal Distance &amp;gt; 0, where the number is feet offset from the object) , or&lt;br /&gt;
# Behind (Longitudinal Distance &amp;lt; 0, where the number is feet offset from the object).&lt;br /&gt;
&lt;br /&gt;
Advantages: Can easily populate traffic into the simulation.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: It is easy to generate more traffic than the simulation can maintain at 60Hz frame rate, thus introducing frame lag with the resulting scene 'stutter' and the increased risk of simulator sickness.&lt;br /&gt;
&lt;br /&gt;
Also, traffic created from a Traffic Source is generic traffic.  It is not possible to reliably refer to specific ADOs generated from a traffic source except by using Who To Affect &amp;gt;&amp;gt; Relative (versus referring to a named ADO, i.e. Slow_Moving_Lead_Vehicle).  Referring by name to Traffic Source generated ADOs will affect all similarly named ADOs at the same time.&lt;br /&gt;
&lt;br /&gt;
==== From a '''Traffic Manager''' ====&lt;br /&gt;
&lt;br /&gt;
The traffic manager interface is problematic in ISAT versions up to 1.8.5, especially when specifying the set of vehicles to be used for generating traffic.&lt;br /&gt;
&lt;br /&gt;
Advantages: Create generic ambient traffic easily.&lt;br /&gt;
&lt;br /&gt;
Disadvantages: Has the same disadvantages as traffic created via a Traffic Source.  Also getting a traffic set working by specifying the vehicles to be used within the set.  ISAT versions up to 1.8.5 exhibit instability when setting vehicles in ISAT.&lt;br /&gt;
&lt;br /&gt;
Traffic Manager Set workaround: Borrow a working set from an existing scenario or group.  Alternatively use a version of ISAT (1.8.6 +) to create the traffic set.  This can be saved as a scenario or group file, which can then be used with ISAT 1.8.x as long as there is no attempt to adjust the vehicle weights within ISAT.  The scenario or group file can be edited as text in a text editor, but care must be exercised to avoid introducing errors into the file.  ISAT will not read invalid scenario or group files.&lt;br /&gt;
&lt;br /&gt;
Traffic generated by the Traffic Manager is controlled through the use of Input Sets.  An input set is a collection of vehicles and weights used to populate the scene during simulation.  This is how the scenario author can control the vehicle population (type and number), density and creation/deletion distances - these attributes are unique to each set.&lt;br /&gt;
&lt;br /&gt;
Since there is no 'discontinue traffic manager' function, one can be implemented by defining an input set with no traffic (an empty input set).  An appropriate name can make the purpose of the set clear: PauseTraffic, Stop_TM, etc.&lt;br /&gt;
&lt;br /&gt;
==== Sample Traffic Manager Set ====&lt;br /&gt;
This is a sample traffic manager set that can be pasted into a scenario file after the HCSM VehFail section.  Be sure to paste '''after''' the HCSM VehFail end tag ('''&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;''') in your scenario file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' A scenario file may contain only '''one''' Traffic Manager section.&lt;br /&gt;
&lt;br /&gt;
There are two input sets in this example; note how they contain different vehicles and different settings from each other.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;span style=&amp;quot;color:#2a4b8d&amp;quot;&amp;gt;HCSM TrafficManager&lt;br /&gt;
  GroupName &amp;quot;Traffic Manager&amp;quot; &lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;ONE&amp;quot; &lt;br /&gt;
      MinDensity 3.0000000E-002 &lt;br /&gt;
      MaxDensity 7.0000000E-002 &lt;br /&gt;
      MaxObjects 9 &lt;br /&gt;
      CreateDist 2.0000000E+003 &lt;br /&gt;
      DeleteDist 3.0000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.4000000E+003 &lt;br /&gt;
      RunFreq 1.0000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;cargill_semi_peterbilt_blu:2&amp;quot; &amp;quot;cargill_semi_freightliner_red:1&amp;quot; &amp;quot;cargill_semi_peterbilt_yel:3&amp;quot; &amp;quot;DumpTruck_org:3&amp;quot; &amp;quot;semi_peterbilt_yel_Walmart:2&amp;quot; &amp;quot;Cadillac_Escalade:10&amp;quot; &amp;quot;Ford_F150Xcab:15&amp;quot; &amp;quot;Saturn_Vue:10&amp;quot; &amp;quot;FordTaurus:15&amp;quot; &amp;quot;Escape:15&amp;quot; &amp;quot;DumpTruck:2&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM InputSet&lt;br /&gt;
      Name &amp;quot;TWO&amp;quot; &lt;br /&gt;
      MinDensity 1.0000000E-002 &lt;br /&gt;
      MaxDensity 3.0000000E-002 &lt;br /&gt;
      MaxObjects 4 &lt;br /&gt;
      CreateDist 2.5000000E+003 &lt;br /&gt;
      DeleteDist 3.3000000E+003 &lt;br /&gt;
      AbsDeleteDist 3.5000000E+003 &lt;br /&gt;
      RunFreq 1.8000000E+000 &lt;br /&gt;
      SolWeights &amp;quot;Taurus2011:12&amp;quot; &amp;quot;Cadillac_Escalade:16&amp;quot; &amp;quot;Ford_F150Xcab:24&amp;quot; &amp;quot;Saturn_Vue:14&amp;quot; &amp;quot;Escape:6&amp;quot; &amp;quot;Deville:24&amp;quot; &amp;quot;Audi:4&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Managing Traffic Manager Input Sets'''=====&lt;br /&gt;
During simulation, Input sets are controlled by the action '''Use Traffic Manager Set'''.  A set name must be provided for this action to work.&lt;br /&gt;
&lt;br /&gt;
===== Traffic Manager generated Traffic=====&lt;br /&gt;
ADOs will populate the road network around the XD based on the parameters of the Input Set.  Typically traffic is removed from the scene shortly after passing the XD.  This is visible in the rear view mirror.  There is currently no way to adjust this delete distance.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane freeway======&lt;br /&gt;
Traffic will prefer to be in the XD lane, so ADOs created in any other lane will tend to veer into the XD lane.  On a divided highway, traffic is generated moving with the XD.&lt;br /&gt;
&lt;br /&gt;
====== Traffic Manager Traffic on 2 lane road====== &lt;br /&gt;
Traffic is generated in the oncoming lane.  In some cases traffic may be generated then immediately removed in front of the XD.&lt;br /&gt;
&lt;br /&gt;
===How to Control Objects in the Scene during Simulation ===&lt;br /&gt;
&amp;quot;Set and forget&amp;quot; options on simulation entities only require the scenario author to &amp;quot;initialize&amp;quot; the element to a desired setting and then it is left alone during simulation.&lt;br /&gt;
&lt;br /&gt;
Controlling objects dynamically during simulation requires the scenario &amp;quot;talk to&amp;quot; each object with a scenario action.  This section describes how each scenario object type can be controlled during simulation within a scenario.&lt;br /&gt;
&lt;br /&gt;
All models used in ISAT are listed within the Scenario Object Library (sol2).txt files.  Terrain switch names are displayed in the ISAT workspace.&lt;br /&gt;
&lt;br /&gt;
All model switches are listed within the NadsMiniSim_x.x\bin.x64\ModelList.txt file.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' The diligent reader will note discrepancies in model names between the sol2 and ModelList files.  This is because the ModelList file contains actual file names, and the sol2 files define a &amp;quot;name label&amp;quot; for models that may, or may not, be the actual model name.  Objects are linked between the sol2 and ModelList files through the ModelID/CigiID records.  These values will match between sol2 and ModelList files, but IDs are not necessary at this time for scenario authoring purposes.&lt;br /&gt;
&lt;br /&gt;
Complicated object names can be retrieved from the LRI file that was used to build any scenario file; each BLI is preceded by an LRI.  The LRI contains all of the terrain models that will be present in ISAT.  These are typically speed limit signs, traffic signals or other features that may be controllable.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' this file may not be present for the Springfield.bli file.&lt;br /&gt;
&lt;br /&gt;
An alternative is to capture a screenshot of the ISAT workspace with the element name string showing.  By default ISAT reports the name of any objects when the cursor passes over the object, as shown in this example:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-10-27_08h50_14.png|caption =Object Name Screenshot | 400px]]&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ Controlling Scenario Elements During Simulation in Scenario&lt;br /&gt;
!Date&lt;br /&gt;
!Nads miniSim version&lt;br /&gt;
!Object Type&lt;br /&gt;
!Scenario Action&lt;br /&gt;
!Who To Affect&lt;br /&gt;
!Value&lt;br /&gt;
!Notes&lt;br /&gt;
|-&lt;br /&gt;
| Oct. 28, 2021&lt;br /&gt;
|2.3 &lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object (terrain)&lt;br /&gt;
| SetDial &amp;gt; StaticObjManager &amp;gt; Set Option1&lt;br /&gt;
| StaticObjManager&lt;br /&gt;
| switch name : switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Static Object, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Obstacle, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| DDO, multiple options&lt;br /&gt;
| Set Switch&lt;br /&gt;
| Name of element&lt;br /&gt;
| switch option&lt;br /&gt;
| Switch names are listed in bin.x64\ModelList.txt&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| ADO&lt;br /&gt;
| Set Dial &amp;gt; ADO &amp;gt; VisualState&lt;br /&gt;
| Name of element&lt;br /&gt;
| Limited to options present in ISAT&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| Traffic Signal &lt;br /&gt;
| Traffic Light&lt;br /&gt;
| Assign action to element&lt;br /&gt;
| Target state&lt;br /&gt;
| Target state must exist within the Traffic Light Manager intersection timing table for the specified signal&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===How to Control Simulated Vehicles===&lt;br /&gt;
The scenario author can control simulated vehicles by controlling the environment:&lt;br /&gt;
#change a traffic signal to cause an ADO to stop or start at intersections&lt;br /&gt;
#affect other ADOs to cause a target ADO to respond&lt;br /&gt;
# assign a path for the ADO to travel&lt;br /&gt;
&lt;br /&gt;
Direct control:&lt;br /&gt;
*Lane related:&lt;br /&gt;
:Set button &amp;gt; ADO &amp;gt; ChangeLane, Turn, ProjectAndResetLane&lt;br /&gt;
&lt;br /&gt;
*All other controls:&lt;br /&gt;
:Set Dial &amp;gt; ADO &amp;gt; AudioState, ForcedLaneOffset, ForcedVelocity, InhibitLaneChange, LaneChange, MaintainGap, TargetVelocity, VisualState, AudioState&lt;br /&gt;
&lt;br /&gt;
====How to Change ADO Velocity====&lt;br /&gt;
ADO velocity can be changed using the SetDial action:&lt;br /&gt;
:SetDial &amp;gt; ADO &amp;gt;&lt;br /&gt;
&lt;br /&gt;
:ForcedVelocity&lt;br /&gt;
:ForcedVelocity using an expression:&lt;br /&gt;
 # match external driver speed&lt;br /&gt;
 expr  % OvVel(0) % &lt;br /&gt;
 # multiply external driver speed&lt;br /&gt;
 expr  -1 9 %ReadCell('OvVelLocal',1)*1.75  %&lt;br /&gt;
:TargetVelocity&lt;br /&gt;
&lt;br /&gt;
Indirect Control (dependent on other scenario element):&lt;br /&gt;
:MaintainGap&lt;br /&gt;
&lt;br /&gt;
====How to Link ADO Velocity to Something Else====&lt;br /&gt;
ADOs velocity can be linked to other ADOs or the external driver using the MaintainGap (MG) action.&lt;br /&gt;
&lt;br /&gt;
SetDial &amp;gt; ADO &amp;gt; MaintainGap&lt;br /&gt;
&lt;br /&gt;
When using a traffic cloud containing multiple ADOs, each ADO in the cloud needs a unique MG.  IF multiple ADOs have the same MG settings they will attempt to satisfy their parameters and likely oscillate position in a visually obnoxious way.&lt;br /&gt;
&lt;br /&gt;
===How to Author Loop Scenarios===&lt;br /&gt;
A scenario created on a loop road network operates very much like any other scenario, with the exception that it is likely to require tracking the number of times through the loop, or to present scenario events to the external driver depending on each loop context.&lt;br /&gt;
&lt;br /&gt;
[[File:loop_traffic_creation_01.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The simplest method of tracking loops is the use of a loop counter variable.  This variable can be set by the driver &amp;quot;stepping onto&amp;quot; a roadpad trigger or it can be initialized through the use of a timer or expression, with increments managed by a roadpad trigger.  Each time through the loop increases the loop count variable.&lt;br /&gt;
&lt;br /&gt;
Thus it becomes possible to create events for each loop based on the loop counter variable, typically through an expression trigger.&lt;br /&gt;
&lt;br /&gt;
Loop management triggers&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_02.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail one&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_vars_02b.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Loop management trigger detail two&lt;br /&gt;
&lt;br /&gt;
[[File:loop_management_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====Creating Loop Specific Traffic====&lt;br /&gt;
Creating loop traffic is slightly more complicated due to the number of objects to be created and potentially the size of the actual loop.  A small loop is installed with the Nads miniSim as simple_rural1 or simple_rural2.  Each is a loop road network with two signed 3-way intersections.&lt;br /&gt;
&lt;br /&gt;
Loop specific traffic can be created through the use of a variable (i.e., LoopCount) or  within the roadpad trigger that is incrementing the loop count variable.  Both methods will incorporate a '''Create Action''' that creates the required elements.&lt;br /&gt;
&lt;br /&gt;
===How to Change Environment Settings===&lt;br /&gt;
The scenario author can define global or localized environment conditions.&lt;br /&gt;
&lt;br /&gt;
1. Insert &amp;gt;&amp;gt; Environment Conditions &amp;gt;&amp;gt; &amp;lt;chosen condition&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Define a region where the environment condition is active:&lt;br /&gt;
:LMB to define polygon points&lt;br /&gt;
:RMB to exit point entry mode&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Choosing an environment condition&lt;br /&gt;
&lt;br /&gt;
[[File:env_condition2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Environment region defined and parameters panel shows available options&lt;br /&gt;
&lt;br /&gt;
NOTE: The environment condition boundary is a discrete threshold.  Condition A will be on one side of the threshold.  Immediately after crossing the boundary, condition B will be displayed.&lt;br /&gt;
&lt;br /&gt;
===How to Fade an Environment Condition===&lt;br /&gt;
To fade gradually between two conditions requires the use of an expression that continually monitors the desired condition and sets a few variables based on the results.&lt;br /&gt;
&lt;br /&gt;
Examining the demo scenario is the best way to look 'under the hood' to see exact command syntax and values to be used.&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Note: this approach has been used for fog and visibility.  It is unknown how it might work with non-visibility conditions such as precipitation and wind.  &lt;br /&gt;
&lt;br /&gt;
*From the scenario demo_visibility_transition.scn&lt;br /&gt;
&lt;br /&gt;
[[File:env_fade_schematic.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''Note:''' although the example above uses an environment condition boundary, '''it is possible''' to omit the defined region, retaining all commands and the scenario will still function.  However, without the environment region, it becomes more difficult to determine where conditions are different from the standard settings.&lt;br /&gt;
&lt;br /&gt;
===How to Control a Cab Instrument Panel icon===&lt;br /&gt;
In order to control the instrument panel, there are 2 requirements:&lt;br /&gt;
The specific cab used for the scenario&lt;br /&gt;
The specific control (switch) to be manipulated&lt;br /&gt;
The action for addressing the instrument panel is '''ChangeCabSetting'''&lt;br /&gt;
&lt;br /&gt;
Instrument panel models are located in NadsMiniSim_x.x\data\Visuals\Instruments&lt;br /&gt;
These files are in OpenFlight format.  Any 3D editor capable of reading or importing OpenFlight can be used to review these files.  NADS uses the Presagis product Creator[tm].&lt;br /&gt;
&lt;br /&gt;
An alternative method to inventory switches is to use the the '''buildscl.exe''' tool.  To run the tool, open a CMD window to the IP folder location above, then run the command:&lt;br /&gt;
buildscl &amp;lt;input_file.flt&amp;gt;&amp;lt;Enter&amp;gt;.&lt;br /&gt;
&amp;lt;input_file.flt&amp;gt; is the name of the file to process, without the '&amp;lt;&amp;gt;' characters.&lt;br /&gt;
&amp;lt;Enter&amp;gt; means to press the Enter key,&lt;br /&gt;
&lt;br /&gt;
The result will be in a new file ending with .scl.  This is a text file, and can be opened in a text editor or you can use the shell utility '''more''' to view the file contents:&lt;br /&gt;
&lt;br /&gt;
more &amp;lt;input_file.scl&amp;gt; | grep switch&amp;lt;Enter&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example for the malibu cab is shown below.                                    .&lt;br /&gt;
&lt;br /&gt;
switch s_LowWasher 0&lt;br /&gt;
switch s_Cruise 1&lt;br /&gt;
switch s_LeftTurn 2&lt;br /&gt;
switch s_RightTurn 3&lt;br /&gt;
switch s_FwdCollisionWarn 4&lt;br /&gt;
switch s_BlindSpotWarn 5&lt;br /&gt;
switch s_LaneDeviationWarn 6&lt;br /&gt;
switch s_RearCollisionWarn 7&lt;br /&gt;
switch s_HighBeamHeadlights 8&lt;br /&gt;
switch s_SeatBelt 9&lt;br /&gt;
switch s_UpArrow 10&lt;br /&gt;
switch s_Airbag 11&lt;br /&gt;
switch s_CheckEngine 12&lt;br /&gt;
switch s_CheckGuages 13&lt;br /&gt;
switch s_ABS 14&lt;br /&gt;
switch s_Brake 15&lt;br /&gt;
switch s_LowFuel 16&lt;br /&gt;
switch s_Gear 17&lt;br /&gt;
&lt;br /&gt;
These controls may be accessed directly in scenario using the ChangeCabSetting action.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Some functions such as Cruise, Gear, High beam headlights, Blind spot, collision, lane deviation warnings are '''normally''' controlled not by direct access as described here but by hardware mechanisms/buttons.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' For altering cab instrument panel operation it will be necessary to modify the OpenFlight model to include the desired funationality; for example, instrument panel blanking is not build into the model but can be added by editing the cab instrument panel model file then installing the modified file into miniSim.&lt;br /&gt;
&lt;br /&gt;
===Scenario Hints===&lt;br /&gt;
The total number of scenario elements active at any given time can affect simulator performance:&lt;br /&gt;
&lt;br /&gt;
Total number of active elements&lt;br /&gt;
*vehicles (ADOs), triggers, animations, etc.&lt;br /&gt;
&lt;br /&gt;
Object management&lt;br /&gt;
*Use paths to shift ADOs away from the driver route of travel as they turn off the route&lt;br /&gt;
*reduce the number of vehicles in traffic cloud surrounding external driver&lt;br /&gt;
*use creation radius to limit the number of active elements, and to remove elements after the driver has traveled beyond the creation radius&lt;br /&gt;
&lt;br /&gt;
[[File:creation_radius_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Creation radius works by activating the scenario element only when the driver is within the radius.  The scenario element is created when the driver enters the creation radius, and is deleted after the driver leaves the creation radius.&lt;br /&gt;
&lt;br /&gt;
Exploit environment to reduce object load&lt;br /&gt;
&lt;br /&gt;
*Use curves, hills, intersection corners to mask objects&lt;br /&gt;
&lt;br /&gt;
Object deletion&lt;br /&gt;
*Remove objects when no longer needed&lt;br /&gt;
&lt;br /&gt;
When creating dynamic elements, create them as close to where they are needed as possible.&lt;br /&gt;
&lt;br /&gt;
====How to Determine When ADOs are Visible to the External Driver====&lt;br /&gt;
&lt;br /&gt;
Some development/setup testing may be needed to determine precise location/distance/speed; i.e., locating ADOs for a freeway ramp merge event where the external driver is merging onto the freeway with other ambient traffic present.&lt;br /&gt;
&lt;br /&gt;
Unless the purpose of the event is to study driver behavior at the merge, ideally the scenario will be authored to have ambient traffic on the freeway but not to present a conflict at the merge for the external driver.&lt;br /&gt;
&lt;br /&gt;
A straightforward way to determine where the ADOs are first visible to the driver is to mock up a scenario placing colored ADOs along the freeway with a velocity of 0.  This will ensure the ADOs remain stationary while the scenario author determines where they are first visible to the external driver.&lt;br /&gt;
&lt;br /&gt;
Place the start position/external driver far enough up the ramp to be a reasonable test for the actual scenario.&lt;br /&gt;
&lt;br /&gt;
As you drive the ramp, see which ADO is first visible to the driver.  Place ADOs just out of view (upstream) of that location.&lt;br /&gt;
&lt;br /&gt;
[[File:merge_hint.png|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' use test vehicles of the same type and character as the intended scenario vehicles.  For example, do not use a sedan test ADO for a larger vehicle (SUV, bus, dump truck).  Doing so will invalidate the visibility test, because a larger ADO will be visible over a longer distance than a small ADO.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
At the scenario start location, ADOs in front of the Coke truck are visible.  Note how the larger vehicles are more obvious at this distance.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The driver has traveled onto the ramp.  At this point, the last ADO visible to the driver is still the Coke truck.&lt;br /&gt;
&lt;br /&gt;
[[File:ramp_vis_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
As the driver travels farther down the ramp a small ADO is visible behind the Coke truck.&lt;br /&gt;
&lt;br /&gt;
The answer to the question '''When is an ADO visible?''' is thus:&lt;br /&gt;
#It depends on how large the ADO is&lt;br /&gt;
#Small ADOs can be placed at the location of the red ADO behind the Coke truck.&lt;br /&gt;
#Large ADOs may need to be placed farther back (behind the red ADO).  This test is inconclusive, but based on the terrain it seems likely that large ADOs would need to be placed at least at the green ADO location (behind the Coke truck).&lt;br /&gt;
&lt;br /&gt;
Creating small ADOs at the green ADO location when the external driver is located at the ramp position in 3 travelling at the same speed as the external driver should arrive at the merge slightly ahead of the driver (because the curved ramp is longer than the straight freeway).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ADO size, ADO color, time of day and visibility settings affect ADO visibility.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====How to Position Objects Precisely using '''Place Object At..'''====&lt;br /&gt;
&lt;br /&gt;
ISAT does not support true precision because it is not currently possible to 'dial in' a position as is typical in 3D modelling tools, but there is a way to approximate precision in cases where a consistent measurement is desired.&lt;br /&gt;
&lt;br /&gt;
In the following example a number of roadpad triggers are placed relative to the location where a roadway enters an intersection.  This is a discrete boundary within the simulation world as shown in ISAT.&lt;br /&gt;
&lt;br /&gt;
There are two methods of placement possible:&lt;br /&gt;
# Measure the desired distance (CTRL+Shift+RMB, drag); take note of the coordinates updating in realtime and make a mental note of the desired location.&lt;br /&gt;
#Place an object (ADO or static object); use the Place Object At.. feature from the context menu when you RMB on a scenario object.&lt;br /&gt;
Using this method you can specify a distance - positive numbers move the object downstream/forward, negative numbers move the object upstream/backward.&lt;br /&gt;
&lt;br /&gt;
'''Note:'''If the distance is significant and extends over an intersection, ISAT may produce unexpected and undesired results such as re-starting the measurement from the closest upstream intersection, thus placing the object where it was not intended.&lt;br /&gt;
&lt;br /&gt;
In the following example, Place Object At.. is used to specify a point 50 feet upstream from the road/intersection border.&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
A roadpad trigger has been positioned near the area of interest.  Any existing roadpad is deleted from the trigger.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
An ADO is used as a marker object inserted temporarily into the scenario.  Any convenient object may be used.  &lt;br /&gt;
&lt;br /&gt;
'''Note:''' large objects such as ADOs may be less precise than small objects such as the Traffic cone, but is generally easier to access in the ISAT interface unless you have created a script for cone objects.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
RMB on the ADO to access the Place Object At.. request dialog.  Only numbers are valid entries.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_4.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The desired distance is entered into the Place Object At.. request dialog.  ISAT will then require you to select the object you wish to move using LMB.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_5.png|400px]]&lt;br /&gt;
&lt;br /&gt;
ISAT moves the selected object by the distance you specified.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precision_placement_6.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Use the ADO CG (model center) to place the start of the road pad.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:precise_placement_7.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Remove the ADO marker and save your scenario.&lt;br /&gt;
&lt;br /&gt;
==Scenario Testing and Debugging==&lt;br /&gt;
The primary way to test and debug scenarios is using ISAT rehearsal mode. &lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' the external driver during rehearsal is a simulation.  You have limited control over the simulated ownship:&lt;br /&gt;
#change speed&lt;br /&gt;
#change lane&lt;br /&gt;
&lt;br /&gt;
ISAT has two rehearsal dialogs:&lt;br /&gt;
#abbreviated (standard) dialog&lt;br /&gt;
#advanced (extended dialog)&lt;br /&gt;
&lt;br /&gt;
===How to change to the advanced rehearsal dialog===&lt;br /&gt;
Often it is necessary to control the ownship during rehearsal.  The ownship controls are located in the advanced (extended) rehearsal dialog.&lt;br /&gt;
&lt;br /&gt;
ISAT will show the Advanced dialog the first time rehearsal mode is activated.  All additional activations show the abbreviated dialog.&lt;br /&gt;
&lt;br /&gt;
TBC abbreviated dialog&lt;br /&gt;
&lt;br /&gt;
To use the Advanced dialog, LMB the Advanced button.&lt;br /&gt;
&lt;br /&gt;
TBC Advanced dialog&lt;br /&gt;
&lt;br /&gt;
===How to change ownship speed during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#pause.&lt;br /&gt;
#adjust ownship speed&lt;br /&gt;
#toggle pause off (resume rehearsal)&lt;br /&gt;
&lt;br /&gt;
===How to make ownship lane change during rehearsal mode===&lt;br /&gt;
After entering rehearsal mode:&lt;br /&gt;
#click the Play icon (start the rehearsal)&lt;br /&gt;
#click the desired Lane Change (left or right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How to Use Audio in your Scenario===&lt;br /&gt;
Scenarios play audio sounds and messages through a write to cell action: '''SCC_Audio_Trigger'''&lt;br /&gt;
&lt;br /&gt;
Use of audio in a scenario typically requires both a write to cell and a 'clear action' that writes a zero (0) to SCC_Audio_Trigger in order to 'clear the channel'.  The 'clear' action can happen before or after playing a sound; choose one method and be consistent in your scenario authoring.&lt;br /&gt;
&lt;br /&gt;
Failure to 'clear the channel' or '''not''' writing a value of zero can result in no audio being played for subsequent write to cell SCC_Audio_Trigger actions.&lt;br /&gt;
&lt;br /&gt;
The following shows how this looks in scenario when executed from a roadpad trigger (RPT):&lt;br /&gt;
&lt;br /&gt;
[[File:audio_scn_A.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The above diagram is shown below in text format:&lt;br /&gt;
&lt;br /&gt;
 HCSM RoadPadTrigger&lt;br /&gt;
  GroupName &amp;quot;WindGust_Audio&amp;quot; &lt;br /&gt;
  ByTypeSet &amp;quot;ExternalDriver&amp;quot; &lt;br /&gt;
  NthFromStart 0 &lt;br /&gt;
  NthFromEnd 0 &lt;br /&gt;
  VehicleAhead 0 &lt;br /&gt;
  VehicleBehind 0 &lt;br /&gt;
  LongComment &amp;quot;This is a wind gust event&amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  ActvDel 0.0000000E+00 &lt;br /&gt;
  CrRad 0.0000000E+00 &lt;br /&gt;
  Debounce 0.0000000E+00 &lt;br /&gt;
  FireDelFrames 0 &lt;br /&gt;
  Lifetime 0.0000000E+00 &lt;br /&gt;
  Name &amp;quot;RPT_WG_6&amp;quot; &lt;br /&gt;
  OneShot 1 &lt;br /&gt;
  Priority 0 &lt;br /&gt;
  SeqAct 1 &lt;br /&gt;
  Position 6.7165800E+04 6.0419215E+03 0.0000000E+00 &lt;br /&gt;
  DrawPosition 6.7165800E+04 6.0419215E+03 1.1308095E-317 &lt;br /&gt;
  Path &amp;quot;R:r3_62700_7920:0[3033.04:3245.46]&amp;quot; &lt;br /&gt;
    HCSM LogData&lt;br /&gt;
      Comment &amp;quot;LS1=8&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      Stream 1 &lt;br /&gt;
      StreamVal 8.0000000E+00 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;Play_Audio&amp;quot; &lt;br /&gt;
      Delay 2.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;63000&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    HCSM WriteCell&lt;br /&gt;
      Comment &amp;quot;clear_audio&amp;quot; &lt;br /&gt;
      Delay 0.0000000E+00 &lt;br /&gt;
      InstigatorSet 0 &lt;br /&gt;
      CellName &amp;quot;SCC_Audio_Trigger&amp;quot; &lt;br /&gt;
      CellData &amp;quot;0&amp;quot; &lt;br /&gt;
      CellType 2 &lt;br /&gt;
      CellVar 0 &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===How to Add Custom Audio Instructions to miniSim===&lt;br /&gt;
&lt;br /&gt;
''' Please note: Custom audio 'instructions' for a scenario should be added to the instructions.txt file.'''&lt;br /&gt;
&lt;br /&gt;
These are sounds that are played in scenario, typically as directions for the minSim driver.&lt;br /&gt;
&lt;br /&gt;
Adding custom audio files requires the following procedure:&lt;br /&gt;
&lt;br /&gt;
1 Exit miniSim - changes to the miniSim configuration should happen only when miniSim is not running.&lt;br /&gt;
&lt;br /&gt;
2 Copy the audio .wav file to:&lt;br /&gt;
:C:\NadsMiniSim_x.x\data\sound\DefaultCabSound\Instructs &lt;br /&gt;
&lt;br /&gt;
:Edit the file instructions.txt in that same folder.&lt;br /&gt;
&lt;br /&gt;
3 Add an entry to instructions.txt to register your audio file in accordance with the following layout using the existing entries as a template:&lt;br /&gt;
&lt;br /&gt;
:Unique_ID   Filename   Normalized_Volume&lt;br /&gt;
&lt;br /&gt;
:Unique_ID is whatever unique number you assign to your file.&lt;br /&gt;
&lt;br /&gt;
:Filename is the name of your .WAV file. &lt;br /&gt;
&lt;br /&gt;
:Normalized_Volume is the volume your audio file should play, where 0.00 is silence and 1.00 is maximum volume. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NOTE: Remove all spaces in your audio filename.'''  If needed, use the underscore character instead of spaces.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting Custom Audio Additions===&lt;br /&gt;
After installing new .wav files and adding them into the audio configuration file '''instructions.txt''', if the audio file does not play:&lt;br /&gt;
*Check the Audio Engine window while miniSim is still running.  The Audio Engine will display file errors,.&lt;br /&gt;
*If Audio Engine does not display a message similar to: Audio Engine loaded normally, scroll through the window messages and look for any .wav or load error messages.&lt;br /&gt;
&lt;br /&gt;
==Re-use of Scenario Elements==&lt;br /&gt;
Scenario authoring can be an intensive undertaking.  It makes sense therefore to leverage your development efforts by re-using scenario elements where possible.  &lt;br /&gt;
&lt;br /&gt;
ISAT provides a number of ways to re-use scenario elements:&lt;br /&gt;
# copy/paste&lt;br /&gt;
# external references&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;# exporting elements as '''groups'''&amp;lt;/span&amp;gt;&lt;br /&gt;
# isc scripts&lt;br /&gt;
&lt;br /&gt;
Each of these methods have their strengths and weaknesses.&lt;br /&gt;
&lt;br /&gt;
===copy/paste===&lt;br /&gt;
The simplest method to re-use scenario elements among different scenario files is copy/paste.  This is possible for most scenario elements* even if the source and destination roadmap/BLIs are radically different.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste.png|400px]]&lt;br /&gt;
&lt;br /&gt;
It is also possible to copy an ISAT element from one scenario to another as '''TEXT''' by selecting the element and using the windows copy shortcut CTRL-C, then open a text file and paste it using the windows paste shortcut CTRL-V.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Traffic sources are '''not''' portable using copy/paste.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Not all elements can be copy/pasted.  Elements created from a Create Element action cannot be copied - it is necessary to select the parent element and copy that instead.&lt;br /&gt;
&lt;br /&gt;
[[File:copy_paste2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the above diagram, elements at '''B''' and '''C''' cannot be copied/pasted because they have been created by element '''A'''.  It is necessary to copy the element at '''A''' instead.  If only the elements at B are needed, the best method will be to copy/paste as Text.&lt;br /&gt;
&lt;br /&gt;
'''NOTE: ISAT will not copy elements containing road coordinates (elements with a path) to a scenario that does not share the same BLI as the source (copy from) scenario.'''&lt;br /&gt;
&lt;br /&gt;
A partial solution to such cases is to remove the path first, copy the element, paste into the destination scenario, then re-create the path manually.&lt;br /&gt;
&lt;br /&gt;
===External Reference===&lt;br /&gt;
An external reference scenario is intended to be re-used by multiple 'parent' scenarios.  The effort of authoring objects is thus leverages across multiple files, without needing to re-create the same elements more than once.&lt;br /&gt;
&lt;br /&gt;
[[File:re_use_xref_1.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Common uses of external references include traffic, traffic signal operation, traffic sign appearance or other environment features which have multiple appearances (billboards, some tile related scenery, etc).&lt;br /&gt;
&lt;br /&gt;
NOTE: Multiple external references are possible; but because objects are categorized by group, it is not entirely necessary.&lt;br /&gt;
&lt;br /&gt;
For example, one external reference file contains traffic, another contains signs.  These two external reference scenarios could be combined into one file.&lt;br /&gt;
&lt;br /&gt;
[[File:xref_overview2.png|400px]]&lt;br /&gt;
&lt;br /&gt;
NOTE: Each group defined must be unique across all files: parent and external reference files.&lt;br /&gt;
&lt;br /&gt;
In order to use an element in an external reference scenario, it is necessary to define and assign a group to all elements that you wish to control from the parent scenario. &lt;br /&gt;
At this time there is no visual hint in ISAT to indicate if a group has been assigned to an element or not - each element has to be confirmed independently.&lt;br /&gt;
&lt;br /&gt;
However, a properly authored external reference element cannot be edited within the parent scenario (after you have done Add Ref. to use the external reference file).&lt;br /&gt;
&lt;br /&gt;
An alternative is to insert groups using a text editor with macro capability, or to use a program or external script to make the necessary changes.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If the external reference file is for object contained in the parent scenario (for example, an external reference file containing traffic signals with a group defined) it is still necessary for that group to be defined in the parent file.&lt;br /&gt;
&lt;br /&gt;
With traffic signals, ISAT requires ONE explicit group reference, which will be contained in the HCSM TrafficLightManager block as shown below.  If you require the use of traffic signals in an external reference, the recommended way to do this is through ISAT because then it manages the group assignment for you.&lt;br /&gt;
&lt;br /&gt;
==== HCSM TrafficLightManager scenario block ====&lt;br /&gt;
&lt;br /&gt;
    HCSM TrafficLightManager&lt;br /&gt;
    HCSM CLG&lt;br /&gt;
      IntrsctnName &amp;quot;I1_40260_4620&amp;quot; &lt;br /&gt;
      Duration 2.0000000E+01 3.0000000E+00 1.0000000E+00 2.0000000E+01 3.0000000E+00 1.0000000E+00 &lt;br /&gt;
      GroupName &amp;quot;TrafficSignals&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r1_RTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_LTRN_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r2_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_STRT_40260_4620_270&amp;quot; &lt;br /&gt;
      LightName &amp;quot;s_signal_r3_NORM_40260_4620_270&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;FLTY&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;RTG&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;FLTY&amp;quot; &amp;quot;LTR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;SG&amp;quot; &amp;quot;SY&amp;quot; &amp;quot;SR&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
      Pattern &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;R&amp;quot; &amp;quot;G&amp;quot; &amp;quot;Y&amp;quot; &amp;quot;R&amp;quot; &amp;quot;&amp;quot; &lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
    &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' At this time there is a known issue using the write cell '''SCC_Audio_Trigger''' action in external references.  Although the trigger containing this action can be assigned a group and used as an external reference, audio does not play.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''Because ISAT updates static object positions (elevation) to the terrain (roadway) when the scenario file is saved, the best way to use a custom elevation is to put such objects into an external reference file in order to isolate those objects from normal scenario editing.'''  &amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Define a Group====&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:#ac6600&amp;quot;&amp;gt;'''NOTE:''' ISAT 1.8.5 and 1.8.6 currently do not work properly with group files.  These versions will not import objects within a group file.  There is a workaround which involves the following process, but instead of reading the saved group file into a scenario the workaround requires editing the scenario as text and inserting the objects within the group file into the scenario.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
RMB on the element and choose from the context menu: Group &amp;gt;&amp;gt; New Group (if this is a new group) or Group &amp;gt;&amp;gt; (choose an already defined group).&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The first time you create a group for an object, ISAT will automatically assign the group to that object.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups to the scenario elements needed, save the scenario file then close it.&lt;br /&gt;
&lt;br /&gt;
Open or create the parent scenario file and use the Add Ref. button at the bottom of the ISAT window to select your external reference scenario.  After you choose a file ISAT will present you with the groups found in that scenario.  Choose the groups you with to include and click the 'Okay' button.  Click the Add Ref. OK button to complete the process.&lt;br /&gt;
&lt;br /&gt;
Currently import group file operations are not working, but it is possible to insert the group file content (all HCSM StaticObjects) into a scenario manually by using a text editor to copy text from the group file and paste that into a scenario file into the HCSM Static Object section of the scenario file.&lt;br /&gt;
&lt;br /&gt;
[[File:group_text.jpg|400px]]&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' ISAT does not enforce logic on your external reference authoring.  If you add references to scenarios that do not share the same roadmap/BLI as the parent scenario, it is likely that elements will be placed at the origin (in cases where the external reference roadmap contains roadways not found in the parent) if it even loads.&lt;br /&gt;
&lt;br /&gt;
===Exporting ISAT Elements as Groups===&lt;br /&gt;
Transferring  ISAT elements among scenarios can be accomplished using groups.  As with external reference scenarios, one or more groups must be defined and then assigned to one or more elements.&lt;br /&gt;
&lt;br /&gt;
After defining and assigning groups select the group for export using the Group select drop-down located at the lower left corner of ISAT.  Choose a group to export and then click the 'Save Group' button.  Save the file.&lt;br /&gt;
&lt;br /&gt;
TBC insert graphic sequence diagram here&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' If you cannot locate the group file in the folder specified, check the ISAT install\data folder.  This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\NADS\ISAT\data&lt;br /&gt;
&lt;br /&gt;
===Group File Contents===&lt;br /&gt;
The group file is a text file and can be opened or edited in a text editor.&lt;br /&gt;
&lt;br /&gt;
The following is a group file containing one ADO.  Note the GroupName line near the bottom:&lt;br /&gt;
&lt;br /&gt;
 Header&lt;br /&gt;
  LriFile &amp;quot;_dev.bli&amp;quot;&lt;br /&gt;
  LongComment &amp;quot;this is a test group export&amp;quot;&lt;br /&gt;
  ShortComment &amp;quot;this comment was left empty&amp;quot;&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM Ado&lt;br /&gt;
  RunMode &amp;quot;eREMOTE_CONTROL&amp;quot; &lt;br /&gt;
  RandomSol 0 &lt;br /&gt;
  Name &amp;quot;Ado1&amp;quot; &lt;br /&gt;
  DynModel &amp;quot;Non Linear&amp;quot; &lt;br /&gt;
  LogFile &amp;quot;&amp;quot; &lt;br /&gt;
  LatOffsType 0 &lt;br /&gt;
  CreateRelLatInFeet 0 &lt;br /&gt;
  CreateRelOffsLonUsingExpr 0 &lt;br /&gt;
  CreateRelOffsLonExprStr &amp;quot;&amp;quot; &lt;br /&gt;
  AutoControlBreakLights 0 &lt;br /&gt;
  AutoControlHeadLights 0 &lt;br /&gt;
  UseReaDel 1 &lt;br /&gt;
  StdToAccType 0 &lt;br /&gt;
  StdToDecType 0 &lt;br /&gt;
  StdToDecVal1 9.0000000E-001 &lt;br /&gt;
  StpToAccType 0 &lt;br /&gt;
  DecToAccType 0 &lt;br /&gt;
  FollowTimeMin 1.0000000E+000 &lt;br /&gt;
  FollowTimeMax 2.0000000E+000 &lt;br /&gt;
  EmergDecClip -1.1000000E+001 &lt;br /&gt;
  Accel2Catch 0 &lt;br /&gt;
  NormVel2Kp 7.0000000E-001 &lt;br /&gt;
  PathSearchDepth 2 &lt;br /&gt;
  LcvFall 1.5000000E+000 2.0000000E+000 &lt;br /&gt;
  LcvFreq 3.0000000E-002 5.0000000E-002 &lt;br /&gt;
  LcvRAmpl 1.0000000E-001 5.0000000E-001 &lt;br /&gt;
  VelCtrlInitMatchOvVel 0 &lt;br /&gt;
  VelCtrlFollowSpeedLimit 0 &lt;br /&gt;
  VelCtrlDistType 0 &lt;br /&gt;
  MaxLatOffset 9.0000000E+000 &lt;br /&gt;
  LongComment &amp;quot; &amp;quot; &lt;br /&gt;
  ShortComment &amp;quot; &amp;quot; &lt;br /&gt;
  SolName &amp;quot;Audi&amp;quot; &lt;br /&gt;
  RoadPos &amp;quot;r1_1320_44220:2:32414.44:0.00&amp;quot; &lt;br /&gt;
  GroupName &amp;quot;TEST_Group&amp;quot; &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM StaticObjManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM DriverMirror&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 HCSM IntersectionManager&lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
&lt;br /&gt;
===ISC Scripts===&lt;br /&gt;
Scripts are an efficient way to automate repetitive and/or complex tasks.&lt;br /&gt;
&lt;br /&gt;
ISAT uses a custom language (ISC) to automate placement and manipulation of scenario objects. Combined with simple direction commands and the capability to navigate a road network, ISC scripts can ask the scenario author for input and prompt for selecting objects.&lt;br /&gt;
&lt;br /&gt;
 ISAT installs with some ISC script files. If your version of ISAT contains a data\isc &lt;br /&gt;
 folder, then your version of ISAT is capable of running scripts. You can create &lt;br /&gt;
 additional scripts as needed. All scripts located in the data\isc folder will load in ISAT  &lt;br /&gt;
 when ISAT is launched.&lt;br /&gt;
&lt;br /&gt;
You can use these scripts for reference in creating your own custom scripts.&lt;br /&gt;
&lt;br /&gt;
 New scripts created during an existing ISAT session will not appear until ISAT is re- &lt;br /&gt;
 launched.&lt;br /&gt;
 Scripts that have been edited will not update until ISAT is re-launched.&lt;br /&gt;
&lt;br /&gt;
Unless otherwise indicated, scripts are case-sensitive.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Please do not edit the existing scripts!&lt;br /&gt;
&lt;br /&gt;
Make a copy of any existing script before you make changes. In the event your modified script does not work, you can look at the original file for reference.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are located on the ISAT Elements widget.  Custom isc scripts are located after the 'Events' separator. &lt;br /&gt;
&lt;br /&gt;
Using an ISC script involves LMB + dragging the desired script onto the workspace. In some cases the script will ask for inputs.&lt;br /&gt;
&lt;br /&gt;
ISC can be also used to create an entire event, thus ensuring that all events created will be entirely identical in terms of settings and locations for all created elements.&lt;br /&gt;
&lt;br /&gt;
ISC scripts are text files located within the ISAT installation data folder.  Only the custom ISC scripts are located in this folder. This is typically:&lt;br /&gt;
&lt;br /&gt;
C:\Nads\Isat\data\isc&lt;br /&gt;
&lt;br /&gt;
====Icon Files====&lt;br /&gt;
Script icon files are 8-bit windows icon files (file.ico). GIMP is capable of exporting valid ico files. To create an ico file, scale it to 32x32 pixels. Export the file as .ico to the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
In order for a script to use an icon file, both files must exist in the isat\data\isc folder.&lt;br /&gt;
&lt;br /&gt;
====ISC Script Examples====&lt;br /&gt;
This section contains example scripts with notes.&lt;br /&gt;
&lt;br /&gt;
'''Rotate sign'''&lt;br /&gt;
&lt;br /&gt;
 .Name SetSignRotation&lt;br /&gt;
 .Icon SignRot.ico &lt;br /&gt;
 Static sign&lt;br /&gt;
 Select(sign,&amp;quot;Please Select a Sign&amp;quot;)&lt;br /&gt;
 sign.SetAngle(Anchor)&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
'''Place Multiple Static Objects (TrafCone)'''&lt;br /&gt;
The following script asks the scenario author for number of cones to generate, position and offset values and then generates the objects.&lt;br /&gt;
&lt;br /&gt;
A breakdown of the script follows the code block below.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
 &lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
 Static cone;&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
 Count = 1&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
 &lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
 &lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
====Script Breakdown cones.isc====&lt;br /&gt;
&lt;br /&gt;
This section contains a description of the elements used in the script.  The script segment is followed by a brief text description.&lt;br /&gt;
&lt;br /&gt;
This script places a number of object copies (TrafCone) using information provided by a user.&lt;br /&gt;
&lt;br /&gt;
 .Name Cones&lt;br /&gt;
 .Icon cone.ico&lt;br /&gt;
&lt;br /&gt;
The first line contains a keyword '''.Name''' followed by the name of the script.  This is the name that ISAT will use on the Isat Elements widget for the script.  Note the script name does not have to be the same, but it is good computing practice.&lt;br /&gt;
&lt;br /&gt;
The second line begins with the keyword '''.Icon''' followed by a file name.  This file must exist in the ISAT\data\isc folder (accompanying the script file).  This is the icon ISAT will use for the script.&lt;br /&gt;
&lt;br /&gt;
 Block coneBlock %%%&lt;br /&gt;
 HCSM StaticObject&lt;br /&gt;
   IsNewObj 1 &lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
   Option 0 &lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
 &amp;amp;&amp;amp;&amp;amp;&amp;amp;End&amp;amp;&amp;amp;&amp;amp;&amp;amp;&lt;br /&gt;
 %%%&lt;br /&gt;
&lt;br /&gt;
This is the data section of the script, which is defined using the keyword '''Block'''.  A block name follows the keyword, and the data start is defined with '''%%%'''.&lt;br /&gt;
&lt;br /&gt;
The HCSM StaticObject section has been copied from a scenario.  In this case, a static object was placed into the workspace and then copied into a text file.&lt;br /&gt;
&lt;br /&gt;
   Name &amp;quot;Cone_xxx&amp;quot; &lt;br /&gt;
Note: the object name contains a marker that can be used to programmatically name instances of the object:&lt;br /&gt;
&lt;br /&gt;
   SolName &amp;quot;TrafCone&amp;quot; &lt;br /&gt;
This line begins with the keyword '''SolName''' followed by the name of the object as it is defined in the sol2.txt file.&lt;br /&gt;
&lt;br /&gt;
   Position 3.4312599E+002 -7.2408282E+004 0.0000000E+000 &lt;br /&gt;
The Position of the static object will update when the script activates and instanced objects are placed in the workspace.&lt;br /&gt;
&lt;br /&gt;
 Static cone;&lt;br /&gt;
This line begins with the keyword '''Static''' followed by a variable name.&lt;br /&gt;
&lt;br /&gt;
 Value	dist1&lt;br /&gt;
 Value	numberOfCones&lt;br /&gt;
 Value	distance&lt;br /&gt;
 Value	variablePart&lt;br /&gt;
 Value	randDistance&lt;br /&gt;
 Value	speed&lt;br /&gt;
 Value   Count&lt;br /&gt;
 Value	LatOffset&lt;br /&gt;
 &lt;br /&gt;
This section defines variables with the keyword '''Value''' followed by variable names.  Using descriptive names is better than generic names.  From the variable list it already seems clear what the programmer cares about: number of cones and distances.&lt;br /&gt;
&lt;br /&gt;
 Block tempBlock&lt;br /&gt;
 tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
This section defines a block using the keyword '''Block''' followed by the variable name.&lt;br /&gt;
&lt;br /&gt;
The next statement replicates coneBlock into tempBlock.&lt;br /&gt;
&lt;br /&gt;
 Count = 1&lt;br /&gt;
Initialize the value of the variable Count to 1.&lt;br /&gt;
&lt;br /&gt;
 tempBlock.Replace('xxx',Count)&lt;br /&gt;
The built-in '''Replace''' function changes the string 'xxx' to the value of the variable Count.&lt;br /&gt;
&lt;br /&gt;
 cone.SetBlock(tempBlock)&lt;br /&gt;
This statement creates a block using the function '''SetBlock''' called cone, and copies the contents of tempBlock into it.&lt;br /&gt;
&lt;br /&gt;
 Ask(numberOfCones,&amp;quot;How many cones?&amp;quot; )&lt;br /&gt;
 Ask(dist1,&amp;quot;Distance between cones?&amp;quot; )&lt;br /&gt;
 Ask(LatOffset,&amp;quot;How much offset?&amp;quot; )&lt;br /&gt;
&lt;br /&gt;
This section asks the user for input and puts that information into variables:&lt;br /&gt;
*Number of cones&lt;br /&gt;
*Distance between cones (dist1)&lt;br /&gt;
*Lateral offset (calculated from lane center)&lt;br /&gt;
&lt;br /&gt;
 Position posRp&lt;br /&gt;
 Position tempPos&lt;br /&gt;
 posRp = Anchor&lt;br /&gt;
 numberOfCones = numberOfCones&lt;br /&gt;
&lt;br /&gt;
This section contains position variables and assigns the value of numberOfCones.&lt;br /&gt;
&lt;br /&gt;
 Repeat numberOfCones&lt;br /&gt;
 	posRp.GoForward(dist1)&lt;br /&gt;
     # test comment&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
&lt;br /&gt;
This section is where the work happens.  Reading from the top, this section is contained within a loop defined by the keyword '''Repeat'''.  The number of times to repeat follows in a variable numberOfCones.&lt;br /&gt;
&lt;br /&gt;
'''posRP.GoForward()''' is a built-in function to take the current position and shifts it forward by the amount specified in the dist1 variable.&lt;br /&gt;
&lt;br /&gt;
 #test comment&lt;br /&gt;
This is a comment defined by starting the line with the comment keyword '''#'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos = posRp;&lt;br /&gt;
&lt;br /&gt;
Assign the value of the variable tempPos to the value currently in '''posRp'''&lt;br /&gt;
&lt;br /&gt;
 	tempPos.SetOffset(LatOffset)&lt;br /&gt;
&lt;br /&gt;
Another built-in function or attribute to the position element which defines a lateral offset (distance from the lane center).  This statement places the value of a variable LatOffset into the offset element of the tempPos variable, using the operand '''SetOffset'''.&lt;br /&gt;
&lt;br /&gt;
 	cone.RoadPos = tempPos&lt;br /&gt;
&lt;br /&gt;
This statement sets the road position variable for cone to the value in the variable tempPos.&lt;br /&gt;
&lt;br /&gt;
 	cone.Clone&lt;br /&gt;
&lt;br /&gt;
Duplicate the block cone using the operand '''Clone'''&lt;br /&gt;
&lt;br /&gt;
     Count = Count + 1&lt;br /&gt;
Set the value of the variable Count to the value of Count plus one.  This statement increments the value of Count for each loop processed.&lt;br /&gt;
&lt;br /&gt;
     tempBlock = coneBlock&lt;br /&gt;
&lt;br /&gt;
Create a new block tempBlock by setting it to the content of coneBlock.&lt;br /&gt;
&lt;br /&gt;
     tempBlock.Replace('xxx',Count)&lt;br /&gt;
&lt;br /&gt;
Use a built-in function to '''Replace''' the string 'xxx' with the value of the Count variable&lt;br /&gt;
&lt;br /&gt;
     cone.SetBlock(tempBlock)&lt;br /&gt;
 &lt;br /&gt;
Use the built-in function '''SetBlock''' to place the modified tempBlock (modified by the string replacement command earlier) into the cone block.&lt;br /&gt;
&lt;br /&gt;
 End&lt;br /&gt;
 .End&lt;br /&gt;
&lt;br /&gt;
The last two lines terminate the loop and the script, respectively.&lt;br /&gt;
&lt;br /&gt;
====How to Create an ISC Script====&lt;br /&gt;
The simplest way to create an ISC script is to find an existing script that does something similar to your desired behavior and edit it.&lt;br /&gt;
&lt;br /&gt;
=miniSim Simulation Data=&lt;br /&gt;
MiniSim runs on shared memory:&lt;br /&gt;
*miniSim is a collection of programs&lt;br /&gt;
*shared memory is a commonly accessed 'blackboard' list: a Cell and a Cell Value&lt;br /&gt;
:The DAQ file is a snapshot of this 'blackboard' memory for every frame.&lt;br /&gt;
&lt;br /&gt;
*Scenario can write to cells added by the scenario author&lt;br /&gt;
:-i.e., for custom hardware or tasks/events&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' Custom cells must be present in the collect file (NadsMiniSimCollect.cec) '''prior to''' simulation in order for the custom cells to be present in the DAQ.&lt;br /&gt;
&lt;br /&gt;
NOTE: The cell type defined in the collect file must be followed, or garbage values will be used&lt;br /&gt;
&lt;br /&gt;
Use of a DAQ file implies that at some point, data reduction will be needed.  &lt;br /&gt;
Data reduction: the process of distilling measures from the DAQ file, i.e.&lt;br /&gt;
*Event definition&lt;br /&gt;
*SDLP&lt;br /&gt;
*Average headway&lt;br /&gt;
&lt;br /&gt;
==What is the Difference? Cell vs. Variable==&lt;br /&gt;
*A Cell is a pre-created “slot” in shared memory &lt;br /&gt;
:-Specified in the .CEC collect file,&lt;br /&gt;
:-Saved in the DAQ file,&lt;br /&gt;
:-Can be sent to custom programs;&lt;br /&gt;
:-Can create &amp;amp; use custom cells;&lt;br /&gt;
*A Variable is a name value internal to the scenario&lt;br /&gt;
:-NOT saved to the DAQ file,&lt;br /&gt;
:-Can use to track items in the scenario&lt;br /&gt;
:i.e., how long the driver has been exceeding the speed limit&lt;br /&gt;
:-Initialize conditions in the scenario.&lt;br /&gt;
&lt;br /&gt;
=== Variables Save ===&lt;br /&gt;
Variables can be saved to disk as a single value text file (ie, multiple values over time are not supported) through the use of a '''Store Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h28_49.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The file is stored in the miniSim_x.x\bin.x64 folder.&lt;br /&gt;
&lt;br /&gt;
'''NOTE:''' The name of the file is defined within the Store Variable action.  '''Care must be taken to save variables to unique file names''' in the case of multiple scenarios running on miniSim at the same time (if they share common variables), as would be the case if triggers are copied from one scenario to another.&lt;br /&gt;
&lt;br /&gt;
=== Variables Restore/Read ===&lt;br /&gt;
Variables can be read into the simulation through the use of a '''Load Variable''' action:&lt;br /&gt;
&lt;br /&gt;
[[File:2021-08-23_13h32_39.png|400px]]&lt;br /&gt;
&lt;br /&gt;
==Cell Types==&lt;br /&gt;
This is a partial list of cell types.&lt;br /&gt;
&lt;br /&gt;
*CFS = control feel subsystem (steering wheel, pedals)&lt;br /&gt;
*CIS = control information subsystem (gear, turn signal, buttons, etc)&lt;br /&gt;
*TPR = terrain profiler for terrain queries&lt;br /&gt;
*VDS = vehicle dynamics for accelerations, position, engine speed, speed, etc.&lt;br /&gt;
*ACC = adaptive cruise control&lt;br /&gt;
*RCM = configuration management for setting variables that affect subsystem configuration (ACC enabled or disabled, for instance)&lt;br /&gt;
*SCC = scenario&lt;br /&gt;
*SOP = for one time initializations at the start of the simulation.&lt;br /&gt;
&lt;br /&gt;
=='''Data Output Actions'''==&lt;br /&gt;
&lt;br /&gt;
*Write to Cell Actions&lt;br /&gt;
:-Write the value of a variable or cell to a cell&lt;br /&gt;
:-Write to a custom cell&lt;br /&gt;
:-Cannot overwrite another systems output&lt;br /&gt;
'''NOTE:''' Although it is possible to write to a different system cell, that value will be over-written on the next frame.  Thus it is effectively not feasible nor desirable to do.&lt;br /&gt;
&lt;br /&gt;
'''&amp;lt;span style=&amp;quot;color:red&amp;quot;&amp;gt;Also Note: the limit for maximum number of write to cell actions that can be performed in one frame is 8.&amp;lt;/span&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
*Set Variable Action&lt;br /&gt;
:-Sets the value of a variable&lt;br /&gt;
:-Does not have to be created first&lt;br /&gt;
:-Not saved in the DAQ unless written to a valid cell&lt;br /&gt;
*Logstream&lt;br /&gt;
:-Log data action&lt;br /&gt;
&lt;br /&gt;
===Data Output Methods===&lt;br /&gt;
Your data is the primary reason for simulation.&lt;br /&gt;
&lt;br /&gt;
1. Default miniSim scenario measures&lt;br /&gt;
:- Immediately available&lt;br /&gt;
&lt;br /&gt;
2. Alternate scenario measures (DAQ file)&lt;br /&gt;
:- Processed through data reduction&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures====&lt;br /&gt;
*Saved to a drive report.txt file&lt;br /&gt;
*Saved to the same Location as DAQ files; &lt;br /&gt;
:Scenarioname_timedatestamp_report.txt &lt;br /&gt;
•Measures calculated overall, and up to 20 Events during drive: &lt;br /&gt;
:Collision Count			Lane Departure Count &lt;br /&gt;
:Maximum Speed 			Lane Departure Percentage &lt;br /&gt;
:Minimum Speed 			Speeding Count &lt;br /&gt;
:Average Speed 			Speeding Percentage &lt;br /&gt;
:Standard Deviation of Speed 	Average Headway &lt;br /&gt;
:Standard Deviation of Lane Position&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Require Scenario Event Definition====&lt;br /&gt;
In order to capture meaningful data into the default miniSim measures, a scenario must be configured properly to define events.&lt;br /&gt;
&lt;br /&gt;
Use the Write to Cell action to activate the default measures.&lt;br /&gt;
&lt;br /&gt;
[[File:2021-07-02_11h02_44.png|400px]]&lt;br /&gt;
&lt;br /&gt;
*At the start of scenario, set:&lt;br /&gt;
::SCC_EventStatus =0 &lt;br /&gt;
::SCC_EventNumber = 0 &lt;br /&gt;
*At the start of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 1 &lt;br /&gt;
*At the end of the first event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
*At the start of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 1&lt;br /&gt;
::SCC_EventNumber = 2 &lt;br /&gt;
*At the end of the second event, set:&lt;br /&gt;
::SCC_EventStatus = 0 &lt;br /&gt;
&lt;br /&gt;
Continue this pattern; at end of final event, set:&lt;br /&gt;
::SCC_EventStatus = 0&lt;br /&gt;
&lt;br /&gt;
====Default miniSim Scenario Measures Sample Report====&lt;br /&gt;
The following is an example report for 4 events.  Note the remaining events present in the report are all zeroes or -1.00.&lt;br /&gt;
&lt;br /&gt;
[[File:default_measures_report.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====&amp;quot;Alternate&amp;quot; Scenario Event Definition aka Using Logtreams====&lt;br /&gt;
'''NOTE: This method is the more typical/standard method for defining events.'''&lt;br /&gt;
&lt;br /&gt;
Defining an event is key to partitioning simulator data into useful sections.  Processing these sections is the essence of '''data reduction.'''&lt;br /&gt;
&lt;br /&gt;
These useful sections are partitioned using logstreams and are generally called '''Events''':&lt;br /&gt;
*A logstream is a data marker present in the DAQ file&lt;br /&gt;
:there are 10 logstreams&lt;br /&gt;
:use logstreams to indicate when things happen '''in the data:'''&lt;br /&gt;
:at the start of an event; i.e., &lt;br /&gt;
::grab all data where logstream 1 = 100 (example value)&lt;br /&gt;
:during a sub-section of an event&lt;br /&gt;
:at the end of an event (typically clears to 0)&lt;br /&gt;
&lt;br /&gt;
Logstreams help separate/filter data;&lt;br /&gt;
*SDLP is not useful during emergency maneuver events&lt;br /&gt;
&lt;br /&gt;
Logstreams can be useful to debug events;&lt;br /&gt;
:marking in the data when triggers fire&lt;br /&gt;
:ensuring event counters work; these are typically sequential, so any logstream deviation identifies a problem&lt;br /&gt;
&lt;br /&gt;
*How to define a Scenario Event:&lt;br /&gt;
&lt;br /&gt;
Set logstream values at scenario event start&lt;br /&gt;
:during and at scenario event end, set or clear logstream values:&lt;br /&gt;
For example:&lt;br /&gt;
::logstream 1 for event ID&lt;br /&gt;
::logstream 2 for sequencing the event (during/within event)&lt;br /&gt;
::logstream 3 for restart number, etc.&lt;br /&gt;
&lt;br /&gt;
*Requires data reduction to fully process drive data&lt;br /&gt;
*Does '''not''' support default measures&lt;br /&gt;
:unless those measures are used in parallel with the logstream method&lt;br /&gt;
&lt;br /&gt;
*The use of logstreams allows a scenario author to encode event and environment information into the scenario and as a result, into the simulator data stream.&lt;br /&gt;
&lt;br /&gt;
====Example Alternate Scenario Event====&lt;br /&gt;
This section contains an example of a scenario that uses logstream 1 to define an event and environmental context.&lt;br /&gt;
&lt;br /&gt;
In the following example, logstream 1 (LS1) is used to:&lt;br /&gt;
#define the scenario start, which is also in this example the event start.  NOTE: This is not typical.&lt;br /&gt;
#when the driver is 805f from the intersection halt line, set a value into LS1&lt;br /&gt;
#when the driver is 500f from the intersection halt line, set a '''new value''' into LS1  NOTE: This could also use a different LS than the one used to define your event, i.e., 1&lt;br /&gt;
#when the driver activates a roadpad trigger to reset a force velocity (FV) on a lead vehicle&lt;br /&gt;
&lt;br /&gt;
[[File:event_def_LS.png|400px]]&lt;br /&gt;
&lt;br /&gt;
In the following event definition, an expression trigger is used to set a logstream value and execute two additional actions pertaining to the event.&lt;br /&gt;
&lt;br /&gt;
[[File:event_ET_LS3.png|400px]]&lt;br /&gt;
&lt;br /&gt;
====How to Export Data from A DAQ file using ISAT====&lt;br /&gt;
ISAT can display and export DAQ data.  NOTE: This is 'raw data', not previously processed.  This method can be used to test scenarios, confirm or identify data issues.&lt;br /&gt;
&lt;br /&gt;
TBC: example export here&lt;br /&gt;
&lt;br /&gt;
=Terminology &amp;amp; Documentation=&lt;br /&gt;
This section contains terminology and references to related documentation.&lt;br /&gt;
&lt;br /&gt;
'''Action''' - the basic scenario element; the basis for creating scenarios.  Actions may be executed on scenario elements (dynamic or static), create or remove elements, or the environment (time of day, visibility) or the simulated cab instrument panel.&lt;br /&gt;
&lt;br /&gt;
'''ADO''' - Autonomous Dynamic Object; self-controlling to a degree.&lt;br /&gt;
&lt;br /&gt;
'''Cell''' - Data elements that are recorded to during a drive; some cells may be used by the scenario author.  Custom cells may be added to miniSim.&lt;br /&gt;
&lt;br /&gt;
'''Event''' - anything significant that happens during a drive where the driver condition or response is desired to be identified in the drive data.  Can be isolated from general driving through default measures or logstreams.&lt;br /&gt;
&lt;br /&gt;
'''ISAT''' - Interactive Scenario Authoring Toolkit; used to create scenario files for use on the NADS facility or miniSim simulators.&lt;br /&gt;
&lt;br /&gt;
'''ISC''' - ISAT script file.&lt;br /&gt;
&lt;br /&gt;
'''Scenario''' - The simulation experience during a drive; also known as a scenario file, which contains all instructions to the elements within a simulator drive.&lt;br /&gt;
&lt;br /&gt;
'''SDLP''' - Standard deviation lane position&lt;br /&gt;
&lt;br /&gt;
'''SOL''' - Scenario Object Library; objects that are available to ISAT during scenario authoring must be present within the sol2.txt or an auxiliary sol2 (sol2_aux.xxx.txt) file.&lt;br /&gt;
&lt;br /&gt;
'''Trigger''' - A scenario element that contains actions to execute during simulation.  All triggers share the same actions, but execution depends on the trigger type.&lt;br /&gt;
&lt;br /&gt;
'''TTA''' - Time to arrival.&lt;br /&gt;
&lt;br /&gt;
'''TTC''' - Time to collision.&lt;br /&gt;
&lt;br /&gt;
=Reporting ISAT &amp;amp; Scenario Issues=&lt;br /&gt;
*How to report ISAT &amp;amp; scenario issues:&lt;br /&gt;
&lt;br /&gt;
When reporting issues with scenarios it is helpful to provide as much information as possible.  &lt;br /&gt;
&lt;br /&gt;
This often includes scenarios (including any external reference files) and the .LRI file used by the scenarios, screenshots or video that demonstrate the issue being reported and relevant DAQ files. It can be very helpful to include coordinate information with the screenshot or video.&lt;br /&gt;
&lt;br /&gt;
The .BLI file is created from the .LRI and is much larger than the LRI so it may be more convenient to send the LRI file.  NADS staff can re-create the BLI file from the LRI.&lt;br /&gt;
&lt;br /&gt;
Some graphics anomalies may be issues with the tile model and not a scenario or miniSim problem.  These include:&lt;br /&gt;
#white block shapes in the environment&lt;br /&gt;
#gaps or missing geometry; i.e., holes&lt;br /&gt;
#improper lighting (dark features present during the day)&lt;br /&gt;
&lt;br /&gt;
If these issues happen on a custom roadmap/database world, please include the TMT .mos file as well so NADS can re-construct your environment.&lt;br /&gt;
&lt;br /&gt;
==How to contact the NADS miniSim team:==&lt;br /&gt;
&lt;br /&gt;
email [mailto:miniSim-Support@uiowa.edu minisim support]&lt;br /&gt;
&lt;br /&gt;
[mailto:andrew-veit@uiowa.edu Andrew Veit]&lt;br /&gt;
Director of NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:joseph-meidlinger@uiowa.edu Joseph Meidlinger]&lt;br /&gt;
Program Coordinator NADS miniSim &lt;br /&gt;
&lt;br /&gt;
[mailto:oscar-hernandezmurcia@uiowa.edu Oscar Hernandez Murcia]&lt;br /&gt;
MiniSim Application Programmer/Analyst&lt;br /&gt;
&lt;br /&gt;
[mailto:chris-schwarz@uiowa.edu Chris Schwarz]&lt;br /&gt;
Data Reduction &amp;amp; Vehicle Dynamics&lt;br /&gt;
&lt;br /&gt;
[mailto:shawn-allen@uiowa.edu Shawn Allen]&lt;br /&gt;
TMT, Modelling &amp;amp; Support&lt;br /&gt;
&lt;br /&gt;
==How to check what BLI file is used by a scenario==&lt;br /&gt;
&lt;br /&gt;
#You can edit the scenario in a text editor; near the top of the file will be a line starting with '''LriFile''' followed by the name of the BLI file in double quotes.&lt;br /&gt;
#You can use '''grep''' to inventory single or multiple scenarios:&lt;br /&gt;
:grep bli &amp;lt;scenario file/s&amp;gt;&lt;br /&gt;
:A partial listing is shown in the example below.  NOTE: The files shown will likely be different on your PC:&lt;br /&gt;
 C:\NADS\Isat\data\training.demo_scn&amp;gt;grep bli *.scn&lt;br /&gt;
 Demo_Expression_Lead_Vehicle_Variables.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_Expression_Trigger_to_Lead_Vehicle.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 Demo_HUDD.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Avoid.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-Right-Incursion.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTest.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-TrafficLightTestB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 ISAT-Samples-YellowLightDilemmaB.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 KBW_TEST.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 KBW_TESTB.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo.createADO_and_trigger.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo.creation_radius1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_FV_sum_of_Sines.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_Decelerate.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_LV_cut_in.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_MG.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TM1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_TT_null.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_actions_text.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_alt_data_measures.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object.scn:  LriFile &amp;quot;esc_dry_05.bli&amp;quot;&lt;br /&gt;
 demo_audio_virtual_object_simple_rural.scn:  LriFile &amp;quot;simple_rural.bli&amp;quot;&lt;br /&gt;
 demo_auto_cloud1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_coneISC1.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
 demo_dddo.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_dddo_B.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_forXRef_traffic.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_force_vel_01.scn:  LriFile &amp;quot;simple_city1.bli&amp;quot;&lt;br /&gt;
 demo_groupImport.scn:  LriFile &amp;quot;simple_city2.bli&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==How to configure miniSim for screenshots to include coordinates==&lt;br /&gt;
You can enable coordinate display on miniSim by changing the focus to the main display.  #Move the cursor until it is positioned in the main display area, then LMB.  When successful the main display will appear to &amp;quot;blink&amp;quot;.  &lt;br /&gt;
&lt;br /&gt;
Press the keyboard n key twice.  This will cause coordinate information to display in the lower left corner of the main display.&lt;br /&gt;
&lt;br /&gt;
[[File:miniSim_show_coords.png|400px]]&lt;br /&gt;
&lt;br /&gt;
The n key is a toggle; to disable coordinates, press it twice (2x) again.  '''NOTE:''' the cursor focus must be in the main display in order for this to work.&lt;br /&gt;
&lt;br /&gt;
=Additional Resources=&lt;br /&gt;
[[:File:ISAT_Quick_Start.pdf|ISAT Quick Start Guide]]&lt;br /&gt;
&lt;br /&gt;
[[ISAT_Demonstration_Scenarios|Demonstration Scenarios]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Create_Use_Custom_Cells.pdf|Create and Use Custom Cells on MiniSim]]&lt;br /&gt;
&lt;br /&gt;
[[:File:Function_ReadCell_20180824.pdf|ReadCell function]]&lt;br /&gt;
&lt;br /&gt;
[[:File:TrafficManager_Ch12.NADS.Internal_ISAT_UsersGuide.pdf|Traffic Manager]]&lt;br /&gt;
&lt;br /&gt;
=ISAT Reference Manual=&lt;br /&gt;
The information provided in the user guide is intended to provide a jump start on the concepts and tools of scenario authoring using ISAT.&lt;br /&gt;
&lt;br /&gt;
The [[ISAT_Reference_Manual_Table_of_Contents#ISAT_Reference_Manual|reference manual for ISAT can be found here.]]&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Isat_geometric_position_trigger.png&amp;diff=3938</id>
		<title>File:Isat geometric position trigger.png</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Isat_geometric_position_trigger.png&amp;diff=3938"/>
				<updated>2023-08-29T20:27:13Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	<entry>
		<id>https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Isat_expression_trigger.png&amp;diff=3936</id>
		<title>File:Isat expression trigger.png</title>
		<link rel="alternate" type="text/html" href="https://www.nads-sc.uiowa.edu/minisim/wiki/index.php?title=File:Isat_expression_trigger.png&amp;diff=3936"/>
				<updated>2023-08-29T20:27:12Z</updated>
		
		<summary type="html">&lt;p&gt;Shawn Allen: File uploaded with MsUpload&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;File uploaded with MsUpload&lt;/div&gt;</summary>
		<author><name>Shawn Allen</name></author>	</entry>

	</feed>