Embedded Motion Control/Hospital Room Competition 2019: Difference between revisions

From Control Systems Technology Group
Jump to navigation Jump to search
(Created page with 'thumb|right|700px|Scheme of a possible Hospital, with measurements, but not up to scale! '''Challenge Description''' The figure on the right shows a 2D r…')
 
No edit summary
 
(38 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[File:EMC2018C2.png|thumb|right|700px|Scheme of a possible Hospital, with measurements, but not up to scale!]]
[[File:Hospital_full.png|thumb|right|500px|Overview of a possible Hospital setup, not up to scale!]]


'''Challenge Description'''
'''Challenge Description'''


The figure on the right shows a 2D representation of a '''possible''' Hospital setup, '''as an example'''.
The figure on the right shows a 2D representation of a '''possible''' Hospital setup, '''as an example'''.
The map shows several numbered ''Rooms'', connected by a ''Hallway''.  
The map shows several ''rooms'' and a ''hallway''.  
In each ''Room'' there is a ''Cabinet'' (represented by a rectangular block).
In each ''room'' there are ''cabinets'' (represented by a rectangular block).
The objective is for PICO to "deliver" medicines from one '''Cabinet''' to another (both defined by the judges before the challenge).
The objective is for PICO to "deliver" medicines from one ''cabinet'' to another (the order of which defined by the judges just before the challenge starts).
The hospital will contain a number of unknown static and dynamic objects (boxes, human actors walking)


Since PICO does not have the capability to grab and cary medicines, the "delivery" task cannot be performed phycally.
Since PICO does not have the capability to grab and carry medicines, the "delivery" task cannot be performed physically.
Instead, the "delivery" is defined by the following steps:
Instead, the "delivery" is defined by the following steps:
* Drive up to cabinet A.
* Drive up to the first ''cabinet''.
* Position in front of the cabinet, facing towards the cabinet.
* Position in front of the ''cabinet'', facing towards the ''cabinet''.
* Give a clear sound signal, signalling PICO has "picked up" the medicine.
* Give a clear sound signal, signalling PICO has arrived at cabinet A (io.speak("I arrived at cabinet four")).
* Drive to cabinet B.
* Drive to the next ''cabinet''.
* Position in front of the cabinet, facing towards the cabinet.
* Position in front of the ''cabinet'', facing towards the ''cabinet''.
* Give a clear sound signal, signalling PICO has "put down" the medicine.
* Repeat until all the cabinets are visited in the correct order
 
 
'''Setup Specifications'''
* The ''hallway'' will be approximately 1.5 meters wide and does not have to be straight.
* All ''walls'' in the ''hospital'' will be approximately straight. The ''walls'' will be made of the 20cm thick blocks that are frequently used during test sessions.
* All ''corners'' in the ''hospital'' will be approximately right.
* The ''doors'' inside the ''hospital'' will be (time-invariant) openings in the ''walls'' of about 0.5-1m that may be '''closed or open'''.
* It is possible that a ''room'' has more than one ''door''.
* A ''cabinet'' is represented by a rectangular block.
* The front of the cabinet is defined as the first linesegment in the line array that represents a cabinet.
* A region will be marked in front of the ''cabinets''. This is the region in which PICO must stand (definition: middle-point of PICO in rectangle) when "taking" or "delivering" the medicine. This region will be a square with sides equal to the length of the front of the ''cabinet''.
* A random amount of ''dynamic objects'' will be present in the form of human actors. Additionally, an random amount of rectangular ''static objects'' will be placed throughout the hospital (see green blocks in figure on the right). The position does not have to be parallel to the walls.
* '''UPDATE2020!''' Since this year the challenge will be held completely in a simulated environment, the role of ''dynamic objects'' will not be performed by human actors. Instead, there will be objects in the hospital that are moving around in the hospital. These objects will try to not bump into PICO on purpose. The velocity of these object will be in the range of normal human walking velocity.
 
 


'''Challenge Conditions'''
'''Challenge Conditions'''
* PICO will start in the ''Hallway'', PICO will start up to 1 m away from the ''parking wall'' and definitely not touching it. PICO might not be aligned perfectly with the walls, but the wall on which the parking has to be done is behind PICO at first.
* PICO will start in the ''start area'', defined by a rectangle of approximately 1 by 1 meters. The orientation of PICO is arbitrary (i.e., not known to your software).
* After starting the software, PICO has to explore the (3-6) ''rectangular rooms'' of the Hospital, building a map, which will be needed for a later task. The doors inside the hospital will be (time-invariant) openings in the wall of about 0.5-1.5 m. It is possible that a room has more than one door (see ''Room 3'' in the example), however it is not possible to drive in a loop.  
* The list of cabinets to be visited will be provided right before the challenge starts as a list of integers (0 identifies the first cabinet in the array).  
* During the mapping, one of the team members has to show the map being built and comment on the map and the operation of PICO. How the mapping is presented is left up to the groups, remember we would like to see the worldmodel and understand what PICO is doing. (you could use the io.speak functionality here!)
* After starting the software, PICO has to drive to the first ''cabinet'' to "pick up" the medicine.
* When the map building is complete, PICO has to park backwards to the wall behind the starting position. Parking is done upon touching the wall, assessed by the tutors. After PICO parked, PICO should say: "I am parked!" (io.Speak).
* If PICO found the correct ''cabinet'' and signalled his "arrival", he has to drive to the next cabinets to "drop off" the medicines.
* Upon touching the wall, a second executable could be started, note however that it has to be build before the challenge starts!
* The task is completed after PICO visited all cabinets on the list.
* We will then place an object in one of the ''rooms'', PICO has to find this ''object'' and stand still close to it and say: "I found the object!".
* Bonus points are given to the groups that can detect the static and dynamic objects and present them in the world model. How this is presented is left to the groups.  
* When PICO stopped moving close to the ''object'', the challenge is completed.  
* Within the hospital start area, we will make sure that some visible features (i.e. lines, corners) remain visible (but we will not make it easy).  
* An actual map of the hospital will be provided to the teams one week before the final challenge, this will encompass a vector map (an example is provided at the bottom of this section). Note: we will only provide the vector map for the final challenge: no simulator map, no .png-image (as presented here on the right).  
 


'''Challenge Specifications'''
'''Challenge Rules'''
* Do not touch the walls! Slightly touching is allowed, however, bumping (''i.e.'', driving head-on into a wall) '''is not allowed'''! If PICO hits the wall, '''we''' decide whether it counts as ''bumping''.
* The list of cabinets to visit has to be supplied to the executable when starting the challenge, in the following format (for cabinets in the order: 2 -> 4 -> 3,):
<pre>./pico_do_your_thing 2 4 3 </pre>
* Do not touch the walls or objects! Slightly touching is allowed, however, bumping (''i.e.'', driving head-on into a wall) '''is not allowed'''! If PICO hits the wall, '''we''' decide whether it counts as ''bumping''.
* Every team has two trials (= max one restart). A trial ends if:
* Every team has two trials (= max one restart). A trial ends if:
** PICO ''bumps'' into the wall
** PICO ''bumps'' into: the wall, a static or a dynamic object.
** PICO has not moved or has not made sensible movements (as judged by the tutors) for 30 seconds
** PICO has not moved or has not made sensible movements (as judged by the tutors) for 30 seconds
** The total time limit of 10 minutes per group is reached  
** The total time limit of 10 minutes per group is reached  
Line 39: Line 59:
* Maximum speed (is limited in PICO): 0.5 m/s translational, 1.2 rad/s rotational.
* Maximum speed (is limited in PICO): 0.5 m/s translational, 1.2 rad/s rotational.
* There will be no second attempt if first attempt was successful
* There will be no second attempt if first attempt was successful
* Every situation that might occur, that is not covered in this document will be evaluated on the spot. If this happens, the judges have the final word.


'''Visualization'''
'''Visualization'''
* Your code should save a snapshot of the model (e.g., using OpenCV)
* Your code should save a snapshot of the laserdata in your group folder when in front of each cabinet (e.g., using OpenCV).
* The final snapshot should be saved after parking and can be used for presentation while pico finds the object
 


'''Robot Software'''
'''Robot Software'''
Line 48: Line 70:
** Your software can be updated with one easy command, ''e.g.'' 'git pull'
** Your software can be updated with one easy command, ''e.g.'' 'git pull'
** Your software can be compiled using 'cmake' and 'make'
** Your software can be compiled using 'cmake' and 'make'
** It is allowed to use multiple executables. Note that the ''Mapping/Parking''-phase and ''Searching''-phase can have separate executables, both have to be build before the challenge.  
** It is allowed to use multiple executables.
** '''If your set-up deviates from this method, let your tutor know 1 week before the challenge!'''
** '''If your set-up deviates from this method, let your tutor know 1 week before the challenge!'''
* The software of all groups will be updated on the robot '''before''' the challenge starts
* The software of all groups will be updated on the robot '''before''' the challenge starts
Line 57: Line 79:
** The safest way to make sure your code works is by avoiding catking workspaces and including everything in your CMakeLists.txt
** The safest way to make sure your code works is by avoiding catking workspaces and including everything in your CMakeLists.txt


''' Hint '''
 
* The following hint is provided regarding the location of the object:
'''Example map format and code'''
:::::'''''The object will be located in the room for which most openings (i.e., doors) have to be passed through to enter it'''''
* We provide a simple example of a room with two cabinets and the code to read the map into your own c++ code.
* For this simple example, a simulator map is also provided. (Note: a simulator map will not be provided for the final challenge).
* We used the 20cm thickness blocks for your convenience
* Remember to add unknown objects to your simulator and test environments and/or create other challenging maps and test scenarios!
<!--* '''You can find an example map (JSON) and the code to get you started here:''' [[File:Mrc_map_format_2020_corrected.zip]] -->
'''You can find an example map (JSON) and the code to get you started here:''' [[File:Mrc_map_format_2021.zip]]
 
 
<gallery widths="300px" heights="450px" style="text-align:left">
File:Example_map_simple_emc_2019.png|Overview of example map.
File:Vectormap_simple_example_emc_2019.png|Visualisation of vector map.
File:Example_map_sim_emc2019.png|Bitmap representation of map, used for simulator (see zip file).
</gallery>

Latest revision as of 08:45, 6 May 2021

Overview of a possible Hospital setup, not up to scale!

Challenge Description

The figure on the right shows a 2D representation of a possible Hospital setup, as an example. The map shows several rooms and a hallway. In each room there are cabinets (represented by a rectangular block). The objective is for PICO to "deliver" medicines from one cabinet to another (the order of which defined by the judges just before the challenge starts). The hospital will contain a number of unknown static and dynamic objects (boxes, human actors walking)

Since PICO does not have the capability to grab and carry medicines, the "delivery" task cannot be performed physically. Instead, the "delivery" is defined by the following steps:

  • Drive up to the first cabinet.
  • Position in front of the cabinet, facing towards the cabinet.
  • Give a clear sound signal, signalling PICO has arrived at cabinet A (io.speak("I arrived at cabinet four")).
  • Drive to the next cabinet.
  • Position in front of the cabinet, facing towards the cabinet.
  • Repeat until all the cabinets are visited in the correct order


Setup Specifications

  • The hallway will be approximately 1.5 meters wide and does not have to be straight.
  • All walls in the hospital will be approximately straight. The walls will be made of the 20cm thick blocks that are frequently used during test sessions.
  • All corners in the hospital will be approximately right.
  • The doors inside the hospital will be (time-invariant) openings in the walls of about 0.5-1m that may be closed or open.
  • It is possible that a room has more than one door.
  • A cabinet is represented by a rectangular block.
  • The front of the cabinet is defined as the first linesegment in the line array that represents a cabinet.
  • A region will be marked in front of the cabinets. This is the region in which PICO must stand (definition: middle-point of PICO in rectangle) when "taking" or "delivering" the medicine. This region will be a square with sides equal to the length of the front of the cabinet.
  • A random amount of dynamic objects will be present in the form of human actors. Additionally, an random amount of rectangular static objects will be placed throughout the hospital (see green blocks in figure on the right). The position does not have to be parallel to the walls.
  • UPDATE2020! Since this year the challenge will be held completely in a simulated environment, the role of dynamic objects will not be performed by human actors. Instead, there will be objects in the hospital that are moving around in the hospital. These objects will try to not bump into PICO on purpose. The velocity of these object will be in the range of normal human walking velocity.


Challenge Conditions

  • PICO will start in the start area, defined by a rectangle of approximately 1 by 1 meters. The orientation of PICO is arbitrary (i.e., not known to your software).
  • The list of cabinets to be visited will be provided right before the challenge starts as a list of integers (0 identifies the first cabinet in the array).
  • After starting the software, PICO has to drive to the first cabinet to "pick up" the medicine.
  • If PICO found the correct cabinet and signalled his "arrival", he has to drive to the next cabinets to "drop off" the medicines.
  • The task is completed after PICO visited all cabinets on the list.
  • Bonus points are given to the groups that can detect the static and dynamic objects and present them in the world model. How this is presented is left to the groups.
  • Within the hospital start area, we will make sure that some visible features (i.e. lines, corners) remain visible (but we will not make it easy).
  • An actual map of the hospital will be provided to the teams one week before the final challenge, this will encompass a vector map (an example is provided at the bottom of this section). Note: we will only provide the vector map for the final challenge: no simulator map, no .png-image (as presented here on the right).


Challenge Rules

  • The list of cabinets to visit has to be supplied to the executable when starting the challenge, in the following format (for cabinets in the order: 2 -> 4 -> 3,):
./pico_do_your_thing 2 4 3 
  • Do not touch the walls or objects! Slightly touching is allowed, however, bumping (i.e., driving head-on into a wall) is not allowed! If PICO hits the wall, we decide whether it counts as bumping.
  • Every team has two trials (= max one restart). A trial ends if:
    • PICO bumps into: the wall, a static or a dynamic object.
    • PICO has not moved or has not made sensible movements (as judged by the tutors) for 30 seconds
    • The total time limit of 10 minutes per group is reached
    • The group requests a restart (on the first trial)
  • restart means:
    • PICO restarts at the defined start position
    • The trail time (= the time graded) is reset, but
    • the total time keeps running
  • Maximum speed (is limited in PICO): 0.5 m/s translational, 1.2 rad/s rotational.
  • There will be no second attempt if first attempt was successful
  • Every situation that might occur, that is not covered in this document will be evaluated on the spot. If this happens, the judges have the final word.


Visualization

  • Your code should save a snapshot of the laserdata in your group folder when in front of each cabinet (e.g., using OpenCV).


Robot Software

  • Make sure your software is easy to set-up, i.e:
    • Your software can be updated with one easy command, e.g. 'git pull'
    • Your software can be compiled using 'cmake' and 'make'
    • It is allowed to use multiple executables.
    • If your set-up deviates from this method, let your tutor know 1 week before the challenge!
  • The software of all groups will be updated on the robot before the challenge starts
    • This way, teams starting the challenge have as much time as teams that do the challenge at the end, compiling in between trials is not allowed.
  • If you use a separate catkin workspace
    • Make sure this workspace is compiled during the final testing hour
    • Building separate catkin workspaces during the final challenge is not allowed
    • The safest way to make sure your code works is by avoiding catking workspaces and including everything in your CMakeLists.txt


Example map format and code

  • We provide a simple example of a room with two cabinets and the code to read the map into your own c++ code.
  • For this simple example, a simulator map is also provided. (Note: a simulator map will not be provided for the final challenge).
  • We used the 20cm thickness blocks for your convenience
  • Remember to add unknown objects to your simulator and test environments and/or create other challenging maps and test scenarios!

You can find an example map (JSON) and the code to get you started here: File:Mrc map format 2021.zip