In this workspace, we have created a shelf with various commercial products. This shelf might be cloned to generate replicas throughout the locators placed around the floor, inside a facilty. The scene can be generated by building other types of shelves with variations in width, height, number of shelves, etc. And the resources that can be stored in them are very diverse.
Output images of the workspace
Building the facility
Let’s start with a blank project, starting from scratch with a totally empty workspace. The first step will be to build the facility that will serve as a ‘stage’ to accommodate the shelves. To do this, we will use the three basic sections of the warehouse: base, middle, and roof. We can access them easily just by filtering resources, using the tag
Warehouse structure assets
After adding these 3 assets to our workspace, we will drag the asset ‘Warehouse_Interior_base_section’ into the simulation. Within the Simulation, if we expand the asset, we will find a large number of locators to populate different elements such as shelves, outlets, emergency lights, safety fences, warehouse offices, among others. We will find a NewStory_Locator on which we will create a middle section: right-click on NewStory_Locator > Create Fixed Entity… > Warehouse_Interior_middle_section. This will create a perfectly assembled middle section with the base.
Adding a middle section
Expanding the entity we just created, we will find a NewStory_Roof_locator, on which we can add more middle sections if desired (using the same procedure to give more height to our warehouse), or alternatively, we can cover it with the roof by creating a fixed entity and selecting
Warehouse_Interior_roof_section. The facility of our scene is already created.
Inside the location (Visualization mode: Mesh)
In this case, we will use the OpenCV model, using parameters and coefficients that allow us to create a fisheye lens with barrel distortion. Simply right-click on the “Ego” node (under Simulation) and select the “Create Camera” option. By selecting the newly created camera, we will access its properties, where we can choose the OPENCV Lens type and fill in the desired coefficient values (typically these coefficients are provided by the manufacturers).
Note that, additionally, we can create a sensor and ISP to connect them to our camera under the “Sensor References” section.
To understand how the shelving system works in Retail, we will start by using the asset
Shelf_01_longitudinal which can be found in Resources > Assets. Once added to our workspace and dragged into Simulation, we can expand all its locators. With it selected, we can view it in Mesh mode (at the end, in the Properties panel) and get an idea of its shape and the types of locators that accompany it.
Shelf_01_longitudinal (Mesh visualization mode)
To vertically stack more shelves, we can create a Fixed entity on the STACKABLE_locator and choose the same asset again:
This will create the same shelf perfectly aligned and vertically stacked on top of the first one:
The same procedure will be used for each of the two shelves to create lateral extensions, using the locators SHELF_locator_1 and SHELF_locator_2:
3 x 2 Matrix shelf
By adding the Shelf_01_transversal asset to our workspace, we can use the SHELF_TRANSVERSAL_locator_1 and SHELF_TRANSVERSAL_locator_2 locators to create fixed entities with this asset, placing transverse shelves if desired (bear in mind that this action should ONLY be done at the ends of the structure):
Complete structure with transverse modules on both sides.
Retail products can be organized into groups (SETs) using specific shelf locators such as SET_locator_1, SET_locator_2, and so on. In these locators, we will place groups that will be populated with the final products. This system allows us to neatly arrange product families such as beverages, snacks, beauty products, groceries, and more. We will find the different groups or product families (SETs) by filtering assets and searching for the text ‘set’ with the added tag
Suitable retail sets
Each one of these sets, in turn, will be able to host the final products. Let’s take the set_bottles as an example and search for the suitable products to populate in this set. To do this, we will simply search (in Resources window) for results that simultaneously meet the following conditions: a) the ‘kind’ attribute must be
content and b) the ‘family’ attribute must be the same as the ‘family’ attribute value of the set it belongs to (in our example, the ‘family’ attribute of set_bottles is:
bottles, so we will search for the ‘family’ attribute containing the value
bottles). The result of this query is all the products that we can conveniently place within set_bottles.
Suitable products for set_bottles
We will use this method to programmatically populate the desired items in each of the locators found within each set. We can choose to populate all the locators within each set or only a portion of them, depending on the desired merchandise density. The locators within each set are linearly ordered from the interior to the exterior, allowing us to populate items further towards the back or towards the outer edges of the shelves, for example. We can also specify whether we want the same item to be repeated throughout the locators of a set or if we want to alternate different products mixed within the same set (continuing with our example, seeing a group of identical bottles or a group of different bottles mixed together).
View of a bottle and the complete hierarchy of nested locators
Placing the shelves
In the example scene, we have omitted the locators for shelves and simply populated various clones of the initial shelf at fixed intervals of distance (5 m):
Additionally, we can use the locators embedded in the base section of the warehouse in order to populate shelves (or other items). We have already seen that the asset Warehouse_Interior_base_section contains multiple locators, including the one we use to stack middle and upper sections, as well as outlets, offices, emergency lights… and more. But this asset also specifically contains locators to neatly populate the shelves we want, with the desired orientation. It is organized into columns (next to the wider walls) and numbered rows, in such a way that we can follow a specific order in order to organize our shelves in the most efficient manner.
Arrangement of specific locators for shelves in rows and columns.
Note that those locators (represented by black dots) that aren’t framed in red rectangles correspond to locators for other purposes: outlets, fences, offices, and more.
With this information, we will be able to organize the population of shelves, and additionally, in the case of shelves located in rows, we can alternatively arrange them in different orientations, for example by rotating them 90 degrees along the Z-axis.
Different arrangements of shelves
On one hand, as we have explained before, we will be able to populate the shelves with various product families. By identifying the value of the ‘family’ attribute on each set and conducting queries with that value, we can iterate through different sets in order to place different types of products:
Shelf populated with different sets of products
On the other hand, we can establish various lighting configurations. For daytime scenes, we can use any of the backgrounds available in Resources > Background.
Multiple background options for different lighting conditions
To ensure that the scene is lit with the background and not with a physical sky, you need to explicitly select this option in the simulation settings (after adding the various backgrounds). First, you need to set a background for the scene: On your workspace, clic on Simulation and go Properties > Background > click on “No entity” button > select your background:
Next, select the “Background” option from the dropdown menu:
Finally, we can easily set up a system of variations using the Variations editor: Generator > Variations > List of variations (+):
Once this change has been made, your workspace is ready to use different lighting in each iteration.
In this example, we started with a fixed camera and simply cloned the shelf with the products to add more depth to the scene. You can try different camera positions as well as use the base section locator system to position shelves and experiment with different rotations for different layouts.
Please note that you may also be interested in creating nighttime scenes, without relying on background lighting. You can revert to the lighting type explained in the previous change by switching back to physical sky lighting and selecting 00:00 hours as shown below:
- Select the “Simulation” tab.
- Go to the “Illumination type” parameter
- Choose the option for Physical sky
- Set the time to 00:00 hours.
- Make sure to enable the option “Environment lights” in order to activate the roof lights
By adjusting these settings, you can explore different lighting conditions and create nighttime scenes, adding characters and even vehicles such as forklifts, as well as other ‘external’ elements such as garbage, vermins and many more.
You can download a copy of the dataset using this link.