Embedded Motion Control/Restaurant Competition 2023: Difference between revisions

From Control Systems Technology Group
Jump to navigation Jump to search
(initial copy of hospital)
 
(rename hero to jackal)
Tag: 2017 source edit
 
(18 intermediate revisions by 3 users not shown)
Line 1: Line 1:
[[File:Hospital_full.png|thumb|right|500px|Overview of a possible Hospital setup, not up to scale!]]
[[File:Restaurant.png|thumb|right|500px|Overview of a possible restaurant 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''' Restaurant setup, '''as an example'''. The objective is for Jackal to "deliver" orders from the kitchen to a few tables. Which tables must be reached and in what order will be defined by the judges just before the challenge starts. The restaurant will contain a number of unknown static and dynamic objects (boxes, human actors walking)
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.
The delivery of an order is defined as follows
Instead, the "delivery" is defined by the following steps:


*Drive up to the first ''cabinet''.
*Drive up to the table.
*Position in front of the ''cabinet'', facing towards the ''cabinet''.
*Position near the table, facing towards the table. The robot should be close enough for a customer to comfortably take their order from the tray. The exact part of the table that the robot stands next to does not matter.
*Give a clear sound signal, signalling PICO has arrived at cabinet A (io.speak("I arrived at cabinet four")).
*Give a clear sound signal, signalling Jackal has arrived at table A (io.speak("I arrived at table four")).
*Drive to the next ''cabinet''.
*Repeat until all the tables are visited in the correct order (your robot does not need to return to the starting point)
*Position in front of the ''cabinet'', facing towards the ''cabinet''.
*Repeat until all the cabinets are visited in the correct order




'''Setup Specifications'''
'''Environment 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.
 


*All ''walls'' in the ''restaurant'' will be approximately straight. No weird curving walls.
*The tables can be regarded to be solid objects that will show up as rectangles in the LiDAR measurements (So you won't have to detect the table's legs).
*The ''doors'' inside the ''restaurant'' will be openings in the ''walls'' of about 0.5-1m that may be '''closed or open'''. Doors can be opened by standing in front of one and having the robot ask for it to be opened.
*There may be multiple routes to a given goal.
*A number of ''dynamic objects'' will be present in the form of human actors. Additionally, a number of ''static objects'' will be placed throughout the restaurant (including possible chairs next to the tables!). The position does not have to be parallel to the walls.
**Chairs are '''Not''' guaranteed to show up as squares in your LiDAR measurements (you might only see the legs!).
**These extra objects will '''not''' be present on the map that you're provided ahead of time.


'''Challenge Conditions'''
'''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).
*Jackal will start in the ''start area'', defined by a rectangle of approximately 1 by 1 meters. The orientation of Jackal 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).
*The list of tables to be visited will be provided right before the challenge starts as a list of integers (0 identifies the first table in the array).
*After starting the software, PICO has to drive to the first ''cabinet'' to "pick up" the medicine.
*After starting the software, Jackal has to drive to the first table to deliver the order.
*If PICO found the correct ''cabinet'' and signalled his "arrival", he has to drive to the next cabinets to "drop off" the medicines.
*If Jackal found the correct ''table'' and signalled his arrival, he has to drive to the next tables to deliver the orders.
*The task is completed after PICO visited all cabinets on the list.
*The task is completed after Jackal visited all tables 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.
*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).
*Within the restaurant start area, we will make sure that some visible features (i.e. lines, corners) remain visible.
*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).
*An actual map of the restaurant will be provided to the teams one week before the final challenge, this will encompass a vector map and a gridmap (an example is provided at the bottom of this section).
*Any outside sensing systems, such as the Opti-track, that might have been available during testing will '''not''' be available during the final challenge.




'''Challenge Rules'''
'''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,):
*The list of tables to visit has to be supplied to the executable when starting the challenge, in the following format (for tables in the order: 2 -> 4 -> 3):
<pre>./pico_do_your_thing 2 4 3 </pre>
<pre>./Jackal_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''.
*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 Jackal 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, a static or a dynamic object.
**Jackal ''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
**Jackal 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
**The group requests a restart (on the first trial)
**The group requests a restart (on the first trial)
*restart means:
*restart means:
**PICO restarts at the defined start position
**Jackal restarts at the defined start position
**The trail time (= the time graded) is reset, but
**The trail time (= the time graded) is reset, but
**the total time keeps running
**the total time keeps running
*Maximum speed (is limited in PICO): 0.5 m/s translational, 1.2 rad/s rotational.
*Maximum speed (is limited in Jackal): 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.
*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).




Line 79: Line 63:
**It is allowed to use multiple executables.
**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 '''the morning 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.
**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'''
'''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.
*We provide a simple example of a room with two tables 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).
*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
*We used the 20cm thickness blocks for your convenience
Line 103: Line 83:
File:Example_map_sim_emc2019.png|Bitmap representation of map, used for simulator (see zip file).
File:Example_map_sim_emc2019.png|Bitmap representation of map, used for simulator (see zip file).
</gallery>
</gallery>
An example map (PNG) for the restaurant challenge with more tables is provided here: [[:File:ExampleRestaurantMap.png]].
<div class="mw-collapsible mw-collapsed" style="max-width:700px; overflow:auto;">
The corresponding data that you could use in a JSON-file is provided here (click 'Expand'):
<div class="mw-collapsible-content">
<pre>
{
  "tables":[
    [
      [29, 35],
      [35, 34],
      [34, 28],
      [28, 29]],
    [
      [45, 47],
      [47, 46],
      [46, 44],
      [44, 45]],
    [
      [33, 32],
      [32, 21],
      [21, 22],
      [22, 33]],
    [
      [48, 49],
      [49, 59],
      [59, 58],
      [58, 48]],
    [
      [26, 24],
      [24, 25],
      [25, 27],
      [27, 26]],
    [
      [42, 36],
      [36, 37],
      [37, 43],
      [43, 42]],
    [
      [50, 51],
      [51, 62],
      [62, 61],
      [61, 50]]
  ],
  "walls":[
    [0, 1],
    [1, 8],
    [8, 2],
    [2, 0],
    [2, 3],
    [3, 55],
    [55, 54],
    [54, 2],
    [7, 8],
    [8, 64],
    [64, 63],
    [63, 7],
    [54, 56],
    [56, 66],
    [66, 65],
    [65, 54],
    [57, 60],
    [60, 68],
    [68, 67],
    [67, 57],
    [61, 64],
    [64, 70],
    [70, 69],
    [69, 61],
    [13, 14],
    [14, 19],
    [19, 18],
    [18, 13],
    [15, 16],
    [16, 23],
    [23, 20],
    [20, 15],
    [11, 12],
    [12, 31],
    [31, 30],
    [30, 11],
    [6, 10],
    [10, 17],
    [17, 9],
    [9, 6],
    [38, 40],
    [40, 41],
    [41, 39],
    [39, 38]
  ],
  "doors":[
    [
      [4, 5],
      [5, 12],
      [12, 11],
      [11, 4]],
    [
      [30, 31],
      [31, 39],
      [39, 38],
      [38, 30]]
  ],
  "start_area":[
    [
      [52, 53],
      [53, 67],
      [67, 66],
      [66, 52]]
  ],
  "points":[
    {"x": 0.0, "y": 5.0, "_comment": 0 },
    {"x": 6.0, "y": 5.0, "_comment": 1 },
    {"x": 0.0, "y": 4.8, "_comment": 2 },
    {"x": 0.2, "y": 4.8, "_comment": 3 },
    {"x": 3.7, "y": 4.8, "_comment": 4 },
    {"x": 3.9, "y": 4.8, "_comment": 5 },
    {"x": 5.1, "y": 4.8, "_comment": 6 },
    {"x": 5.8, "y": 4.8, "_comment": 7 },
    {"x": 6.0, "y": 4.8, "_comment": 8 },
    {"x": 4.8, "y": 4.5, "_comment": 9 },
    {"x": 5.8, "y": 4.1, "_comment": 10 },
    {"x": 3.7, "y": 4.0, "_comment": 11 },
    {"x": 3.9, "y": 4.0, "_comment": 12 },
    {"x": 0.2, "y": 3.8, "_comment": 13 },
    {"x": 1.5, "y": 3.8, "_comment": 14 },
    {"x": 2.3, "y": 3.8, "_comment": 15 },
    {"x": 3.7, "y": 3.8, "_comment": 16 },
    {"x": 5.5, "y": 3.8, "_comment": 17 },
    {"x": 0.2, "y": 3.6, "_comment": 18 },
    {"x": 1.5, "y": 3.6, "_comment": 19 },
    {"x": 2.3, "y": 3.6, "_comment": 20 },
    {"x": 2.4, "y": 3.6, "_comment": 21 },
    {"x": 2.9, "y": 3.6, "_comment": 22 },
    {"x": 3.7, "y": 3.6, "_comment": 23 },
    {"x": 4.8, "y": 3.6, "_comment": 24 },
    {"x": 5.8, "y": 3.6, "_comment": 25 },
    {"x": 4.8, "y": 3.1, "_comment": 26 },
    {"x": 5.8, "y": 3.1, "_comment": 27 },
    {"x": 0.2, "y": 3.0, "_comment": 28 },
    {"x": 1.2, "y": 3.0, "_comment": 29 },
    {"x": 3.7, "y": 3.0, "_comment": 30 },
    {"x": 3.9, "y": 3.0, "_comment": 31 },
    {"x": 2.4, "y": 2.6, "_comment": 32 },
    {"x": 2.9, "y": 2.6, "_comment": 33 },
    {"x": 0.2, "y": 2.5, "_comment": 34 },
    {"x": 1.2, "y": 2.5, "_comment": 35 },
    {"x": 4.8, "y": 2.3, "_comment": 36 },
    {"x": 5.8, "y": 2.3, "_comment": 37 },
    {"x": 3.7, "y": 2.2, "_comment": 38 },
    {"x": 3.9, "y": 2.2, "_comment": 39 },
    {"x": 3.7, "y": 1.8, "_comment": 40 },
    {"x": 3.9, "y": 1.8, "_comment": 41 },
    {"x": 4.8, "y": 1.8, "_comment": 42 },
    {"x": 5.8, "y": 1.8, "_comment": 43 },
    {"x": 0.2, "y": 1.7, "_comment": 44 },
    {"x": 1.2, "y": 1.7, "_comment": 45 },
    {"x": 0.2, "y": 1.2, "_comment": 46 },
    {"x": 1.2, "y": 1.2, "_comment": 47 },
    {"x": 2.4, "y": 1.2, "_comment": 48 },
    {"x": 2.9, "y": 1.2, "_comment": 49 },
    {"x": 4.6, "y": 1.2, "_comment": 50 },
    {"x": 5.1, "y": 1.2, "_comment": 51 },
    {"x": 1.2, "y": 1.0, "_comment": 52 },
    {"x": 2.2, "y": 1.0, "_comment": 53 },
    {"x": 0.0, "y": 0.2, "_comment": 54 },
    {"x": 0.2, "y": 0.2, "_comment": 55 },
    {"x": 1.2, "y": 0.2, "_comment": 56 },
    {"x": 2.2, "y": 0.2, "_comment": 57 },
    {"x": 2.4, "y": 0.2, "_comment": 58 },
    {"x": 2.9, "y": 0.2, "_comment": 59 },
    {"x": 3.6, "y": 0.2, "_comment": 60 },
    {"x": 4.6, "y": 0.2, "_comment": 61 },
    {"x": 5.1, "y": 0.2, "_comment": 62 },
    {"x": 5.8, "y": 0.2, "_comment": 63 },
    {"x": 6.0, "y": 0.2, "_comment": 64 },
    {"x": 0.0, "y": 0.0, "_comment": 65 },
    {"x": 1.2, "y": 0.0, "_comment": 66 },
    {"x": 2.2, "y": 0.0, "_comment": 67 },
    {"x": 3.6, "y": 0.0, "_comment": 68 },
    {"x": 4.6, "y": 0.0, "_comment": 69 },
    {"x": 6.0, "y": 0.0, "_comment": 70 }
  ]
}
</pre>
</div>
</div>
You can use the following settings (resolution etc.) in your YAML-file:
<pre>
image: ExampleRestaurantMap.png #include the (relative) path to where you put the PNG-file
resolution: 0.0125
origin: [0.0, 0.0, 0.0]
occupied_thresh: 0.9
free_thresh: 0.1
negate: 0
</pre>
A distorted version of this map, with slightly displaced walls and tables and some added obstacles, is provided here: [[:File:ExampleRestaurantMapDistorted.png]].

Latest revision as of 11:58, 9 April 2024

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

Challenge Description

The figure on the right shows a 2D representation of a possible Restaurant setup, as an example. The objective is for Jackal to "deliver" orders from the kitchen to a few tables. Which tables must be reached and in what order will be defined by the judges just before the challenge starts. The restaurant will contain a number of unknown static and dynamic objects (boxes, human actors walking)

The delivery of an order is defined as follows

  • Drive up to the table.
  • Position near the table, facing towards the table. The robot should be close enough for a customer to comfortably take their order from the tray. The exact part of the table that the robot stands next to does not matter.
  • Give a clear sound signal, signalling Jackal has arrived at table A (io.speak("I arrived at table four")).
  • Repeat until all the tables are visited in the correct order (your robot does not need to return to the starting point)


Environment Specifications

  • All walls in the restaurant will be approximately straight. No weird curving walls.
  • The tables can be regarded to be solid objects that will show up as rectangles in the LiDAR measurements (So you won't have to detect the table's legs).
  • The doors inside the restaurant will be openings in the walls of about 0.5-1m that may be closed or open. Doors can be opened by standing in front of one and having the robot ask for it to be opened.
  • There may be multiple routes to a given goal.
  • A number of dynamic objects will be present in the form of human actors. Additionally, a number of static objects will be placed throughout the restaurant (including possible chairs next to the tables!). The position does not have to be parallel to the walls.
    • Chairs are Not guaranteed to show up as squares in your LiDAR measurements (you might only see the legs!).
    • These extra objects will not be present on the map that you're provided ahead of time.

Challenge Conditions

  • Jackal will start in the start area, defined by a rectangle of approximately 1 by 1 meters. The orientation of Jackal is arbitrary (i.e., not known to your software).
  • The list of tables to be visited will be provided right before the challenge starts as a list of integers (0 identifies the first table in the array).
  • After starting the software, Jackal has to drive to the first table to deliver the order.
  • If Jackal found the correct table and signalled his arrival, he has to drive to the next tables to deliver the orders.
  • The task is completed after Jackal visited all tables 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 restaurant start area, we will make sure that some visible features (i.e. lines, corners) remain visible.
  • An actual map of the restaurant will be provided to the teams one week before the final challenge, this will encompass a vector map and a gridmap (an example is provided at the bottom of this section).
  • Any outside sensing systems, such as the Opti-track, that might have been available during testing will not be available during the final challenge.


Challenge Rules

  • The list of tables to visit has to be supplied to the executable when starting the challenge, in the following format (for tables in the order: 2 -> 4 -> 3):
./Jackal_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 Jackal hits the wall, we decide whether it counts as bumping.
  • Every team has two trials (= max one restart). A trial ends if:
    • Jackal bumps into: the wall, a static or a dynamic object.
    • Jackal 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:
    • Jackal 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 Jackal): 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.


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 the morning 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.


Example map format and code

  • We provide a simple example of a room with two tables 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



An example map (PNG) for the restaurant challenge with more tables is provided here: File:ExampleRestaurantMap.png.

The corresponding data that you could use in a JSON-file is provided here (click 'Expand'):

{
  "tables":[
    [
      [29, 35],
      [35, 34],
      [34, 28],
      [28, 29]],

    [
      [45, 47],
      [47, 46],
      [46, 44],
      [44, 45]],

    [
      [33, 32],
      [32, 21],
      [21, 22],
      [22, 33]],

    [
      [48, 49],
      [49, 59],
      [59, 58],
      [58, 48]],

    [
      [26, 24],
      [24, 25],
      [25, 27],
      [27, 26]],

    [
      [42, 36],
      [36, 37],
      [37, 43],
      [43, 42]],

    [
      [50, 51],
      [51, 62],
      [62, 61],
      [61, 50]]
  ],

  "walls":[
    [0, 1],
    [1, 8],
    [8, 2],
    [2, 0],
    [2, 3],
    [3, 55],
    [55, 54],
    [54, 2],
    [7, 8],
    [8, 64],
    [64, 63],
    [63, 7],
    [54, 56],
    [56, 66],
    [66, 65],
    [65, 54],
    [57, 60],
    [60, 68],
    [68, 67],
    [67, 57],
    [61, 64],
    [64, 70],
    [70, 69],
    [69, 61],
    [13, 14],
    [14, 19],
    [19, 18],
    [18, 13],
    [15, 16],
    [16, 23],
    [23, 20],
    [20, 15],
    [11, 12],
    [12, 31],
    [31, 30],
    [30, 11],
    [6, 10],
    [10, 17],
    [17, 9],
    [9, 6],
    [38, 40],
    [40, 41],
    [41, 39],
    [39, 38]
  ],

  "doors":[
    [
      [4, 5],
      [5, 12],
      [12, 11],
      [11, 4]],

    [
      [30, 31],
      [31, 39],
      [39, 38],
      [38, 30]]
  ],

  "start_area":[
    [
      [52, 53],
      [53, 67],
      [67, 66],
      [66, 52]]
  ],

  "points":[
    {"x": 0.0, "y": 5.0, "_comment": 0 },
    {"x": 6.0, "y": 5.0, "_comment": 1 },
    {"x": 0.0, "y": 4.8, "_comment": 2 },
    {"x": 0.2, "y": 4.8, "_comment": 3 },
    {"x": 3.7, "y": 4.8, "_comment": 4 },
    {"x": 3.9, "y": 4.8, "_comment": 5 },
    {"x": 5.1, "y": 4.8, "_comment": 6 },
    {"x": 5.8, "y": 4.8, "_comment": 7 },
    {"x": 6.0, "y": 4.8, "_comment": 8 },
    {"x": 4.8, "y": 4.5, "_comment": 9 },
    {"x": 5.8, "y": 4.1, "_comment": 10 },
    {"x": 3.7, "y": 4.0, "_comment": 11 },
    {"x": 3.9, "y": 4.0, "_comment": 12 },
    {"x": 0.2, "y": 3.8, "_comment": 13 },
    {"x": 1.5, "y": 3.8, "_comment": 14 },
    {"x": 2.3, "y": 3.8, "_comment": 15 },
    {"x": 3.7, "y": 3.8, "_comment": 16 },
    {"x": 5.5, "y": 3.8, "_comment": 17 },
    {"x": 0.2, "y": 3.6, "_comment": 18 },
    {"x": 1.5, "y": 3.6, "_comment": 19 },
    {"x": 2.3, "y": 3.6, "_comment": 20 },
    {"x": 2.4, "y": 3.6, "_comment": 21 },
    {"x": 2.9, "y": 3.6, "_comment": 22 },
    {"x": 3.7, "y": 3.6, "_comment": 23 },
    {"x": 4.8, "y": 3.6, "_comment": 24 },
    {"x": 5.8, "y": 3.6, "_comment": 25 },
    {"x": 4.8, "y": 3.1, "_comment": 26 },
    {"x": 5.8, "y": 3.1, "_comment": 27 },
    {"x": 0.2, "y": 3.0, "_comment": 28 },
    {"x": 1.2, "y": 3.0, "_comment": 29 },
    {"x": 3.7, "y": 3.0, "_comment": 30 },
    {"x": 3.9, "y": 3.0, "_comment": 31 },
    {"x": 2.4, "y": 2.6, "_comment": 32 },
    {"x": 2.9, "y": 2.6, "_comment": 33 },
    {"x": 0.2, "y": 2.5, "_comment": 34 },
    {"x": 1.2, "y": 2.5, "_comment": 35 },
    {"x": 4.8, "y": 2.3, "_comment": 36 },
    {"x": 5.8, "y": 2.3, "_comment": 37 },
    {"x": 3.7, "y": 2.2, "_comment": 38 },
    {"x": 3.9, "y": 2.2, "_comment": 39 },
    {"x": 3.7, "y": 1.8, "_comment": 40 },
    {"x": 3.9, "y": 1.8, "_comment": 41 },
    {"x": 4.8, "y": 1.8, "_comment": 42 },
    {"x": 5.8, "y": 1.8, "_comment": 43 },
    {"x": 0.2, "y": 1.7, "_comment": 44 },
    {"x": 1.2, "y": 1.7, "_comment": 45 },
    {"x": 0.2, "y": 1.2, "_comment": 46 },
    {"x": 1.2, "y": 1.2, "_comment": 47 },
    {"x": 2.4, "y": 1.2, "_comment": 48 },
    {"x": 2.9, "y": 1.2, "_comment": 49 },
    {"x": 4.6, "y": 1.2, "_comment": 50 },
    {"x": 5.1, "y": 1.2, "_comment": 51 },
    {"x": 1.2, "y": 1.0, "_comment": 52 },
    {"x": 2.2, "y": 1.0, "_comment": 53 },
    {"x": 0.0, "y": 0.2, "_comment": 54 },
    {"x": 0.2, "y": 0.2, "_comment": 55 },
    {"x": 1.2, "y": 0.2, "_comment": 56 },
    {"x": 2.2, "y": 0.2, "_comment": 57 },
    {"x": 2.4, "y": 0.2, "_comment": 58 },
    {"x": 2.9, "y": 0.2, "_comment": 59 },
    {"x": 3.6, "y": 0.2, "_comment": 60 },
    {"x": 4.6, "y": 0.2, "_comment": 61 },
    {"x": 5.1, "y": 0.2, "_comment": 62 },
    {"x": 5.8, "y": 0.2, "_comment": 63 },
    {"x": 6.0, "y": 0.2, "_comment": 64 },
    {"x": 0.0, "y": 0.0, "_comment": 65 },
    {"x": 1.2, "y": 0.0, "_comment": 66 },
    {"x": 2.2, "y": 0.0, "_comment": 67 },
    {"x": 3.6, "y": 0.0, "_comment": 68 },
    {"x": 4.6, "y": 0.0, "_comment": 69 },
    {"x": 6.0, "y": 0.0, "_comment": 70 }
  ]
}

You can use the following settings (resolution etc.) in your YAML-file:

image: ExampleRestaurantMap.png #include the (relative) path to where you put the PNG-file 
resolution: 0.0125
origin: [0.0, 0.0, 0.0]
occupied_thresh: 0.9
free_thresh: 0.1
negate: 0

A distorted version of this map, with slightly displaced walls and tables and some added obstacles, is provided here: File:ExampleRestaurantMapDistorted.png.