please try to distinguish between scene(-file) names and task names.
scene file names could be arbitrary and you should not do any assumptions about them.
task names can only be out of this set:
'task 1',
'task 2/1', 'task 2/2', 'task 2/3',
'task 3',
'task 4/1', 'task 4/2', 'task 4/3',
'task 5',
'task 6'
and yes, you have to use the list-scenes service to get the list of possible scene-name's!
here is a very short python script which will demonstrate this:
- Code: Select all
#!/usr/bin/python
import rospy
import yaml
from euroc_c2_msgs.msg import *
from euroc_c2_msgs.srv import *
list_scenes = rospy.ServiceProxy("/euroc_c2_task_selector/list_scenes", ListScenes)
list_resp = list_scenes()
list_resp.scenes.sort(key=lambda scene: scene.name)
for scene in list_resp.scenes:
print "scene: %-20.20s" % scene.name,
data = yaml.load(scene.description_yaml)
print "task name: %r" % data["task_name"]
when this script is run against an up-to-date euroc-c2-simulator you will get this output:
- Code: Select all
scene: task1_v1 task name: 'task 1'
scene: task1_v2 task name: 'task 1'
scene: task1_v3 task name: 'task 1'
scene: task2_v1_1 task name: 'task 2/1'
scene: task2_v1_2 task name: 'task 2/2'
scene: task2_v1_3 task name: 'task 2/3'
scene: task2_v2_1 task name: 'task 2/1'
scene: task2_v2_2 task name: 'task 2/2'
scene: task2_v2_3 task name: 'task 2/3'
scene: task2_v3_1 task name: 'task 2/1'
scene: task2_v3_2 task name: 'task 2/2'
scene: task2_v3_3 task name: 'task 2/3'
scene: task3_v1 task name: 'task 3'
scene: task3_v2 task name: 'task 3'
scene: task3_v3 task name: 'task 3'
scene: task4_v1_1 task name: 'task 4/1'
scene: task4_v1_2 task name: 'task 4/2'
scene: task4_v1_3 task name: 'task 4/3'
scene: task4_v2_1 task name: 'task 4/1'
scene: task4_v2_2 task name: 'task 4/2'
scene: task4_v2_3 task name: 'task 4/3'
scene: task4_v3_1 task name: 'task 4/1'
scene: task4_v3_2 task name: 'task 4/2'
scene: task4_v3_3 task name: 'task 4/3'
scene: task5_v1 task name: 'task 5'
scene: task5_v2 task name: 'task 5'
scene: task5_v3 task name: 'task 5'
scene: task6_v1 task name: 'task 6'
scene: task6_v2 task name: 'task 6'
scene: task6_v3 task name: 'task 6'
as you can see: the task name is always one of the above mentioned while the scene-name is something else.
we expect that your solution does something like this:
- Code: Select all
list_scenes = rospy.ServiceProxy("/euroc_c2_task_selector/list_scenes", ListScenes)
list_resp = list_scenes()
for scene in list_resp.scenes:
data = yaml.load(scene.description_yaml)
task_name = data["task_name"]
if task_name == "task 1":
solve_simple_pick_and_place(scene.name)
elif task_name.startswith("task 2/"):
solve_simple_pick_and_place_bad_calib(scene.name)
elif task_name == "task 3":
solve_mobile_pick_and_place(scene.name)
elif task_name.startswith("task 4/"):
solve_mobile_pick_and_place_obstacles(scene.name)
elif task_name == "task 5":
solve_puzzle(scene.name)
elif task_name == "task 6":
solve_conveyor_belt(scene.name)
alternatively you can also decide the order in which you want to solve the tasks - in the final eval, there will be only one scene-file per task-name:
- Code: Select all
list_scenes = rospy.ServiceProxy("/euroc_c2_task_selector/list_scenes", ListScenes)
list_resp = list_scenes()
scene_names = {}
for scene in list_resp.scenes:
data = yaml.load(scene.description_yaml)
task_name = data["task_name"]
scene_names[task_name] = scene.name
def solve_simple_pick_and_place(scene_name):
start_sim = rospy.ServiceProxy("/euroc_c2_task_selector/start_simulator", StartSimulator)
resp = start_sim("C2TXX#YYYYYY", scene_name)
data = yaml.load(resp.description_yaml)
print "solving simple pick and place..."
# ...
# ...
solve_simple_pick_and_place(scene_names["task 1"])
solve_simple_pick_and_place_bad_calib(scene_names["task 2/1"]))
solve_simple_pick_and_place_bad_calib(scene_names["task 2/2"]))
solve_simple_pick_and_place_bad_calib(scene_names["task 2/3"]))
solve_mobile_pick_and_place(scene_names["task 3"]))
solve_mobile_pick_and_place_obstacles(scene_names["task 4/1"]))
solve_mobile_pick_and_place_obstacles(scene_names["task 4/2"]))
solve_mobile_pick_and_place_obstacles(scene_names["task 4/3"]))
solve_puzzle(scene_names["task 5"]))
solve_conveyor_belt(scene_names["task 6"]))