<?xml version="1.0" encoding="UTF-8"?>
<!--xml文件用本行开头和结尾的符号表示注释内容。本文件所加注释仅是为了读者了解实验控制平台的实验脚本文件格式和功能，并说明空间站舱外任务实验的设计。注释内容可以删除。-->
<!--xml文件为文本格式文件，可用任何文本编辑软件编写，但建议使用Visual Studio以及其他专业的xml编写软件，以确保格式正确性和提高编写的效率。-->

<!--本文件中提供了较多注释，比较全面地示范了UniExpMaster及配套软件支持的实验脚本文件的编写。-->

<!--
除了各种测量设备所需要的计算机，空间站舱外作业任务实验平台还需要用到5台计算机：
1. 主试计算机：普通计算机即可,设置静音，用来进行实验过程控制和监视，运行实验控制平台程序和数据转发器(运行Master.exe程序后一起启动），命名为Master，主试运行Master.exe程序后调入实验脚本文件，在各方准备好后即可开始执行实验过程；
2. 仿真计算机1：要求有Nvida显卡，放在主试端,设置静音，运行空间站仿真系统OnOrbit.exe，接收实验控制平台的所有命令，并向相机视图监视计算机同步信息，主试可以监视实验过程中空间站所有部分的情况；
3. 相机视图监视计算机：要求有Nvida显卡，放在参试者端,设置静音，根据仿真计算机1传递的信息，生成相机的视图并显示，模拟舱内航天员可以看到的实时图像信息，包括机械臂和航天员的活动，用于实时监视，主试在实验前运行SimDisplay.exe程序；
4. 仿真计算机2：要求有Nvida显卡，放在参试者端,设置静音，运行空间站仿真系统OnOrbit.exe，操作计算机上运行的实验命令处理程序UniExpTeleRobot.exe向仿真计算机2只发送或转发机械臂控制命令，相当于舱内航天员可以用的仿真系统；
   参试者可以看到空间站上机械臂的运动，但看不到航天员（空间站上没有航天员位姿传感器）；
5. 操作计算机：普通计算机即可,放在参试者端,设置合适音量，运行任务实验程序UniExpTeleRobot.exe，按照TeleRobot_Settings.txt中的ClientName命名（参试者使用时需以“Participant”开头命名，以限定只有参试者使用的功能，否则拥有完整功能），类别为Participant。
   可对机械臂进行操作，接收实验控制平台的所有命令并转发给仿真计算机1，并将涉及机械臂的控制命令转发给仿真计算机2。
   如用到多名参试者协同，则可增加操作计算机，并修改TeleRobot_Settings.txt中的ClientName以相互区分。
-->

<!--
空间站舱外作业任务实验程序的功能可以支持以下自变量的研究，具体采用哪些自变量及其水平，则在参试者文件及后文中指定：
    AutoCollisionDetection:自动碰撞检测功能是否启用。
    AutoCollisionDetectionConservativeness：碰撞检测保守性，高保守性时采用最大包络检测，不会漏报但误报高，低保守性用最大包络减某个设定值进行计算，可能漏报但误报低。
    AutoCollisionDetectionTransparency碰撞检测透明度：是否告知碰撞检测是怎么近似计算的，以及可能的漏报误报风险，由主试操控。
    AutoPath：是否启用自动路径规划，启用时会根据少数设定点自动计算沿舱壁运动的中间点，有一定可靠度（可根据预设点不同来进一步设定可靠度），但不保证没有碰撞。
    AutoViewSelection：自动视图选择，以更好地监视碰撞风险或指导机械臂操控，但不保证完全足以进行安全监视。
    TimePressure:完成任务（整体或部分，取决于设置位置）的可用时间，单位为秒。
    TimeDelay：从控制命令发出到执行之间的时间差，单位为秒。
    MonitoringDifficulty：不同监视视图的选择对应不同的监视难度（是否容易看清楚、是否有干扰物妨碍观察等）。
    RiskLevel：风险大小可通过路径设置和物体漂移成都进行设置。
除以上自变量外，还可以考虑其他不依赖于该任务实验程序的其他自变量，如人员特性（空间认知、注意广度等与本任务实验背景尤其相关）和状态、显示屏特性、环境条件等。
-->

<!--
本示例实验设置的实验条件如下：
AutoCollisionDetection宜设为组内变量，设启用（Yes）和不启用（No）两个水平，在参试者文件中可用代名“Within_AutoColDect1”“Within_AutoColDect2”进行设置。
  按两个变量设置是为了方便在实验文件中实现平衡，以下实验文件编写时用代号表示水平，参试者文件中轮换两个变量的设置，即可方便地实现顺序平衡。本实验暂不研究这个自变量，按Yes设置。
AutoCollisionDetectionConservativeness宜设为组内变量，在AutoCollisionDetection为启用时才有效，可设高和低两个水平，用设置最小距离（按最大包络近似计算）的报警阈值来实现，对应了
  不同的漏报率和误报率。报警时，最小距离用红色显示（可考虑加入报警声），否则用黑色显示。在"空间站舱外作业.sub.txt"文件中，代名为“Within_ColDectConv1”和“Within_ColDectConv2”。
RiskOccurence宜设为组内变量，通过去程和回程是否有碰撞风险来设定，共4种不同的搭配，可分高（去回皆有风险）、中（去回仅有一个有风险）、低（去回皆无风险）三个个水平。
  在"空间站舱外作业.sub.txt"文件中，用Within_GoPathFile1（称G1）和Within_GoPathFile2（称G2）设置两个对应有无风险的去程轨迹文件名，用Within_BackPathFile1（称B1）和Within_BackPathFile2（称B2）
  设置两个对应有无风险的回程轨迹文件名，本实验文件按照G1B1、G1B2、G2B1和G2B2来编写实验条件。
AutoViewSelection宜设为组内变量，设启用（Yes）和不启用（No）两个水平，在参试者文件中可用代名“Within_AutoView1”“Within_AutoView2”进行设置，本实验暂不研究这个自变量，按Yes设置。
组内变量共2X4=8种组合情形（后面需要相应设置8个ExperimentCondition，需考虑顺序平衡，每种条件在每个顺位出现一次，则参试者人数应为8的倍数；
每种实验条件下的试次暂定1次。
每名参试者共需做8X1=8试次，每个试次的时间按时间压力为12分钟估算，正式实验部分时长约96分钟，总时长另加约30分钟其他时间。
    
AutoCollisionDetectionTransparency宜设为组间变量，在AutoCollisionDetection为启用时才有效，设高（High，高保守性时告知参试者碰撞检测采用最大包络近似计算，结果很保守，报警时可能并没有碰撞；
  低保守性时告知参试者采用的是近似计算，可能漏报也可能误报）和低（仅告知有碰撞检测功能，不告知参试者碰撞检测的方法，）两个水平。在"空间站舱外作业.sub.txt"文件中简写为“AutoColDetectTrans”，
  并用“AutoColDetectTransText”给出说明文字。
TimePressure设为组间变量或组内变量均可，本实验针对救援任务片段的机械臂运动，设置为180秒（3分钟）和360秒（6分钟）。
AutoPath设为组间变量或组内变量均可，设启用（Yes）和不启用（No）两个水平，本实验暂不研究这个自变量，按No设置。
TimeDelay设为组间变量或组内变量均可，针对天线维修任务片段的机械臂调整和救援任务片段的机械臂运动，可考虑设置为0秒钟和2秒钟，本实验暂不研究这个自变量，按无延迟（即0秒）设置。
如果选择前2个为组间变量，则有2X2=4种组合情形，按每种情形下招聘16人估计，参试者人数为64人（符合示例的组内变量顺序平衡需要）。
-->

<Experiment Name="空间站舱外作业">
  <Description>空间站舱外作业实验</Description>
  <!--ApplicationFile用来说明任务实验程序的功能，例如可以设置的自变量及其水平等，可以不指定。-->
  <ApplicationFile>空间站舱外作业.app.xml</ApplicationFile>
  <!--参试者对应的组间实验条件可以在后缀为“.sub.txt”的参试者文件中指定，组内变量的实验顺序可以在该文件中以ExpSequence指定，或者用以“Within_”开头（以区别于组间变量）的代名指定，在后面实验条件设定中用[代名]表示.
  编写该文件的好处是主试实验控制平台能根据参试者ID自动通告实验条件设置，以便任务实验程序自动进行功能和界面配置。可以不编写该文件，只是失去这种好处而已。-->
  <ParticipantFile>空间站舱外作业.sub.txt</ParticipantFile>
  <ExperimenterName>某某某</ExperimenterName>
  <!--全局性变量可在此处设置，在整个实验过程中有效，其中“{……}”表示变量替换，用大括号内变量的值（取自参试者文件或本文件设定，变量名要一致）替换。参试者文件已设定的变量不必在此设定。
      以下示例其实与参试者文件中的设定重复，仅为示例需要，但也有助于本脚本文件的理解。-->
  <Settings>AutoColDetectTrans:{AutoColDetectTrans};TimePressure:{TimePressure}</Settings>
  <ParticipantNum>72</ParticipantNum>

  <!--主试端的实验控制平台对于每一节（session）都会有开始和结束的按钮，即每一节的开始和结束是由主试控制的。一旦某一节开始，其内的实验内容都自动控制。-->
  <!--实验控制平台提供了网络通讯的标准模式和动态链接库，参照示例可以容易地实现与主控平台以及其他客户端程序的通讯——收发命令和信息。-->
  <!--下面一节启动各种测量设备，可以根据设备的接口协议编写程序，在接到Start命令后向设备发出开始测量的命令，否则可以手工启用设备。-->
  <!--下句中Mark用以在某部分或动作开始和结束时向测量设备发送成对打标命令（以方便后续数据处理），需要根据测量设备接口编写程序处理实验控制平台发出的"SetMark#Mark:n"打标命令，其中n即为此处设置的Mark号。
      不写Mark是可以的，只是不发出打标命令而已。有些测量设备的Mark号限制为255以内正整数。
      建议Session统一从220起编Mark号，Action从100起编Mark号，Condition在200-219之间编Mark号，Trial自动按顺序号编Mark号。-->
  <Session ID="1" Name="启动" Mark="221">
    <Description>启动测量设备</Description>
    <!--Performer可以是具体的客户端名称，也可以是客户端类型（共有“Master”、“Simulator”、“Participant”和“Instrument”四类），详见《转发器协议及其使用要点》。
    如果设定为某类型，则命令将被发给所有声明为该类型的客户端，否则只发给指定的客户端。-->
    <Performer>Instrument</Performer>
    <!--所有ID号只是为了区分，没有特别的格式要求，只需确保唯一性。-->
    <Action ID="1.1" Name="启动" Command="Start">
      <Performer>Instrument</Performer>
    </Action>
  </Session>

  <!--下面一节“静息”主要是用来测来能够参试者的各种基础生理数据。如果要进行认知能力等方面测试，可以安排在此之前。-->
  <Session ID="2" Name="静息测量基础生理数据" Mark="222">
    <Performer>Instrument</Performer>
    <!--下面的Action显示文本，指示参试者静息8分钟（由命令中“Duration:480”指定，目的是获取基础生理数据。-->
    <!--实验控制平台提供的动态链接库能够自动执行显示文本\图片和音频信息、播放音视频、倒计时（时间压力）、弹出问卷、执行外部程序等标准组件。使用者如果需要使用特殊的命令，也可以自行编写外部处理程序，挂接到标准组件程序执行。-->
    <Action ID="2.1" Name="提示静息" Command="DisplayTextMessage#Duration:480;Margin:25;Width:800;Text:请静息8分钟，本窗口会自动关闭;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <!--
      每个Action可以设置StartCondition、StartSetting和EndSetting，其中：
      StartCondition用来指定Action执行的前提条件，满足前提条件时该action 才开始被执行，否则一直等待；
      StartSetting和EndSetting分别用来指定Action执行之前和之后所做的变量设置，与StartCondition结合可用来控制同一组Action、RepeatedActionBefore或RepeatedActionAfter的动作先后顺序。
      EndCondition用来指定Action执行的结束条件，一旦满足结束条件，该action就将自动终止,否则将一直进行或等待；对于SetCountdown和SetTimePressure命令，在EndCondition条件满足时即结束计时，但如果计时结束，则不等待EndCondition。
      所谓“组”是指在同一层次下的相同主题条目的集合。
      -->
      <EndSetting>RestEnded:Yes</EndSetting>
      <!--同一组Action、RepeatedActionBefore和RepeatedActionAfter为并行关系，即可以同时执行，除非通过StartCondition、StartSetting和EndSetting控制先后顺序。
      WaitForExit为Yes时该Action必须完成才能执行本组动作之后的内容，用来确保在执行下一组动作之前某动作已经执行完毕，也控制了不同组动作之间的时序。WaitForExit默认为No。-->
      <WaitForExit>Yes</WaitForExit>
    </Action>
  </Session>

  <Session ID="3" Name="培训" Mark="223">
    <Performer>Participant</Performer>
    <Action ID="3.1" Name="培训开始打标" Command="SetMark#Mark:254">
      <Performer>Instrument</Performer>
    </Action>
    <Action ID="3.2" Name="实验介绍" Command="PlayVideo#Source:ExpIntrod.mp4;Loop:Yes">
      <Performer>Participant</Performer>
      <ResponseTips>如果你已经理解，请点击“完成”按钮；如果你决定放弃，请点击“取消”按钮。</ResponseTips>
      <ResponseType>Button:完成,取消</ResponseType>
      <StartSetting>PlayVideoEnded:No</StartSetting>
      <EndSetting>PlayVideoEnded:Yes</EndSetting>
      <WaitForExit>Yes</WaitForExit>
    </Action>
    <Action ID="3.3" Name="培训结束打标" Command="SetMark#Mark:254">
      <Performer>Instrument</Performer>
      <StartCondition>PlayVideoEnded:Yes</StartCondition>
    </Action>
  </Session>

  <Session ID="4" Name="参试者自由练习" Mark="224">
    <Performer>Participant</Performer>
    <Action ID="4.1" Name="提示" Command="DisplayTextMessage#Duration:6;Margin:25;Width:800;Text:下面开始10分钟练习。您可以熟悉程序界面和功能，学习使用按钮和摇杆进行机械臂控制。;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <StartSetting>ShowTipEnded:No</StartSetting>
      <EndSetting>ShowTipEnded:Yes</EndSetting>
      <WaitForExit>Yes</WaitForExit>
    </Action>
    <Action ID="4.2" Name="练习开始打标" Command="SetMark#Mark:253">
      <Performer>Instrument</Performer>
    </Action>
    <!--倒计时命令其实与时间压力命令相同-->
    <Action ID="4.3" Name="倒计时" Command="SetCountdown#TimeAmount:600;Tip:剩余时间（秒）：">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
      <StartSetting>CountdownEnded:No</StartSetting>
      <EndSetting>CountdownEnded:Yes</EndSetting>
    </Action>
    <Action ID="4.4" Name="练习结束打标" Command="SetMark#Mark:253">
      <Performer>Instrument</Performer>
      <StartCondition>CountdownEnded:Yes</StartCondition>
    </Action>
  </Session>

  <Session ID="5" Name="正式实验基本设置" Mark="225">
    <Performer>Participant</Performer>

    <!--下面的Action只在本Session执行一次-->
    <Action ID="5.1" Name="实验开始提示" Command="DisplayTextMessage#Duration:3;Margin:25;Width:800;Text:实验即将开始……;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <StartSetting>ShowTipEnded:No</StartSetting>
      <EndSetting>ShowTipEnded:Yes</EndSetting>
      <WaitForExit>Yes</WaitForExit>
    </Action>
    <Action ID="5.2" Name="设置是否启用自动路径规划" Command="SetFunction#AutoPath:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.3" Name="设置是否开启碰撞监测" Command="SetFunction#CollisionDetection:Yes">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <!--下面一条命令允许参试者直接将物体移动到指定位置。-->
    <Action ID="5.4" Name="禁止位置设置和保存" Command="SetFunction#SetPosition:No;SavePosition:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <!--下面一条命令中“ControlRatio”用来设定摇杆操作的灵敏度。-->
    <Action ID="5.5" Name="禁用摇杆操作" Command="SetFunction#JoyStickUse:No;ControlRatio:1">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.6" Name="禁用声控操作和手势操作" Command="SetFunction#AudioCtrl:No;HandCtrl:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.7" Name="不显示坐标系" Command="SetFunction#ShowCoordinateSystem:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <!--下面一条命令允许参试者设定步进量，然后通过按钮进行点动/连动操作。最多时有9个点动按钮和9个连动按钮，涉及7个关节和2个视场角。-->
    <!--实验任务只需要参试者操作机械臂第2和第4关节，以降低难度，因此只启用两个点动按钮。-->
    <Action ID="5.8" Name="设置是否启用按钮点动/连动" Command="SetFunction#ButtonMove:Yes;StepMoveFreedoms:No,Yes,No,Yes,No,No,No,No,No;ContMoveFreedoms:No,No,No,No,No,No,No,No,No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <!--下面一条命令禁止参试者运行事先保存的路径。-->
    <Action ID="5.9" Name="禁止路径运动和漂移运动" Command="SetFunction#RunPath:No;Drift:No;DriftReturn:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <!--以下示例的命令中凡带有Type和Name的，都必须同时指定。-->
    <Action ID="5.10" Name="新增核心舱外看向节点舱相机" Command="SetTarget#Type:相机;Name:核心舱外看向节点舱相机;ID:100;BaseID:0;PosOrient:4200,-2000,2000,0,0,0;FieldOfView:60">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.11" Name="新增舱壁爬行轴向监视相机" Command="SetTarget#Type:相机;Name:舱壁爬行轴向监视相机;ID:101;BaseID:0;PosOrient:13800,-1730,1000,180,0,0;FieldOfView:60;ViewWindow:四分窗口2">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.12" Name="新增核心舱右侧太阳翼上方全景监视相机" Command="SetTarget#Type:相机;Name:核心舱右翼上全景相机;ID:102;BaseID:0;PosOrient:7800,2050,14050,0,90,-90;FieldOfView:65;ViewWindow:四分窗口1">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.13" Name="新增核心舱右侧太阳翼下方全景监视相机" Command="SetTarget#Type:相机;Name:核心舱右翼下全景相机;ID:103;BaseID:0;PosOrient:7800,-2050,14050,0,90,-90;FieldOfView:65;ViewWindow:主窗口">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.14" Name="新增核心舱左侧太阳翼上方全景监视相机" Command="SetTarget#Type:相机;Name:核心舱左翼上全景相机;ID:104;BaseID:0;PosOrient:7800,2050,-14050,0,-90,-90;FieldOfView:65">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.15" Name="新增核心舱左侧太阳翼下方全景监视相机" Command="SetTarget#Type:相机;Name:核心舱左翼下全景相机;ID:105;BaseID:0;PosOrient:7800,-2050,-14050,0,-90,-90;FieldOfView:90;ViewWindow:四分窗口3">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.16" Name="新增天线维修监视相机" Command="SetTarget#Type:相机;Name:天线维修监视相机;ID:106;BaseID:0;PosOrient:7000,1500,5000,154,46,10;FieldOfView:60;ViewWindow:四分窗口4">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.17" Name="隐藏其他航天员" Command="SetTarget#Type:航天员;Name:航天员3;PosOrient:3000,0,0,0,0,0">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.18" Name="隐藏其他航天员" Command="SetTarget#Type:航天员;Name:航天员4;PosOrient:3000,0,0,0,0,0">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <Action ID="5.19" Name="隐藏其他航天员" Command="SetTarget#Type:航天员;Name:航天员5;PosOrient:3000,0,0,0,0,0">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <!--下面一条命令设置航天员站上机械臂（只能是航天员1）。-->
    <Action ID="5.20" Name="设置航天员站上机械臂" Command="SetArmGrasp#Type:航天员;Name:航天员1;ArmName:大臂;IfGrasp:Yes">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
    <!--下面一条命令限定操作对象类型机械臂，不允许操作相机和其他物体。-->
    <Action ID="5.21" Name="限定操作对象类型" Command="SetFunction#CameraOperation:No;ObjectOperation:No;ArmOperation:No;ByAngle:No;byPos:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipEnded:Yes</StartCondition>
    </Action>
  </Session>

  <!--后面按照AutoColDetectTrans的两个水平分成两个正式实验Session-->
  <Session ID="6" Name="正式实验1" Mark="226">
    <Performer>Participant</Performer>
    <!--本session共同的组内变量及其相关变量可在此处设置，本session结束时被清除。-->
    <!--下句中AutoColDetectTransText1是与前面的设置Within_ColDectConv1对应的。-->
    <!--下句设置TipTrialEnded:Yes是因为每个试次开始都以此为条件-->
    <Settings>ColDectConv:{Within_ColDectConv1};AutoColDetectTransText:{AutoColDetectTransText1};TipTrialEnded:Yes</Settings>

    <!--关于各种Action的使用：
    RepeatedActionBefore用来指定所有ExperimentCondition都要统一先执行的动作（例如静息），然后才执行ExperimentCondition内指定的Action；
    RepeatedActionAfter用来指定ExperimentCondition内的Action执行完毕后统一都要执行的动作（如问卷调查）；
    而每个ExperimentCondition之内指定的Action则是该实验条件要执行的特殊动作。
    在Session下、Condition前指定的Action在所有Condition前只执行一次；
    而RepeatedActionBefore和RepeatedActionAfter以及Condition内指定的Action则是每个试次都执行，且是按照RepeatedActionBefore、Condition内Action、RepeatedActionAfter的顺序分组执行。
    在一个Session下同属RepeatedActionBefore或RepeatedActionAfter的同组动作为并行关系，在同一个Session或Condition下的同组Action也为并行关系。
    如果每个实验条件下要执行的动作可以在形式上一样定义，则可以均按RepeatedActionBefore或RepeatedActionAfter进行定义，而Condition部分的作用主要是进行条件设置以及执行特殊Action。
    -->
    <!--
    下面的诸多动作每个实验条件的每个试次都要重复执行，这些动作开始执行后才执行ExperimentCondition内定义的动作。
    由于有组内变量的替换，尽管所有动作的定义形式上一样，但不同ExperimentCondition下实际执行内容会不一样。
    在开始每一个ExperimentCondition时，首先设置了它的Settings，所有其中的变量在动作定义中可以引用。
    -->

    <RepeatedActionBefore ID="6.b1" Name="碰撞检测说明" Mark="101" Command="DisplayTextMessage#Duration:10;Margin:25;Width:800;Text:{AutoColDetectTransText};FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <StartCondition>TipTrialEnded:Yes</StartCondition>
      <StartSetting>ShowDesEnded:No</StartSetting>
      <EndSetting>ShowDesEnded:Yes</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b2" Name="监视任务提示-前往维修地点" Mark="102" Command="DisplayTextMessage#Duration:10;Margin:25;Width:800;Text:机械臂将运送1号航天员到维修位置，2号航天员将从舱壁爬行过去协助。本实验进行了适当的加速。请注意观察运送和爬行过程，如果发现有碰撞危险，请按相应的危险报告按钮。;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowDesEnded:Yes</StartCondition>
      <StartSetting>ShowTip1Ended:No</StartSetting>
      <EndSetting>ShowTip1Ended:Yes</EndSetting>
    </RepeatedActionBefore>
    <!--Time为运动时间。-->
    <RepeatedActionBefore ID="6.b3" Name="机械臂按既定轨迹执行运送1号航天员任务" Mark="103" Command="RunPath#Type:机械臂;Name:大臂;ByAngle:Yes;Time:240;FileName:大臂从节点舱到天线轨迹（无径向飞船）.txt">
      <Performer>Participant</Performer>
      <StartCondition>ShowTip1Ended:Yes</StartCondition>
      <StartSetting>ArmMoveStarted:Yes</StartSetting>
      <!--“RunPath+对象名+Ended”在实验任务程序开始执行RunPath命令时自动设置为"No"，完成后将自动设置为Yes。-->
      <EndCondition>RunPath大臂Ended:Yes</EndCondition>
      <EndSetting>ArmMoveStarted:No</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b4" Name="2号航天员按既定轨迹从舱壁爬行" Mark="104" Command="RunPath#Type:航天员;Name:航天员2;Time:200;FileName:{GoPathFile};OptionalFileName:{GoPathFile}Optional">
      <Performer>Participant</Performer>
      <StartCondition>ArmMoveStarted:Yes</StartCondition>
      <StartSetting>HTYMoveStarted:Yes;RunPath航天员2Ended:No</StartSetting>
      <EndCondition>RunPath航天员2Ended:Yes</EndCondition>
      <EndSetting>HTYMoveStarted:No</EndSetting>
    </RepeatedActionBefore>
    <!--对于Monitoring命令，实验任务程序会记录开始时间、结束时间、用时以及【危险报告】或【失能报告】按钮的首次有效点击时间、末次有效点击时间、有效点击次数、无效点击次数、
        监视期间告警次数、有告警情况下危险报告次数、无告警情况下危险报告次数。
        点击的有效性根据是否在StartPosOrient和EndPosOrient之间点击进行判断。可以设置ByX、ByY和ByZ来指定按哪个坐标进行位置判断。-->
    <!--“Monitoring+对象名+Ended”在实验任务程序开始执行Monitoring命令时自动设置为"No"，完成后将自动设置为Yes。这里没用到此变量。-->
    <RepeatedActionBefore ID="6.b5" Name="运动过程监视" Mark="105" Command="Monitoring#Type:航天员;Name:航天员2;ByX:Yes;StartPosOrient:11800;EndPosOrient:9450">
      <Performer>Participant</Performer>
      <StartCondition>ArmMoveStarted:Yes</StartCondition>
      <EndCondition>RunPath航天员2Ended:Yes</EndCondition>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b6" Name="设置载荷位置" Mark="106" Command="SetTarget#Type:其他物体;Name:载荷;PosOrient:4000,-325,2600,0,-22,0">
      <Performer>Participant</Performer>
      <StartCondition>RunPath大臂Ended:Yes;RunPath航天员2Ended:Yes</StartCondition>
      <StartSetting>SetLoadPosEnded:No</StartSetting>
      <EndSetting>SetLoadPosEnded:Yes</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b7" Name="操作任务提示-机械臂微调" Mark="107" Command="DisplayTextMessage#Duration:10;Margin:25;Width:800;Text:机械臂已接近维修位置，但还需要进行微调，以便适合作业，请通过第2和第4关节操作调整机械臂位姿，使臂上航天员的双手差不多捧住示意物体。;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <StartCondition>SetLoadPosEnded:Yes</StartCondition>
      <StartSetting>ShowTipStartArmAdjustStarted:Yes;ShowTipStartArmAdjustEnded:No</StartSetting>
      <EndSetting>ShowTipStartArmAdjustEnded:Yes</EndSetting>
    </RepeatedActionBefore>
    <!--下句中的目标位置DestPosOrient是事先测试出来的;Closeness设定调整的接近度要求。-->
    <!--对于PosAdjust命令，实验任务程序会记录开始时间、结束时间、用时、调整按钮点击次数、无关点击次数、调整过程中的碰撞次数。-->
    <RepeatedActionBefore ID="6.b8" Name="机械臂微调" Mark="108" Command="PosAdjust#Type:机械臂;Name:大臂;ByAngle:Yes;Closeness:5;DestPosOrient:251,79,-13,-63,2,160,168,0,0">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipStartArmAdjustEnded:Yes</StartCondition>
      <StartSetting>PosAdjustStarted:Yes;PosAdjustEnded:No</StartSetting>
      <!--设置结束条件，任务实验程序根据调整的结果或者参试者的提交动作决定是否结束-->
      <!--“PosAdjust+对象名+Ended”在实验任务程序开始执行PosAdjust命令时自动设置为"No"，完成后将自动设置为Yes。-->
      <EndCondition>PosAdjust大臂Ended:Yes</EndCondition>
      <EndSetting>PosAdjustStarted:No;PosAdjustEnded:Yes</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b9" Name="监视任务提示-维修过程" Mark="109" Command="DisplayTextMessage#Duration:10;Margin:25;Width:800;Text:航天员现在均已到达维修位置，开始作业过程（简化），请监视航天员，如果发现有碰撞危险，请按相应的危险报告按钮。;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <StartCondition>PosAdjustEnded:Yes</StartCondition>
      <StartSetting>ShowTip2Ended:No</StartSetting>
      <EndSetting>ShowTip2Ended:Yes</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b10" Name="倒计时-维修过程监视" Mark="110" Command="SetCountdown#TimeAmount:300;Tip:剩余时间（秒）：;AvailableTimeColor:255,0,100,0;Position:TopRight;IfVisible:No">
      <Performer>Participant</Performer>
      <StartCondition>ShowTip2Ended:Yes</StartCondition>
      <StartSetting>CountdownRepairEnded:No</StartSetting>
      <EndSetting>CountdownRepairEnded:Yes</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b11" Name="任务过程监视" Mark="111" Command="Monitoring#Type:航天员;Name:航天员2;StartPosOrient:4650,2250,1150,-90,28,20;EndPosOrient:5600,-2100,1600,-90,138,178">
      <Performer>Participant</Performer>
      <StartCondition>ShowTip2Ended:Yes</StartCondition>
      <EndCondition>CountdownRepairEnded:Yes</EndCondition>
    </RepeatedActionBefore>
    <!--InterestPos为指定的目标漂移方位；MaxDis为最大漂移距离，MaxDis不大于0时表示取消漂移；MaxFrequencyToGo为漂向目标或返回原位频率；TimeToGo为返回原位时间；AngleRatio和DisRatio分别用来控制角度和位移的漂移量；ChangeFrequency为改变漂移速度和方向的频度。
        这些参数的默认值在TeleRobot_Settings.txt中设置-->
    <RepeatedActionBefore ID="6.b12" Name="设置2号航天员有偏向漂移" Mark="112" Command="Drift#Type:航天员;Name:航天员2;MaxDis:100;InterestPos:3900,2100,1250,-90,28,20;MaxFrequencyToGo:0.005;TimeToGo:6;AngleRatio:0.005;DisRatio:0.1;ChangeFrequency:0.002">
      <Performer>Participant</Performer>
      <StartCondition>ShowTip2Ended:Yes</StartCondition>
      <EndCondition>CountdownRepairEnded:Yes</EndCondition>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b13" Name="设置载荷自由漂移" Mark="113" Command="Drift#Type:其他物体;Name:载荷;MaxDis:50;MaxFrequencyToGo:0.25;TimeToGo:5">
      <Performer>Participant</Performer>
      <StartCondition>ShowTip2Ended:Yes</StartCondition>
      <EndCondition>CountdownRepairEnded:Yes</EndCondition>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b14" Name="维修结束时停止2号航天员漂移" Mark="114" Command="Drift#Type:航天员;Name:航天员2;ToStop:Yes">
      <Performer>Participant</Performer>
      <StartCondition>CountdownRepairEnded:Yes</StartCondition>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b15" Name="维修结束时停止载荷漂移" Mark="115" Command="Drift#Type:其他物体;Name:载荷;ToStop:Yes">
      <Performer>Participant</Performer>
      <StartCondition>CountdownRepairEnded:Yes</StartCondition>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b16" Name="隐藏载荷" Mark="116" Command="SetTarget#Type:其他物体;Name:载荷;PosOrient:0,0,0,0,0,0">
      <Performer>Participant</Performer>
      <StartCondition>CountdownRepairEnded:Yes</StartCondition>
      <StartSetting>HideLoadPosEnded:No</StartSetting>
      <EndSetting>HideLoadPosEnded:Yes</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b17" Name="监视任务提示-维修结束" Mark="117" Command="DisplayTextMessage#Duration:10;Margin:25;Width:800;Text:维修过程结束，航天员即将返回。由于舱外作业工作了几个小时，航天员体力消耗很大。请注意观察返回过程，如果发现有碰撞危险或舱壁航天员疲劳不能自主移动，请相应按相应的危险报告或航天员失能报告按钮。;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <StartCondition>CountdownRepairEnded:Yes;RunPath大臂Ended:No;RunPath航天员2Ended:No</StartCondition>
      <StartSetting>ShowTipRepairEnded:No</StartSetting>
      <EndSetting>ShowTipRepairEnded:Yes</EndSetting>
    </RepeatedActionBefore>
    <RepeatedActionBefore ID="6.b18" Name="机械臂按既定轨迹执行运送1号航天员任务返回节点舱" Mark="118" Command="RunPath#Type:机械臂;Name:大臂;ByAngle:Yes;Reverse:Yes;FileName:大臂从节点舱到天线轨迹（无径向飞船）.txt;Time:240">
      <Performer>Participant</Performer>
      <StartCondition>ShowTipRepairEnded:Yes</StartCondition>
      <StartSetting>ArmMoveStarted:Yes</StartSetting>
      <EndCondition>RunPath大臂Ended:Yes</EndCondition>
      <EndSetting>ArmMoveStarted:No</EndSetting>
    </RepeatedActionBefore>
    <!--以下例子是根据运动位置设置监视起止点，上面的“维修过程监视”则是按时长控制监视过程，这是两种设置方法。-->
    <RepeatedActionBefore ID="6.b19" Name="运动过程监视" Mark="119" Command="Monitoring#Type:航天员;Name:航天员2;ByX:Yes;StartPosOrient:9450;EndPosOrient:11800">
      <Performer>Participant</Performer>
      <StartCondition>ArmMoveStarted:Yes</StartCondition>
      <EndCondition>RunPath航天员2Ended:Yes</EndCondition>
    </RepeatedActionBefore>

    <!--
      Within_GoPathFile1和Within_GoPathFile2为两个去程轨迹文件名交替使用；
      Within_BackPathFile1和Within_BackPathFile2为两个回程轨迹文件名交替使用；
      来回有无风险可以有4种组合，本实验针对RiskOccurence自变量按照4种组合设置4个实验条件，每个参试者采用的组合（对应实验顺序）在参试者文件中指定。
      -->
    <ExperimentCondition ID="6-1" TrialNum="1" Mark="201">
      <!--
        组内变量及其关联变量可在此处设置，所设置变量在本ExperimentCondition结束时被清除。
        每一个ExperimentCondition内执行RepeatedActionBefore、RepeatedActionAfter以及Condition内指定的Action所设置的变量在每一个Trial结束时被清除。
        本实验按照第一个组内变量ColDectConv划分Session，在Session层次对其做了设置；
        对于另一个组内变量RiskOccurence，前面RepeatedActionBefore和本部分的Action定义中用变量GoPathFile和BackPathFile进行形式上定义，此处需要根据该组内变量对GoPathFile和BackPathFile进行设置。
      -->
      <!--ToRescue是舱外作业任务实验程序约定的指示是否需要救援的关键字-->
      <Settings>GoPathFile:{Within_GoPathFile1};BackPathFile:{Within_BackPathFile1};ToRescue:No</Settings>

      <!--下面是在ExperimentCondition内定义的动作，当动作需要因ExperimentCondition而异的时候需要定义到ExperimentCondition内。本实验仅在航天员返回过程中有不同的动作。 -->
      <Action ID="6-1.1" Name="2号航天员按既定轨迹从舱壁返回" Mark="121" Command="RunPath#Type:航天员;Name:航天员2;FileName:{BackPathFile};OptionalFileName:Optional{BackPathFile};Time:200">
        <Performer>Participant</Performer>
        <StartCondition>ShowTipRepairEnded:Yes</StartCondition>
        <StartSetting>HTYMoveStarted:Yes</StartSetting>
        <EndCondition>RunPath航天员2Ended:Yes</EndCondition>
        <EndSetting>HTYMoveStarted:No</EndSetting>
        <WaitForExit>Yes</WaitForExit>
      </Action>
    </ExperimentCondition>

    <ExperimentCondition ID="6-2" TrialNum="1" Mark="202">
      <Settings>GoPathFile:{Within_GoPathFile1};BackPathFile:{Within_BackPathFile2};ToRescue:No</Settings>
      <Action ID="6-2.1" Name="2号航天员按既定轨迹从舱壁返回" Mark="122" Command="RunPath#Type:航天员;Name:航天员2;FileName:{BackPathFile};OptionalFileName:Optional{BackPathFile};Time:200">
        <Performer>Participant</Performer>
        <StartCondition>ShowTipRepairEnded:Yes</StartCondition>
        <StartSetting>HTYMoveStarted:Yes</StartSetting>
        <EndCondition>RunPath航天员2Ended:Yes</EndCondition>
        <EndSetting>HTYMoveStarted:No</EndSetting>
        <WaitForExit>Yes</WaitForExit>
      </Action>
    </ExperimentCondition>

    <ExperimentCondition ID="6-3" TrialNum="1" Mark="202">
      <Settings>GoPathFile:{Within_GoPathFile2};BackPathFile:{Within_BackPathFile1};ToRescue:No</Settings>
      <Action ID="6-3.1" Name="2号航天员按既定轨迹从舱壁返回" Mark="123" Command="RunPath#Type:航天员;Name:航天员2;FileName:{BackPathFile};OptionalFileName:Optional{BackPathFile};Time:200">
        <Performer>Participant</Performer>
        <StartCondition>ShowTipRepairEnded:Yes</StartCondition>
        <StartSetting>HTYMoveStarted:Yes</StartSetting>
        <EndCondition>RunPath航天员2Ended:Yes</EndCondition>
        <EndSetting>HTYMoveStarted:No</EndSetting>
        <WaitForExit>Yes</WaitForExit>
      </Action>
    </ExperimentCondition>

    <ExperimentCondition ID="6-4" TrialNum="1" Mark="204">
      <Settings>GoPathFile:{Within_GoPathFile2};BackPathFile:{Within_BackPathFile2};ToRescue:Yes</Settings>
      <!--此处设计2号航天员中途不能自主返回，停在某处（下句中StopAt指定，可以按所有坐标轴来指定，也可以设置ByX、ByY和ByZ来按某个坐标轴指定），参试者需在注意到问题后点击按钮报告，然后开始操纵机械臂救援-->
      <Action ID="6-4.1" Name="2号航天员按既定轨迹从舱壁返回" Mark="124" Command="RunPath#Type:航天员;Name:航天员2;FileName:{BackPathFile};OptionalFileName:Optional{BackPathFile};Time:200;StopAt:10050;ByX:Yes">
        <Performer>Participant</Performer>
        <StartCondition>ShowTipRepairEnded:Yes</StartCondition>
        <StartSetting>HTYMoveStarted:Yes</StartSetting>
        <EndCondition>RunPath航天员2Ended:Yes</EndCondition>
        <EndSetting>HTYMoveStarted:No</EndSetting>
        <WaitForExit>Yes</WaitForExit>
      </Action>
      <Action ID="6-4.2" Name="机械臂运动停止" Mark="126" Command="RunPath#Type:机械臂;Name:大臂;ToStop:Yes">
        <Performer>Participant</Performer>
        <!--任务实验程序根据参试者的失能报告确定ReportDisable，一旦收到报告，自动设置RunPathXXXEnded:No，其中XXX为任务中涉及的航天员-->
        <StartCondition>ReportDisable:Yes</StartCondition>
        <StartSetting>ArmMoveStopped:No</StartSetting>
        <EndSetting>ArmMoveStopped:Yes</EndSetting>
        <EndCondition>RunPath大臂Ended:Yes</EndCondition>
      </Action>
      <Action ID="6-4.3" Name="操作任务提示-机械臂救援" Mark="125" Command="DisplayTextMessage#Duration:12;Margin:25;Width:800;Text:根据报告，航天员失能停在舱壁上，现启动紧急救援程序，地面确定了2号航天员的大致方位，并将机械臂运动到附近。请通过第2和第4关节操作机械臂，要求在给定时间内靠近2号航天员，当两个航天员高度一致且近乎并排时救援任务成功。;FontName:Times New Roman;FontSize:16;FontColor:255,255,0,0;Flash:No">
        <Performer>Participant</Performer>
        <StartCondition>ArmMoveStopped:Yes</StartCondition>
        <StartSetting>ShowTipAidStarted:Yes;ShowTipAidEnded:No;RunPath大臂Ended:No;RescureEnded:No</StartSetting>
        <EndSetting>ShowTipAidEnded:Yes</EndSetting>
      </Action>
      <Action ID="6-4.4" Name="设置机械臂救援初始位置" Mark="127" Command="SetTarget#Type:机械臂;Name:大臂;PosOrient:251,29,-57,-77,89.5,160,168,60,60">
        <Performer>Participant</Performer>
        <StartCondition>ArmMoveStopped:Yes</StartCondition>
        <StartSetting>PresetArmPosEnded:No</StartSetting>
        <EndSetting>PresetArmPosEnded:Yes</EndSetting>
      </Action>
      <Action ID="6-4.5" Name="施加时间压力" Mark="128" Command="SetTimePressure#Source:tick.mp3;TimeAmount:{TimePressure};TimePressureTip:剩余时间（秒）：;AvailableTimeColor:255,255,0,0;Position:TopRight">
        <Performer>Participant</Performer>
        <StartCondition>PresetArmPosEnded:Yes</StartCondition>
        <EndSetting>TimePressureEnded:Yes</EndSetting>
        <EndCondition>AdjustArmPosEnded:Yes</EndCondition>
      </Action>
      <!--下句中的目标位置DestPosOrient是事先测试出来的-->
      <Action ID="6-4.6" Name="机械臂救援调整" Mark="129" Command="PosAdjust#Type:机械臂;Name:大臂;ByAngle:Yes;Closeness:8;DestPosOrient:251,41,-57,-115,89.5,160,168,60,60">
        <Performer>Participant</Performer>
        <StartCondition>PresetArmPosEnded:Yes</StartCondition>
        <StartSetting>PosAdjustStarted:Yes;PosAdjustEnded:No</StartSetting>
        <!--设置结束条件，任务实验程序根据调整的结果或者参试者的提交动作决定是否结束-->
        <EndCondition>PosAdjust大臂Ended:Yes</EndCondition>
        <!--StopTimeCounting用来结束时间压力计时，其后需带下划线和Action的ID号-->
        <EndSetting>PosAdjustStarted:No;RescureEnded:Yes;StopTimeCounting_6-4.5:Yes</EndSetting>
        <WaitForExit>Yes</WaitForExit>
      </Action>
      <Action ID="6-4.7" Name="救援任务完成提示" Mark="130" Command="DisplayTextMessage#Duration:3;Margin:25;Width:800;Text:救援任务已完成。;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
        <Performer>Participant</Performer>
        <StartCondition>RescureEnded:Yes</StartCondition>
        <StartSetting>ShowTipAidFinishedEnded:No</StartSetting>
        <EndSetting>ShowTipAidFinishedEnded:Yes;RunPath大臂Ended:Yes;RunPath航天员2Ended:Yes</EndSetting>
      </Action>
    </ExperimentCondition>

    <!--下面的诸多动作每个实验条件的每个试次都要执行，但都是在ExperimentCondition内定义的动作执行完后才执行-->
    <!--此处设置试次之间有30秒休息-->
    <RepeatedActionAfter ID="6.a1" Name="试次结束提示" Mark="131" Command="DisplayTextMessage#Duration:30;Margin:25;Width:800;Text:本次实验已完成，请略作休息（30秒）。;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <!--此处设置参试者确认，以便参试者可以决定是否马上继续-->
      <ResponseTips>点击【确定】按钮继续。</ResponseTips>
      <ResponseType>Button:确定</ResponseType>
      <StartCondition>RunPath大臂Ended:Yes;RunPath航天员2Ended:Yes</StartCondition>
      <StartSetting>TipTrialEnded:No</StartSetting>
      <EndSetting>TipTrialEnded:Yes</EndSetting>
      <WaitForExit>Yes</WaitForExit>
    </RepeatedActionAfter>
  </Session>

  <Session ID="7" Name="正式实验2" Mark="227">
    <Settings>ColDectConv:{Within_ColDectConv2};AutoColDetectTransText:{AutoColDetectTransText2};TipTrialEnded:Yes</Settings>
    <CopySession>6</CopySession>
    <Replace>6.:7.;6-:7-</Replace>
  </Session>

  <Session ID="8" Name="实验结束" Mark="228">
    <Action ID="8.1" Name="停止" Command="Stop">
      <Performer>Instrument</Performer>
    </Action>
    <Action ID="8.2" Name="实验结束致谢" Command="DisplayTextMessage#Duration:6;Margin:25;Width:800;Text:您已完成所有实验任务，感谢您的参与！;FontName:Times New Roman;FontSize:16;FontColor:255,0,100,0;Flash:No">
      <Performer>Participant</Performer>
      <ResponseTips>点击【确定】按钮退出。</ResponseTips>
      <ResponseType>Button:确定</ResponseType>
    </Action>
  </Session>
</Experiment>

<!--其他UniExpTeleRobot任务实验程序命令示例：
    <Action ID="X" Name="设置时间延迟" Command="SetFunction#TimeDelay:1000;DelayTimes:1">
      <Performer>Participant</Performer>
    </Action>
    <Action ID="X" Name="设置控制模式" Command="SetFunction#ControlMode:Yes">
      <Performer>Participant</Performer>
    </Action>
    <Action ID="X" Name="设置调试模式" Command="SetFunction#DebugMode:Yes">
      <Performer>Participant</Performer>
    </Action>
    <Action ID="X" Name="设置大臂锁死" Command="SetTarget#Type:机械臂;Name:大臂;IfLocked:Yes">
      <Performer>Participant</Performer>
    </Action>
    <Action ID="X" Name="设置机械臂某关节突然运动" Command=""Drift#Type:机械臂;Name:大臂;ByAngle:Yes;DriftingFreedom:Angle4;MaxDis:100;MaxFrequencyToGo:0.005;AngleRatio:0.005;ChangeFrequency:0">
      <Performer>Participant</Performer>
    </Action>
    
    Run Path命令扩展：课增加OptionalFileName, 用于在参试者点击【调整姿态】时切换到可选运动轨迹，在参试者点击【恢复姿态】时切换回FileName指定的轨迹，两个文件的轨迹点要一一对应。例如“RunPath#Type:航天员;Name:航天员2;FileName:1.txt;OptionalFileName:2.txt;Time:200”
    
    新添加的脚本文件格式：
      <CopySession>n</CopySession>：将ID=n的session直接复制过来(session的ID和Settings除外）
      <Replace>A1:A2;B1:B2</Replace>:对session的内容进行字符替换（Session的ID以及Mark、TrialNum等数值内容除外）
      
      {...}表示变量替换，前面可以有乘子，可以多层嵌套。例如"1.2{A}"表示用1.2乘以A的取值，其结果替换"{A}";
      (...)根据RelatedPairs进行变量名称替换，也可以多层嵌套。例如RelatedPairs设置了"A:B"，则"(A)"将由"B"取代。
      {...}和(...)可以嵌套使用，由里向外依次处理。同一表达式的变量替换或变量名称替换按照从左到右的顺序处理。分号隔开的各项设置按先后顺序依次处理。
      
      "^"符号表示将其前后字符串结合，用来灵活生成变量名，用法比RelatedPairs简单，以变量名称具有自明性和脚本文件易懂为原则考虑选用哪种方式。
      "^"符号可以和{...}、(...)结合使用。
      "^"符号可以省略，但可能影响可读性。例如，如果变量A的取值为"Dest"，B的取值为"1"，则"{A}^{B}"、"{A}^1"和"{A}1"结果都为"Dest1"。
-->
    