Ulm University, Faculty of Engineering and Computer Sciences, up: Dissertation
Institute of Artificial Intelligence

Downloaddownload file


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE domainModel SYSTEM "model.dtd">

<domainModel name="satellite2">
    <documentation>This is a hierarchical version of the IPC satellite domain.</documentation>

    <sortDefinition name="instrument"/>
    <sortDefinition name="satellite"/>
    <sortDefinition name="mode"/>
    <sortDefinition name="calib_direction">
        <documentation>
           These directions are used for instrument calibration only.
        </documentation>
    </sortDefinition>
    <sortDefinition name="image_direction"/>
    <sortDefinition name="direction" type="abstract">
        <documentation>
           Directions are all kinds of phenomenons and targets to which the satellite 
           and its instruments can be directed.
        </documentation>
        <subSortStatement subsort="calib_direction"/>
        <subSortStatement subsort="image_direction"/>
    </sortDefinition>

    <relationDeclaration name="on_board" type="rigid">
        <sortExpression name="instrument"/>
        <sortExpression name="satellite"/>
    </relationDeclaration>
    <relationDeclaration name="supports" type="rigid">
        <sortExpression name="instrument"/>
        <sortExpression name="mode"/>
    </relationDeclaration>
    <relationDeclaration name="pointing" type="flexible">
        <sortExpression name="satellite"/>
        <sortExpression name="direction"/>
    </relationDeclaration>
    <relationDeclaration name="power_avail" type="flexible">
        <sortExpression name="satellite"/>
    </relationDeclaration>
    <relationDeclaration name="power_on" type="flexible">
        <sortExpression name="instrument"/>
    </relationDeclaration>
    <relationDeclaration name="calibrated" type="flexible">
        <sortExpression name="instrument"/>
    </relationDeclaration>
    <relationDeclaration name="have_image" type="flexible">
        <sortExpression name="image_direction"/>
        <sortExpression name="mode"/>
    </relationDeclaration>
    <relationDeclaration name="calibration_target" type="rigid">
        <documentation>
           This relation models targets that are used for calibrating a specific instrument.
        </documentation>
        <sortExpression name="instrument"/>
        <sortExpression name="calib_direction"/>
    </relationDeclaration>

    <taskDeclaration name="turn_to" type="primitive">
        <documentation>
            The parameters of turning are:
            1. the satellite that is turning
            2. the direction the satellite is pointing to after turning
            3. the direction the satellite is pointing to before turning
        </documentation>
        <varDeclaration name="t_s" sort="satellite"/>
        <varDeclaration name="t_d_new" sort="direction"/>
        <varDeclaration name="t_d_prev" sort="direction"/>

        <atomic name="pointing">
            <variable name="t_s"/>
            <variable name="t_d_prev"/>
        </atomic>
        <and>
            <atomic name="pointing">
                <variable name="t_s"/>
                <variable name="t_d_new"/>
            </atomic>
            <not>
                <atomic name="pointing">
                    <variable name="t_s"/>
                    <variable name="t_d_prev"/>
                </atomic>
            </not>
        </and>
    </taskDeclaration>

    <taskDeclaration name="switch_on" type="primitive">
        <documentation>
            This action turns on the power supply for a satellite's instrument. 
            Please note that switching on an on-board unit de-calibrates it and 
            allocates all energy resources on the satellite.
        </documentation>
        <varDeclaration name="so_i" sort="instrument"/>
        <varDeclaration name="so_s" sort="satellite"/>

        <and>
            <atomic name="on_board">
                <variable name="so_i"/>
                <variable name="so_s"/>
            </atomic>
            <atomic name="power_avail">
                <variable name="so_s"/>
            </atomic>
        </and>
        <and>
            <atomic name="power_on">
                <variable name="so_i"/>
            </atomic>
            <not>
                <atomic name="calibrated">
                    <variable name="so_i"/>
                </atomic>
            </not>
            <not>
                <atomic name="power_avail">
                    <variable name="so_s"/>
                </atomic>
            </not>
        </and>
    </taskDeclaration>

    <taskDeclaration name="switch_off" type="primitive">
        <documentation>
            This action turns off the power supply for a satellite's instrument. Switching off an
            on-board unit makes all energy resources on the satellite available again.
        </documentation>
        <varDeclaration name="sof_i" sort="instrument"/>
        <varDeclaration name="sof_s" sort="satellite"/>

        <and>
            <atomic name="on_board">
                <variable name="sof_i"/>
                <variable name="sof_s"/>
            </atomic>
            <atomic name="power_on">
                <variable name="sof_i"/>
            </atomic>
        </and>
        <and>
            <not>
                <atomic name="power_on">
                    <variable name="sof_i"/>
                </atomic>
            </not>
            <atomic name="power_avail">
                <variable name="sof_s"/>
            </atomic>
        </and>
    </taskDeclaration>

    <taskDeclaration name="calibrate" type="primitive">
        <varDeclaration name="c_s" sort="satellite"/>
        <varDeclaration name="c_i" sort="instrument"/>
        <varDeclaration name="c_d" sort="calib_direction"/>

        <and>
            <atomic name="on_board">
                <variable name="c_i"/>
                <variable name="c_s"/>
            </atomic>
            <atomic name="calibration_target">
                <variable name="c_i"/>
                <variable name="c_d"/>
            </atomic>
            <atomic name="pointing">
                <variable name="c_s"/>
                <variable name="c_d"/>
            </atomic>
            <atomic name="power_on">
                <variable name="c_i"/>
            </atomic>

        </and>
        <and>
            <atomic name="calibrated">
                <variable name="c_i"/>
            </atomic>
        </and>
    </taskDeclaration>

    <taskDeclaration name="take_image" type="primitive">
        <varDeclaration name="ti_s" sort="satellite"/>
        <varDeclaration name="ti_d" sort="image_direction"/>
        <varDeclaration name="ti_i" sort="instrument"/>
        <varDeclaration name="ti_m" sort="mode"/>

        <and>
            <atomic name="calibrated">
                <variable name="ti_i"/>
            </atomic>
            <atomic name="pointing">
                <variable name="ti_s"/>
                <variable name="ti_d"/>
            </atomic>
            <atomic name="on_board">
                <variable name="ti_i"/>
                <variable name="ti_s"/>
            </atomic>
            <atomic name="power_on">
                <variable name="ti_i"/>
            </atomic>
            <atomic name="supports">
                <variable name="ti_i"/>
                <variable name="ti_m"/>
            </atomic>
        </and>
        <atomic name="have_image">
            <variable name="ti_d"/>
            <variable name="ti_m"/>
        </atomic>
    </taskDeclaration>

    <taskDeclaration name="do_observation" type="complex">
        <varDeclaration name="do_d" sort="image_direction"/>
        <varDeclaration name="do_m" sort="mode"/>

        <truthValue name="true"/>
        <atomic name="have_image">
            <variable name="do_d"/>
            <variable name="do_m"/>
        </atomic>
    </taskDeclaration>

    <taskDeclaration name="activate_instrument" type="complex">
        <documentation>
            Activating an instrument optionally includes turning off other 
            instruments on the same satellite in order to provide energy, 
            followed by turning on the instrument.
        </documentation>
        <varDeclaration name="ai_s" sort="satellite"/>
        <varDeclaration name="ai_i" sort="instrument"/>

        <atomic name="on_board">
            <variable name="ai_i"/>
            <variable name="ai_s"/>
        </atomic>
        <atomic name="power_on">
            <variable name="ai_i"/>
        </atomic>
    </taskDeclaration>

    <taskDeclaration name="auto_calibrate" type="complex">
        <documentation>
            Manages the calibration of the given instrument. This may include turning 
            the satellite's instrument to the calibration target first.
        </documentation>
        <varDeclaration name="ac_s" sort="satellite"/>
        <varDeclaration name="ac_i" sort="instrument"/>

        <and>
            <atomic name="on_board">
                <variable name="ac_i"/>
                <variable name="ac_s"/>
            </atomic>
            <atomic name="power_on">
                <variable name="ac_i"/>
            </atomic>
        </and>
        <atomic name="calibrated">
            <variable name="ac_i"/>
        </atomic>
    </taskDeclaration>

    <methodDeclaration name="method_do_observation_ai_tt_ti" taskRef="do_observation">
        <documentation>
            Performs an observation task in three steps: it activates the instrument 
            (must support the specified mode), then turns the satellite into desired image 
            direction and finally takes the image.

            Doing an observation depends on two parameters: the phenomenon to be observed 
            and the mode in which the image of the phenomenon is to be taken.

            Regarding the ordering between instrument activation and the turning operation: 
            Instrument activation is a complex task, a causal link will therefore not imply 
            an ordering immediately.

            Regarding the sort restriction: This constraint is not really necessary, because 
            the value restriction already implies the co-typing. We added this for plausibility.
        </documentation>
        <varDeclaration name="mdoatt_d" sort="image_direction"/>
        <varDeclaration name="mdoatt_m" sort="mode"/>

        <taskNode name="mdoatt_activate_instrument" taskRef="activate_instrument">
            <varDeclaration name="mdoatt_ai_s" sort="satellite"/>
            <varDeclaration name="mdoatt_ai_i" sort="instrument"/>
        </taskNode>
        <taskNode name="mdoatt_turn_to" taskRef="turn_to">
            <varDeclaration name="mdoatt_t_s" sort="satellite"/>
            <varDeclaration name="mdoatt_t_d_new" sort="direction"/>
            <varDeclaration name="mdoatt_t_d_prev" sort="direction"/>
        </taskNode>
        <taskNode name="mdoatt_take_image" taskRef="take_image">
            <varDeclaration name="mdoatt_ti_s" sort="satellite"/>
            <varDeclaration name="mdoatt_ti_d" sort="image_direction"/>
            <varDeclaration name="mdoatt_ti_i" sort="instrument"/>
            <varDeclaration name="mdoatt_ti_m" sort="mode"/>
        </taskNode>

        <orderingConstraint predecessor="mdoatt_activate_instrument" successor="mdoatt_turn_to"/>
        <orderingConstraint predecessor="mdoatt_turn_to" successor="mdoatt_take_image"/>

        <valueRestriction type="eq" variable="mdoatt_d">
            <variable name="mdoatt_t_d_new"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdoatt_d">
            <variable name="mdoatt_ti_d"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdoatt_m">
            <variable name="mdoatt_ti_m"/>
        </valueRestriction>

        <sortRestriction type="eq" variable="mdoatt_t_d_new" sort="image_direction"/>
        <valueRestriction type="eq" variable="mdoatt_ai_s">
            <variable name="mdoatt_ti_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdoatt_ai_s">
            <variable name="mdoatt_t_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdoatt_ai_i">
            <variable name="mdoatt_ti_i"/>
        </valueRestriction>
        <valueRestriction type="neq" variable="mdoatt_t_d_new">
            <variable name="mdoatt_t_d_prev"/>
        </valueRestriction>

        <causalLink producer="mdoatt_activate_instrument" consumer="mdoatt_take_image">
            <atomic name="power_on">
                <variable name="mdoatt_ai_i"/>
            </atomic>
        </causalLink>
        <causalLink producer="mdoatt_turn_to" consumer="mdoatt_take_image">
            <atomic name="pointing">
                <variable name="mdoatt_t_s"/>
                <variable name="mdoatt_t_d_new"/>
            </atomic>
        </causalLink>
    </methodDeclaration>

    <methodDeclaration name="method_do_observation_tt_ti" taskRef="do_observation">
        <varDeclaration name="mdott_d" sort="image_direction"/>
        <varDeclaration name="mdott_m" sort="mode"/>

        <taskNode name="mdott_turn_to" taskRef="turn_to">
            <varDeclaration name="mdott_t_s" sort="satellite"/>
            <varDeclaration name="mdott_t_d_new" sort="direction"/>
            <varDeclaration name="mdott_t_d_prev" sort="direction"/>
        </taskNode>
        <taskNode name="mdott_take_image" taskRef="take_image">
            <varDeclaration name="mdott_ti_s" sort="satellite"/>
            <varDeclaration name="mdott_ti_d" sort="image_direction"/>
            <varDeclaration name="mdott_ti_i" sort="instrument"/>
            <varDeclaration name="mdott_ti_m" sort="mode"/>
        </taskNode>

        <orderingConstraint predecessor="mdott_turn_to" successor="mdott_take_image"/>

        <valueRestriction type="eq" variable="mdott_d">
            <variable name="mdott_t_d_new"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdott_d">
            <variable name="mdott_ti_d"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdott_m">
            <variable name="mdott_ti_m"/>
        </valueRestriction>

        <sortRestriction type="eq" variable="mdott_t_d_new" sort="image_direction"/>

        <valueRestriction type="eq" variable="mdott_ti_s">
            <variable name="mdott_t_s"/>
        </valueRestriction>
        <valueRestriction type="neq" variable="mdott_t_d_new">
            <variable name="mdott_t_d_prev"/>
        </valueRestriction>

        <causalLink producer="mdott_turn_to" consumer="mdott_take_image">
            <atomic name="pointing">
                <variable name="mdott_t_s"/>
                <variable name="mdott_t_d_new"/>
            </atomic>
        </causalLink>
    </methodDeclaration>

    <methodDeclaration name="method_do_observation_ai_ti" taskRef="do_observation">
        <varDeclaration name="mdoat_d" sort="image_direction"/>
        <varDeclaration name="mdoat_m" sort="mode"/>

        <taskNode name="mdoat_activate_instrument" taskRef="activate_instrument">
            <varDeclaration name="mdoat_ai_s" sort="satellite"/>
            <varDeclaration name="mdoat_ai_i" sort="instrument"/>
        </taskNode>

        <taskNode name="mdoat_take_image" taskRef="take_image">
            <varDeclaration name="mdoat_ti_s" sort="satellite"/>
            <varDeclaration name="mdoat_ti_d" sort="image_direction"/>
            <varDeclaration name="mdoat_ti_i" sort="instrument"/>
            <varDeclaration name="mdoat_ti_m" sort="mode"/>
        </taskNode>

        <orderingConstraint predecessor="mdoat_activate_instrument" successor="mdoat_take_image"/>

        <valueRestriction type="eq" variable="mdoat_d">
            <variable name="mdoat_ti_d"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdoat_m">
            <variable name="mdoat_ti_m"/>
        </valueRestriction>

        <valueRestriction type="eq" variable="mdoat_ai_s">
            <variable name="mdoat_ti_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdoat_ai_i">
            <variable name="mdoat_ti_i"/>
        </valueRestriction>

        <causalLink producer="mdoat_activate_instrument" consumer="mdoat_take_image">
            <atomic name="power_on">
                <variable name="mdoat_ai_i"/>
            </atomic>
        </causalLink>
    </methodDeclaration>

    <methodDeclaration name="method_do_observation_ti" taskRef="do_observation">
        <varDeclaration name="mdot_d" sort="image_direction"/>
        <varDeclaration name="mdot_m" sort="mode"/>

        <taskNode name="mdot_take_image" taskRef="take_image">
            <varDeclaration name="mdot_ti_s" sort="satellite"/>
            <varDeclaration name="mdot_ti_d" sort="image_direction"/>
            <varDeclaration name="mdot_ti_i" sort="instrument"/>
            <varDeclaration name="mdot_ti_m" sort="mode"/>
        </taskNode>

        <valueRestriction type="eq" variable="mdot_d">
            <variable name="mdot_ti_d"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mdot_m">
            <variable name="mdot_ti_m"/>
        </valueRestriction>
    </methodDeclaration>

    <methodDeclaration name="method_activate_instrument_soff_son_ac" taskRef="activate_instrument">
        <varDeclaration name="maissa_s" sort="satellite"/>
        <varDeclaration name="maissa_i" sort="instrument"/>

        <taskNode name="maissa_switch_off" taskRef="switch_off">
            <varDeclaration name="maissa_sof_i" sort="instrument"/>
            <varDeclaration name="maissa_sof_s" sort="satellite"/>
        </taskNode>
        <taskNode name="maissa_switch_on" taskRef="switch_on">
            <varDeclaration name="maissa_son_i" sort="instrument"/>
            <varDeclaration name="maissa_son_s" sort="satellite"/>
        </taskNode>
        <taskNode name="maissa_auto_calibrate" taskRef="auto_calibrate">
            <varDeclaration name="maissa_ac_s" sort="satellite"/>
            <varDeclaration name="maissa_ac_i" sort="instrument"/>
        </taskNode>

        <orderingConstraint predecessor="maissa_switch_off" successor="maissa_switch_on"/>
        <orderingConstraint predecessor="maissa_switch_on" successor="maissa_auto_calibrate"/>

        <valueRestriction type="eq" variable="maissa_s">
            <variable name="maissa_sof_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="maissa_s">
            <variable name="maissa_son_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="maissa_i">
            <variable name="maissa_son_i"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="maissa_s">
            <variable name="maissa_ac_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="maissa_i">
            <variable name="maissa_ac_i"/>
        </valueRestriction>
        <valueRestriction type="neq" variable="maissa_sof_i">
            <variable name="maissa_son_i"/>
        </valueRestriction>

        <causalLink producer="maissa_switch_off" consumer="maissa_switch_on">
            <atomic name="power_avail">
                <variable name="maissa_sof_s"/>
            </atomic>
        </causalLink>
        <causalLink producer="maissa_switch_on" consumer="maissa_auto_calibrate">
            <atomic name="power_on">
                <variable name="maissa_son_i"/>
            </atomic>
        </causalLink>
    </methodDeclaration>

    <methodDeclaration name="method_activate_instrument_son_ac" taskRef="activate_instrument">
        <varDeclaration name="maisa_s" sort="satellite"/>
        <varDeclaration name="maisa_i" sort="instrument"/>

        <taskNode name="maisa_switch_on" taskRef="switch_on">
            <varDeclaration name="maisa_son_i" sort="instrument"/>
            <varDeclaration name="maisa_son_s" sort="satellite"/>
        </taskNode>
        <taskNode name="maisa_auto_calibrate" taskRef="auto_calibrate">
            <varDeclaration name="maisa_ac_s" sort="satellite"/>
            <varDeclaration name="maisa_ac_i" sort="instrument"/>
        </taskNode>

        <orderingConstraint predecessor="maisa_switch_on" successor="maisa_auto_calibrate"/>

        <valueRestriction type="eq" variable="maisa_s">
            <variable name="maisa_son_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="maisa_i">
            <variable name="maisa_son_i"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="maisa_s">
            <variable name="maisa_ac_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="maisa_i">
            <variable name="maisa_ac_i"/>
        </valueRestriction>

        <causalLink producer="maisa_switch_on" consumer="maisa_auto_calibrate">
            <atomic name="power_on">
                <variable name="maisa_son_i"/>
            </atomic>
        </causalLink>
    </methodDeclaration>

    <methodDeclaration name="method_auto_calibrate_tt_cal" taskRef="auto_calibrate">
        <varDeclaration name="mactc_s" sort="satellite"/>
        <varDeclaration name="mactc_i" sort="instrument"/>

        <taskNode name="mactc_turn_to" taskRef="turn_to">
            <varDeclaration name="mactc_tt_s" sort="satellite"/>
            <varDeclaration name="mactc_tt_d_new" sort="direction"/>
            <varDeclaration name="mactc_tt_d_prev" sort="direction"/>
        </taskNode>
        <taskNode name="mactc_calibrate" taskRef="calibrate">
            <varDeclaration name="mactc_c_s" sort="satellite"/>
            <varDeclaration name="mactc_c_i" sort="instrument"/>
            <varDeclaration name="mactc_c_d" sort="calib_direction"/>
        </taskNode>

        <orderingConstraint predecessor="mactc_turn_to" successor="mactc_calibrate"/>

        <valueRestriction type="eq" variable="mactc_s">
            <variable name="mactc_tt_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mactc_s">
            <variable name="mactc_c_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="mactc_i">
            <variable name="mactc_c_i"/>
        </valueRestriction>

        <sortRestriction type="eq" variable="mactc_tt_d_new" sort="calib_direction"/>

        <valueRestriction type="eq" variable="mactc_tt_d_new">
            <variable name="mactc_c_d"/>
        </valueRestriction>
        <valueRestriction type="neq" variable="mactc_tt_d_new">
            <variable name="mactc_tt_d_prev"/>
        </valueRestriction>

        <causalLink producer="mactc_turn_to" consumer="mactc_calibrate">
            <atomic name="pointing">
                <variable name="mactc_tt_s"/>
                <variable name="mactc_tt_d_new"/>
            </atomic>
        </causalLink>
    </methodDeclaration>

    <methodDeclaration name="method_auto_calibrate_cal" taskRef="auto_calibrate">
        <varDeclaration name="macc_s" sort="satellite"/>
        <varDeclaration name="macc_i" sort="instrument"/>

        <taskNode name="macc_calibrate" taskRef="calibrate">
            <varDeclaration name="macc_c_s" sort="satellite"/>
            <varDeclaration name="macc_c_i" sort="instrument"/>
            <varDeclaration name="macc_c_d" sort="calib_direction"/>
        </taskNode>

        <valueRestriction type="eq" variable="macc_s">
            <variable name="macc_c_s"/>
        </valueRestriction>
        <valueRestriction type="eq" variable="macc_i">
            <variable name="macc_c_i"/>
        </valueRestriction>
    </methodDeclaration>
</domainModel>

Downloaddownload file


Inst. of AI Homepage Help -bs March 19, 2009