From d62a018891114c19b1315699c3ebe3f6d5964b22 Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Fri, 18 Mar 2022 18:44:36 +0100
Subject: [PATCH] split ceti table config, update launch files

---
 ...le.json => config_scene_ceti-table-1.json} |   0
 ...le.yaml => config_scene_ceti-table-1.yaml} |   2 +-
 config/config_scene_ceti-table-2.json         | 428 ++++++++++++++++++
 config/config_scene_ceti-table-2.yaml         |  50 ++
 ....launch => dummy-cell_ceti-table-1.launch} |   2 +-
 launch/dummy-cell_ceti-table-2.launch         |  10 +
 .../main_controller_ceti-table_preview.launch |  14 +
 ...table_preview_ceti-table_real_robot.launch |  32 --
 ...=> main_controller_virtual_preview.launch} |   7 +-
 ...ual_preview_ceti-table-1_real_robot.launch |  12 +
 ...ual_preview_ceti-table-2_real_robot.launch |  12 +
 ...rtual_preview_ceti-table_real_robot.launch |  32 --
 ....launch => robot-cell_ceti-table-1.launch} |   6 +-
 launch/robot-cell_ceti-table-2.launch         |  19 +
 ...nch => simulated-cell_ceti-table-1.launch} |   2 +-
 launch/simulated-cell_ceti-table-2.launch     |  12 +
 16 files changed, 566 insertions(+), 74 deletions(-)
 rename config/{config_scene_ceti-table.json => config_scene_ceti-table-1.json} (100%)
 rename config/{config_scene_ceti-table.yaml => config_scene_ceti-table-1.yaml} (98%)
 create mode 100644 config/config_scene_ceti-table-2.json
 create mode 100644 config/config_scene_ceti-table-2.yaml
 rename launch/{dummy-cell_ceti-table.launch => dummy-cell_ceti-table-1.launch} (89%)
 create mode 100644 launch/dummy-cell_ceti-table-2.launch
 create mode 100644 launch/main_controller_ceti-table_preview.launch
 delete mode 100644 launch/main_controller_ceti-table_preview_ceti-table_real_robot.launch
 rename launch/{main_controller_virtual-table.launch => main_controller_virtual_preview.launch} (58%)
 create mode 100644 launch/main_controller_virtual_preview_ceti-table-1_real_robot.launch
 create mode 100644 launch/main_controller_virtual_preview_ceti-table-2_real_robot.launch
 delete mode 100644 launch/main_controller_virtual_preview_ceti-table_real_robot.launch
 rename launch/{robot-cell_ceti-table.launch => robot-cell_ceti-table-1.launch} (69%)
 create mode 100644 launch/robot-cell_ceti-table-2.launch
 rename launch/{simulated-cell_ceti-table.launch => simulated-cell_ceti-table-1.launch} (90%)
 create mode 100644 launch/simulated-cell_ceti-table-2.launch

diff --git a/config/config_scene_ceti-table.json b/config/config_scene_ceti-table-1.json
similarity index 100%
rename from config/config_scene_ceti-table.json
rename to config/config_scene_ceti-table-1.json
diff --git a/config/config_scene_ceti-table.yaml b/config/config_scene_ceti-table-1.yaml
similarity index 98%
rename from config/config_scene_ceti-table.yaml
rename to config/config_scene_ceti-table-1.yaml
index c904138..5f000de 100644
--- a/config/config_scene_ceti-table.yaml
+++ b/config/config_scene_ceti-table-1.yaml
@@ -1,5 +1,5 @@
 # create json file using
-# yq eval -o=json config_scene_ceti-table.yaml > config_scene_ceti-table.json
+# yq eval -o=json config_scene_ceti-table-1.yaml > config_scene_ceti-table-1.json
 { 'objects': [
   # table
   # height: 12 cm wheels, 76 cm body, 1 cm table-top = 89 cm total
diff --git a/config/config_scene_ceti-table-2.json b/config/config_scene_ceti-table-2.json
new file mode 100644
index 0000000..7c20a12
--- /dev/null
+++ b/config/config_scene_ceti-table-2.json
@@ -0,0 +1,428 @@
+{
+  "objects": [
+    {
+      "id": "wheel_1",
+      "pos": {
+        "x": 0.28,
+        "y": 0.28,
+        "z": 0.06
+      },
+      "size": {
+        "length": 0.12,
+        "width": 0.12,
+        "height": 0.12
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "wheel_2",
+      "pos": {
+        "x": -0.28,
+        "y": -0.28,
+        "z": 0.06
+      },
+      "size": {
+        "length": 0.12,
+        "width": 0.12,
+        "height": 0.12
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "wheel_3",
+      "pos": {
+        "x": -0.28,
+        "y": 0.28,
+        "z": 0.06
+      },
+      "size": {
+        "length": 0.12,
+        "width": 0.12,
+        "height": 0.12
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "wheel_4",
+      "pos": {
+        "x": 0.28,
+        "y": -0.28,
+        "z": 0.06
+      },
+      "size": {
+        "length": 0.12,
+        "width": 0.12,
+        "height": 0.12
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "table_body_front",
+      "pos": {
+        "x": 0.345,
+        "z": 0.5
+      },
+      "size": {
+        "length": 0.005,
+        "width": 0.69,
+        "height": 0.76
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "table_body_back",
+      "pos": {
+        "x": -0.345,
+        "z": 0.45
+      },
+      "size": {
+        "length": 0.005,
+        "width": 0.69,
+        "height": 0.66
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "table_body_left",
+      "pos": {
+        "y": 0.345,
+        "z": 0.5
+      },
+      "size": {
+        "length": 0.69,
+        "width": 0.005,
+        "height": 0.76
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "table_body_right",
+      "pos": {
+        "y": -0.345,
+        "z": 0.5
+      },
+      "size": {
+        "length": 0.69,
+        "width": 0.005,
+        "height": 0.76
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "table-top",
+      "pos": {
+        "z": 0.885
+      },
+      "size": {
+        "length": 0.8,
+        "width": 0.8,
+        "height": 0.01
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "left_panel",
+      "pos": {
+        "z": 0.885,
+        "y": -0.6525
+      },
+      "size": {
+        "length": 0.7,
+        "width": 0.5,
+        "height": 0.01
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "right_panel",
+      "pos": {
+        "z": 0.885,
+        "y": 0.6525
+      },
+      "size": {
+        "length": 0.7,
+        "width": 0.5,
+        "height": 0.01
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 0.15,
+        "g": 0.15,
+        "b": 0.15
+      }
+    },
+    {
+      "id": "binBlue",
+      "type": "BIN",
+      "pos": {
+        "x": -0.23,
+        "y": 0.67,
+        "z": 0.9425
+      },
+      "size": {
+        "length": 0.24,
+        "width": 0.17,
+        "height": 0.105
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "b": 1
+      }
+    },
+    {
+      "id": "binRed",
+      "type": "BIN",
+      "pos": {
+        "x": -0.23,
+        "y": 0.49,
+        "z": 0.9425
+      },
+      "size": {
+        "length": 0.24,
+        "width": 0.17,
+        "height": 0.105
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 1
+      }
+    },
+    {
+      "id": "binGreen",
+      "type": "BIN",
+      "pos": {
+        "x": -0.23,
+        "y": -0.49,
+        "z": 0.9425
+      },
+      "size": {
+        "length": 0.24,
+        "width": 0.17,
+        "height": 0.105
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "g": 1
+      }
+    },
+    {
+      "id": "bigYellow",
+      "type": "BOX",
+      "pos": {
+        "x": 0.1,
+        "y": -0.25,
+        "z": 0.9403
+      },
+      "size": {
+        "length": 0.0318,
+        "width": 0.0636,
+        "height": 0.1006
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 1,
+        "g": 1
+      }
+    },
+    {
+      "id": "bigGreen",
+      "type": "BOX",
+      "pos": {
+        "x": 0.1,
+        "y": 0.3,
+        "z": 0.9403
+      },
+      "size": {
+        "length": 0.0318,
+        "width": 0.0636,
+        "height": 0.1006
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "g": 1
+      }
+    },
+    {
+      "id": "bigBlue",
+      "type": "BOX",
+      "pos": {
+        "x": 0.2,
+        "y": -0.1,
+        "z": 0.9355
+      },
+      "size": {
+        "length": 0.0318,
+        "width": 0.0636,
+        "height": 0.091
+      },
+      "orientation": {
+        "z": 0.7071068,
+        "w": 0.7071068
+      },
+      "color": {
+        "b": 1
+      }
+    },
+    {
+      "id": "bigRed",
+      "type": "BOX",
+      "pos": {
+        "x": 0.15,
+        "y": 0.1,
+        "z": 0.9355
+      },
+      "size": {
+        "length": 0.0318,
+        "width": 0.0636,
+        "height": 0.091
+      },
+      "orientation": {
+        "z": 0.7071068,
+        "w": 0.7071068
+      },
+      "color": {
+        "r": 1
+      }
+    },
+    {
+      "id": "smallRed",
+      "type": "BOX",
+      "pos": {
+        "x": 0.3,
+        "y": -0.25,
+        "z": 0.9307
+      },
+      "size": {
+        "length": 0.0318,
+        "width": 0.0318,
+        "height": 0.0814
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 1
+      }
+    },
+    {
+      "id": "smallYellow",
+      "type": "BOX",
+      "pos": {
+        "x": 0.25,
+        "y": 0.25,
+        "z": 0.9211
+      },
+      "size": {
+        "length": 0.0318,
+        "width": 0.0318,
+        "height": 0.0622
+      },
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 1,
+        "g": 1
+      }
+    },
+    {
+      "id": "arm",
+      "type": "ARM",
+      "pos": {
+        "z": 0.89,
+        "x": -0.22
+      },
+      "size": {},
+      "orientation": {
+        "w": 1
+      },
+      "color": {
+        "r": 1,
+        "g": 1,
+        "b": 1
+      }
+    }
+  ]
+}
diff --git a/config/config_scene_ceti-table-2.yaml b/config/config_scene_ceti-table-2.yaml
new file mode 100644
index 0000000..3b19b72
--- /dev/null
+++ b/config/config_scene_ceti-table-2.yaml
@@ -0,0 +1,50 @@
+# create json file using
+# yq eval -o=json config_scene_ceti-table-2.yaml > config_scene_ceti-table-2.json
+{ 'objects': [
+  # table
+  # height: 12 cm wheels, 76 cm body, 1 cm table-top = 89 cm total
+  # wheels width/depth/height 12*12*12
+  # body width/depth/height 69*69*76
+  # table-top width/depth/height 80*80*1
+  # panels are 50*70, with 0.5 cm distance to the table-top
+  # height of both is 12 + 76 + .5 = 88.5
+  # their centre is at 40 + 0.25 + 25 = 65.25
+  { 'id': 'wheel_1','pos': { 'x': 0.28,'y': 0.28,'z': 0.06 },'size': { 'length': 0.12,'width': 0.12,'height': 0.12 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'wheel_2','pos': { 'x': -0.28,'y': -0.28,'z': 0.06 },'size': { 'length': 0.12,'width': 0.12,'height': 0.12 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'wheel_3','pos': { 'x': -0.28,'y': 0.28,'z': 0.06 },'size': { 'length': 0.12,'width': 0.12,'height': 0.12 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'wheel_4','pos': { 'x': 0.28,'y': -0.28,'z': 0.06 },'size': { 'length': 0.12,'width': 0.12,'height': 0.12 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  # a filled table and a backplate going all the way up is not possible, because of the oversized collision model of the robot
+  #  { 'id': 'table_body','pos': { 'z': 0.50 },'size': { 'length': .69,'width': 0.69,'height': 0.76 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'table_body_front','pos': { 'x': .345, 'z': 0.50 },'size': { 'length': 0.005,'width': 0.69,'height': 0.76 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'table_body_back', 'pos': { 'x': -.345, 'z': 0.45 },'size': { 'length': 0.005,'width': 0.69,'height': 0.66 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'table_body_left', 'pos': { 'y': .345, 'z': 0.50 },'size': { 'length': 0.69,'width': 0.005,'height': 0.76 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'table_body_right','pos': { 'y': -.345, 'z': 0.50 },'size': { 'length': 0.69,'width': 0.005,'height': 0.76 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'table-top', 'pos': { 'z': 0.885 },'size': { 'length': 0.8,'width': 0.8,'height': 0.01 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'left_panel',   'pos': { 'z': 0.885, 'y': -0.6525 },'size': { 'length': 0.7,'width': 0.5,'height': 0.01 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  { 'id': 'right_panel',  'pos': { 'z': 0.885, 'y': 0.6525 },'size': { 'length': 0.7,'width': 0.5,'height': 0.01 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+  # { 'id': 'front_panel', 'pos': { 'z': 0.885, 'x': 0.6525 },'size': { 'length': 0.5,'width': 0.7,'height': 0.01 },'orientation': { 'w': 1 },'color': { 'r': 0.15,'g': 0.15,'b': 0.15 } },
+
+  # bins width/depth/height
+  # their height is .89 + 0.0525 = 0.9425 m
+  # the width is 31.8 or 63.6
+  # if they stand on a panel edge, they stand at 40 + 0.5 + 8.5 = 49 and 49 + 1 + 17 = 67
+  # their x location is 12 - 35 = -23
+  { 'id': 'binBlue', 'type': 'BIN','pos': { 'x': -0.23,'y':  0.67,'z': 0.9425 },'size': { 'length': 0.24,'width': 0.17,'height': 0.105 },'orientation': { 'w': 1 },'color': { 'b': 1 } },
+  { 'id': 'binRed',  'type': 'BIN','pos': { 'x': -0.23,'y':  0.49,'z': 0.9425 },'size': { 'length': 0.24,'width': 0.17,'height': 0.105 },'orientation': { 'w': 1 },'color': { 'r': 1 } },
+  { 'id': 'binGreen','type': 'BIN','pos': { 'x': -0.23,'y': -0.49,'z': 0.9425 },'size': { 'length': 0.24,'width': 0.17,'height': 0.105 },'orientation': { 'w': 1 },'color': { 'g': 1 } },
+
+  { 'id': 'bigYellow','type': 'BOX','pos': { 'x': 0.10,'y': -0.25,'z': 0.940300  },'size': { 'length': .0318, 'width': .0636,'height': 0.100600 },'orientation': { 'w': 1 },'color': { 'r': 1, 'g': 1 } },
+  { 'id': 'bigGreen' ,'type': 'BOX','pos': { 'x': 0.10,'y': 0.30,'z': 0.940300  },'size': { 'length': .0318, 'width': .0636,'height': 0.100600 },'orientation': { 'w': 1 },'color': { 'g': 1 } },
+  { 'id': 'bigBlue'  ,'type': 'BOX','pos': { 'x': 0.20,'y': -0.10,'z': 0.935500 },'size': { 'length': .0318, 'width': .0636,'height': 0.091000 },'orientation': { 'z': 0.7071068, 'w':0.7071068 },'color': { 'b': 1 } },
+  { 'id': 'bigRed'   ,'type': 'BOX','pos': { 'x': 0.15,'y': 0.10,'z': 0.935500 },'size': { 'length': .0318, 'width': .0636,'height': 0.091000 },'orientation': { 'z': 0.7071068, 'w':0.7071068 },'color': { 'r': 1 } },
+
+  { 'id': 'smallRed','type': 'BOX','pos': { 'x': 0.30,'y': -0.25,'z': 0.930700 },'size': { 'length': .0318, 'width': .0318,'height': 0.081400 },'orientation': { 'w': 1 },'color': { 'r': 1 } },
+  { 'id': 'smallYellow','type': 'BOX','pos': { 'x': 0.25,'y': 0.25,'z': 0.921100 },'size': { 'length': .0318, 'width': .0318,'height': 0.062200 },'orientation': { 'w': 1 },'color': { 'r': 1, 'g': 1 } },
+
+  # heights of objects (including pins):
+  # formula: half-height * 9.6 + 4.6
+  # formula (python)
+  # for i in range(3,10): print("{ 'id': 'object4x2x%.1f','type': 'BOX','pos': { 'x': 0.3,'y': %f,'z': %f },'size': { 'length': .0318, 'width': .0636,'height': %f },'orientation': { 'w': 1 },'color': {} }," % (i/2, (i-6)*.1, (i*48+23+8900)/10000, (i*96+46)/10000));
+
+  { 'id': 'arm','type': 'ARM','pos': { 'z': 0.89 , 'x': -0.22 },'size': { },'orientation': { 'w': 1 },'color': { 'r': 1.00,'g': 1.00,'b': 1.00 } }
+] }
diff --git a/launch/dummy-cell_ceti-table.launch b/launch/dummy-cell_ceti-table-1.launch
similarity index 89%
rename from launch/dummy-cell_ceti-table.launch
rename to launch/dummy-cell_ceti-table-1.launch
index f52b78e..ec3f2c1 100644
--- a/launch/dummy-cell_ceti-table.launch
+++ b/launch/dummy-cell_ceti-table-1.launch
@@ -2,7 +2,7 @@
 
     <arg name="connection_address" default="tcp://*:6576"/>
 
-    <node pkg="ccf_immersive_sorting" type="dummy_sorting_controller" name="ceti_cell" output="screen">
+    <node pkg="ccf_immersive_sorting" type="dummy_sorting_controller" name="ceti_cell_1" output="screen">
         <param name="connection_address" type="string" value="$(arg connection_address)"/>
         <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
     </node>
diff --git a/launch/dummy-cell_ceti-table-2.launch b/launch/dummy-cell_ceti-table-2.launch
new file mode 100644
index 0000000..8f1437b
--- /dev/null
+++ b/launch/dummy-cell_ceti-table-2.launch
@@ -0,0 +1,10 @@
+<launch>
+
+    <arg name="connection_address" default="tcp://*:6576"/>
+
+    <node pkg="ccf_immersive_sorting" type="dummy_sorting_controller" name="ceti_cell_2" output="screen">
+        <param name="connection_address" type="string" value="$(arg connection_address)"/>
+        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
+    </node>
+
+</launch>
diff --git a/launch/main_controller_ceti-table_preview.launch b/launch/main_controller_ceti-table_preview.launch
new file mode 100644
index 0000000..cb61ae4
--- /dev/null
+++ b/launch/main_controller_ceti-table_preview.launch
@@ -0,0 +1,14 @@
+<launch>
+
+    <arg name="connection_address" default="tcp://*:6576" doc="connection address for NNG scene-based selection"/>
+    <arg name="mqtt_server" default="tcp://127.0.0.1:1883" doc="MQTT server for communication with client cells"/>
+    <arg name="client_controllers" default="['ceti_cell_1', 'ceti_cell_2', 'ads-cell', 'st-cell']" doc="potential client cell names"/>
+
+    <node pkg="ccf_immersive_sorting" type="main_controller" name="main_controller" output="screen">
+        <param name="connection_address" type="string" value="$(arg connection_address)"/>
+        <param name="client_controllers" type="yaml" value="$(arg client_controllers)"/>
+        <param name="mqtt_server" type="yaml" value="$(arg mqtt_server)"/>
+        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
+    </node>
+
+</launch>
diff --git a/launch/main_controller_ceti-table_preview_ceti-table_real_robot.launch b/launch/main_controller_ceti-table_preview_ceti-table_real_robot.launch
deleted file mode 100644
index f0d95f6..0000000
--- a/launch/main_controller_ceti-table_preview_ceti-table_real_robot.launch
+++ /dev/null
@@ -1,32 +0,0 @@
-<launch>
-
-    <!-- connection address for NNG scene-based selection -->
-    <arg name="connection_address" default="tcp://*:6576"/>
-
-    <!-- MQTT server for communication with client cells -->
-    <arg name="mqtt_server" default="tcp://127.0.0.1:1883"/>
-
-    <!-- remove cell st cell if it is not available -->
-    <arg name="client_controllers" default="['ceti_cell', 'st_cell', 'ads_cell']"/>
-
-    <!-- robot IP used by the robot controller -->
-    <arg name="robot_ip" default="172.31.1.13"/>
-
-    <node pkg="ccf_immersive_sorting" type="main_controller" name="main_controller" output="screen">
-        <param name="connection_address" type="string" value="$(arg connection_address)"/>
-        <param name="client_controllers" type="yaml" value="$(arg client_controllers)"/>
-        <param name="mqtt_server" type="yaml" value="$(arg mqtt_server)"/>
-        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
-    </node>
-
-    <include file="$(find ccf)/launch/robot_setup.launch">
-        <arg name="robot_ip" value="$(arg robot_ip)"/>
-        <arg name="load_gripper" value="true"/>
-    </include>
-
-    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell" output="screen">
-        <param name="mqtt_server" type="yaml" value="$(arg mqtt_server)"/>
-        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
-    </node>
-
-</launch>
diff --git a/launch/main_controller_virtual-table.launch b/launch/main_controller_virtual_preview.launch
similarity index 58%
rename from launch/main_controller_virtual-table.launch
rename to launch/main_controller_virtual_preview.launch
index eca8065..81171aa 100644
--- a/launch/main_controller_virtual-table.launch
+++ b/launch/main_controller_virtual_preview.launch
@@ -1,9 +1,8 @@
 <launch>
 
-    <arg name="connection_address" default="tcp://*:6576"/>
-    <arg name="mqtt_server" default="tcp://127.0.0.1:1883"/>
-    <arg name="client_controllers" default="['ceti_cell']"/>
-
+    <arg name="connection_address" default="tcp://*:6576" doc="connection address for NNG scene-based selection"/>
+    <arg name="mqtt_server" default="tcp://127.0.0.1:1883" doc="MQTT server for communication with client cells"/>
+    <arg name="client_controllers" default="['ceti_cell_1', 'ceti_cell_2', 'ads-cell', 'st-cell']" doc="potential client cell names"/>
 
     <node pkg="ccf_immersive_sorting" type="main_controller" name="main_controller" output="screen">
         <param name="connection_address" type="string" value="$(arg connection_address)"/>
diff --git a/launch/main_controller_virtual_preview_ceti-table-1_real_robot.launch b/launch/main_controller_virtual_preview_ceti-table-1_real_robot.launch
new file mode 100644
index 0000000..4690e77
--- /dev/null
+++ b/launch/main_controller_virtual_preview_ceti-table-1_real_robot.launch
@@ -0,0 +1,12 @@
+<launch>
+
+    <arg name="connection_address" default="tcp://*:6576" doc="connection address for NNG scene-based selection"/>
+    <arg name="mqtt_server" default="tcp://127.0.0.1:1883" doc="MQTT server for communication with client cells"/>
+    <arg name="client_controllers" default="['ceti_cell_1', 'ceti_cell_2', 'ads-cell', 'st-cell']" doc="potential client cell names"/>
+    <arg name="robot_ip" default="172.31.1.13" doc="robot IP used by the robot controller"/>
+
+    <include file="$(find ccf_immersive_sorting)/launch/main_controller_virtual_preview.launch" pass_all_args="true"/>
+
+    <include file="$(find ccf_immersive_sorting)/launch/robot-cell_ceti-table-1.launch" pass_all_args="true"/>
+
+</launch>
diff --git a/launch/main_controller_virtual_preview_ceti-table-2_real_robot.launch b/launch/main_controller_virtual_preview_ceti-table-2_real_robot.launch
new file mode 100644
index 0000000..05057aa
--- /dev/null
+++ b/launch/main_controller_virtual_preview_ceti-table-2_real_robot.launch
@@ -0,0 +1,12 @@
+<launch>
+
+    <arg name="connection_address" default="tcp://*:6576" doc="connection address for NNG scene-based selection"/>
+    <arg name="mqtt_server" default="tcp://127.0.0.1:1883" doc="MQTT server for communication with client cells"/>
+    <arg name="client_controllers" default="['ceti_cell_1', 'ceti_cell_2', 'ads-cell', 'st-cell']" doc="potential client cell names"/>
+    <arg name="robot_ip" default="172.31.1.13" doc="robot IP used by the robot controller"/>
+
+    <include file="$(find ccf_immersive_sorting)/launch/main_controller_virtual_preview.launch" pass_all_args="true"/>
+
+    <include file="$(find ccf_immersive_sorting)/launch/robot-cell_ceti-table-2.launch" pass_all_args="true"/>
+
+</launch>
diff --git a/launch/main_controller_virtual_preview_ceti-table_real_robot.launch b/launch/main_controller_virtual_preview_ceti-table_real_robot.launch
deleted file mode 100644
index f95bcc4..0000000
--- a/launch/main_controller_virtual_preview_ceti-table_real_robot.launch
+++ /dev/null
@@ -1,32 +0,0 @@
-<launch>
-
-    <!-- connection address for NNG scene-based selection -->
-    <arg name="connection_address" default="tcp://*:6576"/>
-
-    <!-- MQTT server for communication with client cells -->
-    <arg name="mqtt_server" default="tcp://127.0.0.1:1883"/>
-
-    <!-- remove cell st cell if it is not available -->
-    <arg name="client_controllers" default="['ceti_cell', 'st_cell', 'ads_cell']"/>
-
-    <!-- robot IP used by the robot controller -->
-    <arg name="robot_ip" default="172.31.1.13"/>
-
-    <node pkg="ccf_immersive_sorting" type="main_controller" name="main_controller" output="screen">
-        <param name="connection_address" type="string" value="$(arg connection_address)"/>
-        <param name="client_controllers" type="yaml" value="$(arg client_controllers)"/>
-        <param name="mqtt_server" type="yaml" value="$(arg mqtt_server)"/>
-        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_virtual-table.json"/>
-    </node>
-
-    <include file="$(find ccf)/launch/robot_setup.launch">
-        <arg name="robot_ip" value="$(arg robot_ip)"/>
-        <arg name="load_gripper" value="true"/>
-    </include>
-
-    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell" output="screen">
-        <param name="mqtt_server" type="yaml" value="$(arg mqtt_server)"/>
-        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
-    </node>
-
-</launch>
diff --git a/launch/robot-cell_ceti-table.launch b/launch/robot-cell_ceti-table-1.launch
similarity index 69%
rename from launch/robot-cell_ceti-table.launch
rename to launch/robot-cell_ceti-table-1.launch
index f36b581..a193d57 100644
--- a/launch/robot-cell_ceti-table.launch
+++ b/launch/robot-cell_ceti-table-1.launch
@@ -1,17 +1,17 @@
 <launch>
 
     <!-- MQTT server for communication with client cells -->
-    <arg name="mqtt_server" default="tcp://192.168.0.122:1883"/>
+    <arg name="mqtt_server" default="tcp://192.168.0.122:1883" doc="address of the mqtt server for the connection to the controller"/>
 
     <!-- robot IP used by the robot controller -->
-    <arg name="robot_ip" default="172.31.1.13"/>
+    <arg name="robot_ip" default="172.31.1.13" doc="ip address if the robot"/>
 
     <include file="$(find ccf)/launch/robot_setup.launch">
         <arg name="robot_ip" value="$(arg robot_ip)"/>
         <arg name="load_gripper" value="true"/>
     </include>
 
-    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell" output="screen">
+    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell_1" output="screen">
         <param name="mqtt_server" type="yaml" value="$(arg mqtt_server)"/>
         <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
     </node>
diff --git a/launch/robot-cell_ceti-table-2.launch b/launch/robot-cell_ceti-table-2.launch
new file mode 100644
index 0000000..6221ee3
--- /dev/null
+++ b/launch/robot-cell_ceti-table-2.launch
@@ -0,0 +1,19 @@
+<launch>
+
+    <!-- MQTT server for communication with client cells -->
+    <arg name="mqtt_server" default="tcp://192.168.0.122:1883" doc="address of the mqtt server for the connection to the controller"/>
+
+    <!-- robot IP used by the robot controller -->
+    <arg name="robot_ip" default="172.31.1.13" doc="ip address if the robot"/>
+
+    <include file="$(find ccf)/launch/robot_setup.launch">
+        <arg name="robot_ip" value="$(arg robot_ip)"/>
+        <arg name="load_gripper" value="true"/>
+    </include>
+
+    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell_2" output="screen">
+        <param name="mqtt_server" type="yaml" value="$(arg mqtt_server)"/>
+        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table-2.json"/>
+    </node>
+
+</launch>
diff --git a/launch/simulated-cell_ceti-table.launch b/launch/simulated-cell_ceti-table-1.launch
similarity index 90%
rename from launch/simulated-cell_ceti-table.launch
rename to launch/simulated-cell_ceti-table-1.launch
index f507f38..75729a1 100644
--- a/launch/simulated-cell_ceti-table.launch
+++ b/launch/simulated-cell_ceti-table-1.launch
@@ -4,7 +4,7 @@
 
     <include file="$(find ccf)/launch/simulation_setup.launch"/>
 
-    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell" output="screen">
+    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell_1" output="screen">
         <param name="connection_address" type="string" value="$(arg connection_address)"/>
         <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
     </node>
diff --git a/launch/simulated-cell_ceti-table-2.launch b/launch/simulated-cell_ceti-table-2.launch
new file mode 100644
index 0000000..4101198
--- /dev/null
+++ b/launch/simulated-cell_ceti-table-2.launch
@@ -0,0 +1,12 @@
+<launch>
+
+    <arg name="connection_address" default="tcp://*:6576"/>
+
+    <include file="$(find ccf)/launch/simulation_setup.launch"/>
+
+    <node pkg="ccf_immersive_sorting" type="moveit_sorting_controller" name="ceti_cell_2" output="screen">
+        <param name="connection_address" type="string" value="$(arg connection_address)"/>
+        <param name="scene" type="string" value="$(find ccf_immersive_sorting)/config/config_scene_ceti-table.json"/>
+    </node>
+
+</launch>
-- 
GitLab