How-To: Workcells

The Workcell File

A given Workcell is represented declaratively in a YAML file. This file specifies the Modules, Locations, and Configuration of the Workcell, and is loaded by WEI when it starts up. This file should comply with the wei.types.Workcell schema.

Name

The name of the Workcell is specified at the top of the file. This is used by the system to distinguish between different Workcells.

Example Workcell Name

name: RPL_Modular_Workcell

Configuration

The configuration section specifies various properties of the Workcell, and determines how the WEI instance that loads the Workcell will behave. All of the values set here can be overridden by the user at runtime using command line parameters for both the WEI Engine and Server.

For a complete breakdown of configuration options, see wei.types.WorkcellConfig.

Example Config Section

config:
    redis_host: "rpl_redis"
    server_host: "rpl_modular_wc_server"

Modules

The modules section is a list of all the modules that make up the Workcell. Each module is represented by a dictionary with keys for the module’s name, model, interface, and configuration. The active flag is optional and can be used to mark a module as currently unused. The configuration section will vary depending on the specific interface used to communicate with the module.

Each module should conform to the wei.types.Module schema.

Example Modules Section

modules:

    - name: sealer        #Human-legible name specific to an individual component
        active: true        #Mark this module as active or inactive depending on whether or not it's used in the workflow
        model: A4s_sealer   #Type of device being connected to, might be multiple components of same model with different names in a workcell
        interface: wei_rest_node  #Method of communication with the device
        config:   #Relevant communication configuration
            rest_node_address: "http://parker.cels.anl.gov:2000"   #In this case, the rest url used to send actions to the component

    - name: peeler
        model: brooks_peeler
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2001"

    - name: sciclops
        model: sciclops
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2002"

    - name: ot2_pcr_alpha
        model: ot2
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2003"

    - name: ot2_gc_beta
        model: ot2
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2004"

    - name: ot2_cp_gamma
        model: ot2
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2005"

    - name: pf400
        model: pf400
        interface: wei_rest_node
        config:
            rest_node_address: "http://strange.cels.anl.gov:3000"

    - name: camera_module
        model: camera (logitech)
        interface: wei_rest_node
        config:
            rest_node_address: "http://strange.cels.anl.gov:3001"

    - name: hidex
        active: False # Optional flag that marks this module as currently unused
        model: Hidex
        interface: wei_tcp_node
        config:
            tcp_node_address: "146.137.240.22"
            tcp_node_port: 2000

    - name: barty
        active: True # Optional flag that marks this module as currently unused
        model: RPL BARTY
        interface: wei_rest_node
        config:
            rest_node_address: "http://kirby.cels.anl.gov:8000"

    - name: MiR_base
        active: False # Optional flag that marks this module as currently unused
        model: MiR250
        interface: wei_rest_node
        config:
            rest_node_address: "http://mirbase1.cels.anl.gov/api/v2.0.0/"
            rest_node_auth: "/home/rpl/Documents/mirauth.txt"

    - name: ur5
        active: False # Optional flag that marks this module as currently unused
        model: ur5
        interface: wei_ros_node
        config:
            ros_node_address: '/ur5_client/UR5_Client_Node'

Locations

The locations section is a dictionary of all the locations in the Workcell. Locations are defined relative to each individual module, since different modules will represent the same location in different ways. Each location is represented by a key-value pair of the location’s name and the joint angles or other module-specific representation for that location.

Example Locations Section

locations:
    pf400: #Joint angles for the PF400 Plate Handler
        sciclops.exchange: [223.0, -38.068, 335.876, 325.434, 79.923, 995.062]
        sealer.default: [206.087, -2.27, 265.371, 363.978, 76.078, 411.648]
        peeler.default: [225.521, -24.846, 244.836, 406.623, 80.967, 398.778]
        ot2_pcr_alpha.deck1_cooler: [247.999, -30.702, 275.835, 381.513, 124.830, -585.403]
        ot2_growth_beta.deck2: [163.230, -59.032, 270.965, 415.013, 129.982, -951.510]
        ot2_cp_gamma.deck2: [156, 66.112, 83.90, 656.404, 119.405, -946.818]
        biometra.default: [247.0, 40.698, 38.294, 728.332, 123.077, 301.082]
        camera_module.plate_station: [90.597,26.416, 66.422, 714.811, 81.916, 995.074]
        wc.trash: [259.847, -36.810, 69.090, 687.466, 81.002, 995.035]
    sciclops: #Joint angles for the Sciclops Plate Crane
        sciclops.exchange: [0,0,0,0]

Complete Example

name: RPL_Modular_workcell

#Configuration of the Workcell
config:
    redis_host: "rpl_redis"
    server_host: "rpl_modular_wc_server"

#List of all modules that make up this workcell
modules:

    - name: sealer        #Human-legible name specific to an individual component
        active: true        #Mark this module as active or inactive depending on whether or not it's used in the workflow
        model: A4s_sealer   #Type of device being connected to, might be multiple components of same model with different names in a workcell
        interface: wei_rest_node  #Method of communication with the device
        config:   #Relevant communication configuration
            rest_node_address: "http://parker.cels.anl.gov:2000"   #In this case, the rest url used to send actions to the component

    - name: peeler
        model: brooks_peeler
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2001"

    - name: sciclops
        model: sciclops
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2002"

    - name: ot2_pcr_alpha
        model: ot2
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2003"

    - name: ot2_gc_beta
        model: ot2
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2004"

    - name: ot2_cp_gamma
        model: ot2
        interface: wei_rest_node
        config:
            rest_node_address: "http://parker.cels.anl.gov:2005"

    - name: pf400
        model: pf400
        interface: wei_rest_node
        config:
            rest_node_address: "http://strange.cels.anl.gov:3000"

    - name: camera_module
        model: camera (logitech)
        interface: wei_rest_node
        config:
            rest_node_address: "http://strange.cels.anl.gov:3001"

    - name: hidex
        active: False # Optional flag that marks this module as currently unused
        model: Hidex
        interface: wei_tcp_node
        config:
            tcp_node_address: "146.137.240.22"
            tcp_node_port: 2000

    - name: barty
        active: True # Optional flag that marks this module as currently unused
        model: RPL BARTY
        interface: wei_rest_node
        config:
            rest_node_address: "http://kirby.cels.anl.gov:8000"

    - name: MiR_base
        active: False # Optional flag that marks this module as currently unused
        model: MiR250
        interface: wei_rest_node
        config:
            rest_node_address: "http://mirbase1.cels.anl.gov/api/v2.0.0/"
            rest_node_auth: "/home/rpl/Documents/mirauth.txt"

    - name: ur5
        active: False # Optional flag that marks this module as currently unused
        model: ur5
        interface: wei_ros_node
        config:
            ros_node_address: '/ur5_client/UR5_Client_Node'

locations:
    pf400: #Joint angles for the PF400 Plate Handler
        sciclops.exchange: [223.0, -38.068, 335.876, 325.434, 79.923, 995.062]
        sealer.default: [206.087, -2.27, 265.371, 363.978, 76.078, 411.648]
        peeler.default: [225.521, -24.846, 244.836, 406.623, 80.967, 398.778]
        ot2_pcr_alpha.deck1_cooler: [247.999, -30.702, 275.835, 381.513, 124.830, -585.403]
        ot2_growth_beta.deck2: [163.230, -59.032, 270.965, 415.013, 129.982, -951.510]
        ot2_cp_gamma.deck2: [156, 66.112, 83.90, 656.404, 119.405, -946.818]
        biometra.default: [247.0, 40.698, 38.294, 728.332, 123.077, 301.082]
        camera_module.plate_station: [90.597,26.416, 66.422, 714.811, 81.916, 995.074]
        wc.trash: [259.847, -36.810, 69.090, 687.466, 81.002, 995.035]
    sciclops: #Joint angles for the Sciclops Plate Crane
        sciclops.exchange: [0,0,0,0]