From 0249d843f9987d1dee5e1ea3799e072a0534994b Mon Sep 17 00:00:00 2001 From: glipR <37640160+glipR@users.noreply.github.com> Date: Wed, 7 Apr 2021 19:13:33 +1000 Subject: [PATCH 1/5] Add randomisation settings to EV3Sim (Not tied to presets). --- ev3sim/assets/default_theme.json | 10 ++ ev3sim/simulation/loader.py | 26 ++++ ev3sim/visual/settings/elements.py | 31 +++++ ev3sim/visual/settings/main_settings.py | 24 +++- .../visual/settings/randomisation_settings.py | 115 ++++++++++++++++++ 5 files changed, 205 insertions(+), 1 deletion(-) create mode 100644 ev3sim/visual/settings/randomisation_settings.py diff --git a/ev3sim/assets/default_theme.json b/ev3sim/assets/default_theme.json index d8004c57..f683c01a 100644 --- a/ev3sim/assets/default_theme.json +++ b/ev3sim/assets/default_theme.json @@ -326,6 +326,16 @@ "size": "24" } }, + "settings-title": { + "colours": { + "normal_text": "#f7ede2", + "dark_bg": "#00000000" + }, + "font": { + "name": "Roboto", + "size": "24" + } + }, "checkbox-button": { "colours": { "normal_bg": "#ffffff00", diff --git a/ev3sim/simulation/loader.py b/ev3sim/simulation/loader.py index a722ac21..88f61db4 100644 --- a/ev3sim/simulation/loader.py +++ b/ev3sim/simulation/loader.py @@ -328,11 +328,37 @@ def __init__(self): "FPS": ObjectSetting(ScriptLoader, "VISUAL_TICK_RATE"), "tick_rate": ObjectSetting(ScriptLoader, "GAME_TICK_RATE"), "timescale": ObjectSetting(ScriptLoader, "TIME_SCALE"), + "randomise_sensors": ObjectSetting(ScriptLoader, "RANDOMISE_SENSORS"), "console_log": ObjectSetting(Logger, "LOG_CONSOLE"), "workspace_folder": ObjectSetting(StateHandler, "WORKSPACE_FOLDER"), } + from ev3sim.devices.colour.base import ColourSensorMixin + from ev3sim.devices.colour.ev3 import ColorSensor + from ev3sim.devices.compass.ev3 import CompassSensor + from ev3sim.devices.infrared.base import InfraredSensorMixin + from ev3sim.devices.motor.base import MotorMixin + from ev3sim.devices.ultrasonic.base import UltrasonicSensorMixin + + randomisation_settings = { + "COLOUR_SENSOR_RADIUS": ObjectSetting(ColourSensorMixin, "SENSOR_RADIUS"), + "COLOUR_SENSOR_SAMPLING_POINTS": ObjectSetting(ColourSensorMixin, "SENSOR_POINTS"), + "COLOUR_MAX_RGB_BIAS": ObjectSetting(ColorSensor, "MAX_RGB_BIAS"), + "COLOUR_MIN_RGB_BIAS": ObjectSetting(ColorSensor, "MIN_RGB_BIAS"), + "COMPASS_N_POINTS": ObjectSetting(CompassSensor, "NEAREST_POINTS_NUMBER"), + "COMPASS_POINT_VARIANCE": ObjectSetting(CompassSensor, "NEAREST_POINTS_VARIANCE"), + "COMPASS_NOISE_RATE": ObjectSetting(CompassSensor, "NOISE_WIDTH_PER_TICK"), + "COMPASS_NOISE_AMP": ObjectSetting(CompassSensor, "NOISE_AMPLIFIER"), + "COMPASS_MAXIMUM_NOISE_EFFECT": ObjectSetting(CompassSensor, "NOISE_EFFECT_MAX"), + "INFRARED_BIAS_AMP": ObjectSetting(InfraredSensorMixin, "SUBSENSOR_BIAS_MAGNITUDE"), + "MOTOR_MIN_MULT": ObjectSetting(MotorMixin, "MIN_FORCE_PCT"), + "MOTOR_MAX_MULT": ObjectSetting(MotorMixin, "MAX_FORCE_PCT"), + "MOTOR_N_SPEEDS": ObjectSetting(MotorMixin, "FIXED_SPEED_POINTS"), + "ULTRASONIC_NOISE_ANGLE_AMPLITUDE": ObjectSetting(UltrasonicSensorMixin, "ANGLE_RANDOM_AMPLITUDE"), + "ULTRASONIC_OFFSET_AMP": ObjectSetting(UltrasonicSensorMixin, "OFFSET_MAX"), + } settings.addSettingGroup("app", loader_settings) settings.addSettingGroup("screen", screen_settings) + settings.addSettingGroup("randomisation", randomisation_settings) self.shared_info = {} def closeProcesses(self): diff --git a/ev3sim/visual/settings/elements.py b/ev3sim/visual/settings/elements.py index 3d2ae671..1007c247 100644 --- a/ev3sim/visual/settings/elements.py +++ b/ev3sim/visual/settings/elements.py @@ -41,6 +41,37 @@ def generateVisual(self, size, container, manager, idx): raise NotImplementedError() +class Title(SettingsVisualElement): + + num_objs = 1 + + def __init__(self, title, offset): + self.title = title + self.offset = offset + self.menu = None + self.json_keys = "__filename__" + + def getFromJson(self, json_obj): + pass + + def setToJson(self, json_obj): + pass + + def generateVisual(self, size, container, manager, idx): + self.container = container + off = self.offset(size) + label_size = ((size[0] - 40), 40) + label_pos = (off[0] + 20, off[1]) + self.button = pygame_gui.elements.UILabel( + relative_rect=pygame.Rect(*label_pos, *label_size), + manager=manager, + object_id=pygame_gui.core.ObjectID(f"{idx}-title-label", "settings-title"), + container=container, + text=self.title, + ) + return [self.button] + + class Button(SettingsVisualElement): num_objs = 1 diff --git a/ev3sim/visual/settings/main_settings.py b/ev3sim/visual/settings/main_settings.py index c5d4acd1..2fe4604a 100644 --- a/ev3sim/visual/settings/main_settings.py +++ b/ev3sim/visual/settings/main_settings.py @@ -1,4 +1,19 @@ -from ev3sim.visual.settings.elements import NumberEntry, FileEntry, Checkbox +from ev3sim.file_helper import find_abs +from ev3sim.search_locations import config_locations +from ev3sim.visual.settings.elements import NumberEntry, FileEntry, Checkbox, Button +from ev3sim.visual.settings.randomisation_settings import randomisation_settings + + +def onClickConfigEditor(filename): + from ev3sim.visual.manager import ScreenObjectManager + + ScreenObjectManager.instance.pushScreen( + ScreenObjectManager.SCREEN_SETTINGS, + file=find_abs("user_config.yaml", config_locations()), + settings=randomisation_settings, + ) + ScreenObjectManager.instance.screens[ScreenObjectManager.SCREEN_SETTINGS].clearEvents() + main_settings = [ { @@ -16,6 +31,13 @@ Checkbox(["app", "console_log"], True, "Console", (lambda s: (0, 170) if s[0] < 540 else (s[0] / 2, 70))), ], }, + { + "height": (lambda s: 90), + "objects": [ + Checkbox(["app", "randomise_sensors"], False, "Random Noise", (lambda s: (0, 20))), + Button("Randomisation Config", (lambda s: (0, 70) if s[0] < 540 else (s[0] / 2, 20)), onClickConfigEditor), + ], + }, { "height": (lambda s: 90), "objects": [ diff --git a/ev3sim/visual/settings/randomisation_settings.py b/ev3sim/visual/settings/randomisation_settings.py new file mode 100644 index 00000000..58f63e64 --- /dev/null +++ b/ev3sim/visual/settings/randomisation_settings.py @@ -0,0 +1,115 @@ +from ev3sim.visual.settings.elements import NumberEntry, Title + +randomisation_settings = [ + { + "height": (lambda s: 290 if s[0] < 580 else 190), + "objects": [ + Title("Colour Sensor", (lambda s: (0, 20))), + NumberEntry(["randomisation", "COLOUR_SENSOR_RADIUS"], 1, "Sampling Radius", (lambda s: (0, 70)), float), + NumberEntry( + ["randomisation", "COLOUR_SENSOR_SAMPLING_POINTS"], + 100, + "Sampling Points", + (lambda s: (0, 120) if s[0] < 540 else (s[0] / 2, 70)), + int, + ), + NumberEntry( + ["randomisation", "COLOUR_MAX_RGB_BIAS"], + 400, + "Max RGB Bias", + (lambda s: (0, 170) if s[0] < 540 else (0, 120)), + float, + ), + NumberEntry( + ["randomisation", "COLOUR_MIN_RGB_BIAS"], + 230, + "Min RGB Bias", + (lambda s: (0, 220) if s[0] < 540 else (s[0] / 2, 120)), + float, + ), + ], + }, + { + "height": (lambda s: 340 if s[0] < 580 else 240), + "objects": [ + Title("Compass Sensor", (lambda s: (0, 20))), + NumberEntry(["randomisation", "COMPASS_N_POINTS"], 51, "Static Points", (lambda s: (0, 70)), int), + NumberEntry( + ["randomisation", "COMPASS_POINT_VARIANCE"], + 16, + "Static Variance", + (lambda s: (0, 120) if s[0] < 540 else (s[0] / 2, 70)), + float, + ), + NumberEntry( + ["randomisation", "COMPASS_NOISE_RATE"], + 0.03, + "Noise rate of change", + (lambda s: (0, 170) if s[0] < 540 else (0, 120)), + float, + ), + NumberEntry( + ["randomisation", "COMPASS_NOISE_AMP"], + 0.2, + "Noise amplitude", + (lambda s: (0, 220) if s[0] < 540 else (s[0] / 2, 120)), + float, + ), + NumberEntry( + ["randomisation", "COMPASS_MAXIMUM_NOISE_EFFECT"], + 15, + "Max Noise effect", + (lambda s: (0, 270) if s[0] < 540 else (0, 170)), + float, + ), + ], + }, + { + "height": (lambda s: 140), + "objects": [ + Title("Infrared Sensor", (lambda s: (0, 20))), + NumberEntry(["randomisation", "INFRARED_BIAS_AMP"], 5, "Bias Amplitude", (lambda s: (0, 70)), float), + ], + }, + { + "height": (lambda s: 190 if s[0] < 580 else 140), + "objects": [ + Title("Ultrasonic Sensor", (lambda s: (0, 20))), + NumberEntry( + ["randomisation", "ULTRASONIC_NOISE_ANGLE_AMPLITUDE"], + 40, + "Angle change effect", + (lambda s: (0, 70)), + float, + ), + NumberEntry( + ["randomisation", "ULTRASONIC_OFFSET_AMP"], + 5, + "Static noise", + (lambda s: (0, 120) if s[0] < 540 else (s[0] / 2, 70)), + float, + ), + ], + }, + { + "height": (lambda s: 240 if s[0] < 580 else 190), + "objects": [ + Title("Motors", (lambda s: (0, 20))), + NumberEntry(["randomisation", "MOTOR_MIN_MULT"], 0.9, "Min speed mult", (lambda s: (0, 70)), float), + NumberEntry( + ["randomisation", "MOTOR_MAX_MULT"], + 1.05, + "Max speed mult", + (lambda s: (0, 120) if s[0] < 540 else (s[0] / 2, 70)), + float, + ), + NumberEntry( + ["randomisation", "MOTOR_N_SPEEDS"], + 71, + "Static Points", + (lambda s: (0, 170) if s[0] < 540 else (0, 120)), + int, + ), + ], + }, +] From 1478137c7b0ecebd5f9610d9c8fb7f02a19749ba Mon Sep 17 00:00:00 2001 From: glipR <37640160+glipR@users.noreply.github.com> Date: Fri, 9 Apr 2021 11:01:35 +1000 Subject: [PATCH 2/5] Add scrolling to settings. --- ev3sim/visual/settings/menu.py | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/ev3sim/visual/settings/menu.py b/ev3sim/visual/settings/menu.py index 9e9ac437..60b2b2f9 100644 --- a/ev3sim/visual/settings/menu.py +++ b/ev3sim/visual/settings/menu.py @@ -1,3 +1,4 @@ +from ev3sim.visual.menus.utils import CustomScroll from ev3sim.settings import SettingsManager from ev3sim.visual.settings.elements import TextEntry import os @@ -21,6 +22,25 @@ def clearEvents(self): self.onCancel = None def generateObjects(self): + # Scrolling container + old_y = getattr(getattr(self, "scrolling_container", None), "cur_y", 0) + self.scrolling_container = CustomScroll( + relative_rect=pygame.Rect(0, 0, *self._size), + manager=self, + object_id=pygame_gui.core.ObjectID("scroll_container"), + ) + self.scrolling_container.num_elems = 1 + self.scrolling_container.elems_size = 1 + self.scrolling_container.span_elems = 1 + scroll_height = self._size[1] - 90 + scrolling_size = (self._size[0], scroll_height) + # Setting dimensions and positions on a UIScrollingContainer seems buggy. This works. + self.scrolling_container.set_dimensions(scrolling_size) + self.scrolling_container.set_position(scrolling_size) + self.scrolling_container.cur_y = old_y + self.scrolling_container.set_scroll(old_y) + self._all_objs.append(self.scrolling_container) + yPadding = 20 yOffset = 0 index = 0 @@ -30,6 +50,7 @@ def generateObjects(self): relative_rect=pygame.Rect(0, 0, *self._size), starting_layer_height=-1, manager=self, + container=self.scrolling_container, object_id=pygame_gui.core.ObjectID(f"{index}-bg", "settings-background"), ) self._all_objs.append(container) @@ -49,6 +70,10 @@ def generateObjects(self): yOffset += group["height"](self._size) yOffset += yPadding + self.scrolling_container.elems_size = yOffset + self.scrolling_container.span_elems = min(1, scroll_height / yOffset) + self.scrolling_container.set_scrollable_area_dimensions((self._size[0], yOffset)) + self.bg = pygame_gui.elements.UIPanel( relative_rect=pygame.Rect(0, 0, *self._size), starting_layer_height=-2, @@ -58,7 +83,7 @@ def generateObjects(self): self._all_objs.append(self.bg) container = pygame_gui.elements.UIPanel( - relative_rect=pygame.Rect(20, yOffset, self._size[0] - 40, 80), + relative_rect=pygame.Rect(20, min(yOffset, self._size[1] - 80), self._size[0] - 40, 80), starting_layer_height=-1, manager=self, object_id=pygame_gui.core.ObjectID(f"{index}-bg", "settings-background"), @@ -66,7 +91,7 @@ def generateObjects(self): self._all_objs.append(container) self.save = pygame_gui.elements.UIButton( - relative_rect=pygame.Rect(self._size[0] - 300, yOffset + 10, 120, 60), + relative_rect=pygame.Rect(self._size[0] - 300, min(yOffset + 10, self._size[1] - 70), 120, 60), manager=self, object_id=pygame_gui.core.ObjectID("save-changes", "action_button"), text="Create" if self.creating else "Save", @@ -75,7 +100,7 @@ def generateObjects(self): self._all_objs.append(self.save) self.cancel = pygame_gui.elements.UIButton( - relative_rect=pygame.Rect(self._size[0] - 160, yOffset + 10, 120, 60), + relative_rect=pygame.Rect(self._size[0] - 160, min(yOffset + 10, self._size[1] - 70), 120, 60), manager=self, object_id=pygame_gui.core.ObjectID("cancel-changes", "action_button"), text="Cancel", From 4edff65887e438eb2160d207b8e5843db4e4377d Mon Sep 17 00:00:00 2001 From: glipR <37640160+glipR@users.noreply.github.com> Date: Fri, 9 Apr 2021 11:03:25 +1000 Subject: [PATCH 3/5] Ensure nested settings screens don't use the same object. --- ev3sim/visual/manager.py | 2 ++ ev3sim/visual/settings/main_settings.py | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/ev3sim/visual/manager.py b/ev3sim/visual/manager.py index 24b6f6ad..7b54e874 100644 --- a/ev3sim/visual/manager.py +++ b/ev3sim/visual/manager.py @@ -19,6 +19,7 @@ class ScreenObjectManager: SCREEN_SIM = "SIMULATOR" SCREEN_BOTS = "BOT_SELECT" SCREEN_SETTINGS = "SETTINGS" + SCREEN_RANDOM_SETTINGS = "RANDOM_SETTINGS" SCREEN_WORKSPACE = "WORKSPACE" SCREEN_UPDATE = "UPDATE" SCREEN_BOT_EDIT = "BOT_EDIT" @@ -106,6 +107,7 @@ def initScreens(self): from ev3sim.visual.settings.menu import SettingsMenu self.screens[self.SCREEN_SETTINGS] = SettingsMenu((self.SCREEN_WIDTH, self.SCREEN_HEIGHT)) + self.screens[self.SCREEN_RANDOM_SETTINGS] = SettingsMenu((self.SCREEN_WIDTH, self.SCREEN_HEIGHT)) # Rescue edit screen from ev3sim.visual.menus.rescue_edit import RescueMapEditMenu diff --git a/ev3sim/visual/settings/main_settings.py b/ev3sim/visual/settings/main_settings.py index 2fe4604a..2371f44a 100644 --- a/ev3sim/visual/settings/main_settings.py +++ b/ev3sim/visual/settings/main_settings.py @@ -8,11 +8,11 @@ def onClickConfigEditor(filename): from ev3sim.visual.manager import ScreenObjectManager ScreenObjectManager.instance.pushScreen( - ScreenObjectManager.SCREEN_SETTINGS, + ScreenObjectManager.SCREEN_RANDOM_SETTINGS, file=find_abs("user_config.yaml", config_locations()), settings=randomisation_settings, ) - ScreenObjectManager.instance.screens[ScreenObjectManager.SCREEN_SETTINGS].clearEvents() + ScreenObjectManager.instance.screens[ScreenObjectManager.SCREEN_RANDOM_SETTINGS].clearEvents() main_settings = [ From f086c3c7affcca5f7822651a2645c97aa045026b Mon Sep 17 00:00:00 2001 From: glipR <37640160+glipR@users.noreply.github.com> Date: Fri, 9 Apr 2021 11:08:20 +1000 Subject: [PATCH 4/5] Reset scroll height for settings. --- ev3sim/visual/settings/menu.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ev3sim/visual/settings/menu.py b/ev3sim/visual/settings/menu.py index 60b2b2f9..9021dae6 100644 --- a/ev3sim/visual/settings/menu.py +++ b/ev3sim/visual/settings/menu.py @@ -23,7 +23,7 @@ def clearEvents(self): def generateObjects(self): # Scrolling container - old_y = getattr(getattr(self, "scrolling_container", None), "cur_y", 0) + old_y = 0 self.scrolling_container = CustomScroll( relative_rect=pygame.Rect(0, 0, *self._size), manager=self, From 2205a168a82fd6dbf1e38bda5b63565b3dfd7992 Mon Sep 17 00:00:00 2001 From: glipR <37640160+glipR@users.noreply.github.com> Date: Fri, 9 Apr 2021 11:55:51 +1000 Subject: [PATCH 5/5] Update documentation to current version. --- docs/batched_commands.rst | 67 ------------------------ docs/bot_editing.rst | 27 ++++------ docs/custom_presets.rst | 4 +- docs/ev3_extensions.rst | 33 ++++++------ docs/images/bot_menu_edit.png | Bin 15680 -> 20719 bytes docs/images/randomisation_settings.png | Bin 0 -> 37532 bytes docs/images/randomisation_settings2.png | Bin 0 -> 49705 bytes docs/index.rst | 5 +- docs/randomisation.rst | 51 ++++-------------- docs/setup.rst | 25 ++++----- docs/simulation_settings.rst | 34 ++++++++++++ docs/system.rst | 2 +- 12 files changed, 86 insertions(+), 162 deletions(-) delete mode 100644 docs/batched_commands.rst create mode 100644 docs/images/randomisation_settings.png create mode 100644 docs/images/randomisation_settings2.png create mode 100644 docs/simulation_settings.rst diff --git a/docs/batched_commands.rst b/docs/batched_commands.rst deleted file mode 100644 index a32fe1ee..00000000 --- a/docs/batched_commands.rst +++ /dev/null @@ -1,67 +0,0 @@ -Simulation Presets -================== - -What is a simulation preset? ----------------------------- - -When running a simulation with EV3Sim, you need two things: - -* A world to simulate and interact with, and -* Robots to interact with the simulated world. - -A simulation preset specifies which world to simulate, the bots that will be placed in the simulation, and any settings specific to that world. - -As an example, one simulation preset provided by default is the ``soccer_competition`` preset. This specifies the world (preset type) as Soccer, and then specifies which bots are on which team. -It also specifies soccer specific settings, such as the Team Names, rulings for out on white, and halftime length. - -Changing the robots in a simulation ------------------------------------ - -While selecting a simulation preset the following icon should light up: - -.. image:: images/robot_selection.png - :width: 600 - :alt: The simulation select screen, highlighting the robot select button. - -From here, you can select a bot from those you have defined, and select them for Team 1 or Team 2. After selecting the bot for Team 1, Bot 1, you then select the bot for Team 2, Bot 1, and so on. -At any point if you have enough bots in the simulation, you can click "Done" to finish. - -Changing simulation settings ----------------------------- - -Clicking the settings cog instead of the robot button will take you to the settings page for you simulation preset: - -.. image:: images/settings_cog.png - :width: 600 - :alt: The simulation select screen, highlighting the settings button. - -.. image:: images/settings.png - :width: 600 - :alt: The simulation preset settings page, for the soccer preset. - -Creating a simulation preset ----------------------------- - -Rather than editing an existing preset you can also create your own by clicking the plus button on the list view for simulation presets. -This will prompt you to select a world type (Such as Soccer or Rescue). - -.. image:: images/add_sim.png - :width: 600 - :alt: The simulation select screen, highlighting the new sim button. - -Running the simulation preset ------------------------------ - -To run your simulation presets, you can press the big green play button to begin. - -.. image:: images/play_button.png - :width: 600 - :alt: The simulation select screen, highlighting the sim start button. - -However, if you installed with the windows one-click executable, you can also run the simulation simply by double clicking a file! -Navigate to your workspace folder, and open the ``sims`` directory. This should contain all of the sims you have created in the form of ``.sim`` files. - -Double clicking should run the sim by default. Otherwise, you can right click and select one of two actions: - -* Open: Run the simulation. -* Edit: Open the settings page for the simulation. diff --git a/docs/bot_editing.rst b/docs/bot_editing.rst index d3fc0527..4e952225 100644 --- a/docs/bot_editing.rst +++ b/docs/bot_editing.rst @@ -13,8 +13,6 @@ If you want to change the design of an existing bot, you can select that bot and :width: 600 :alt: The bot select screen highlighting the new and edit buttons. -If you have the windows one click install, you can also find your bot in ``workspace/robots`` and right click, select ``Open`` to edit the bot. - If you are creating a new bot, you'll be prompted to pick a baseplate for the bot. The baseplate is the object that all other components of your robot will rest on. This can be a circle, a regular polygon, or a rectangle. @@ -36,7 +34,7 @@ There are 4 types of elements: * Devices (Motors, Sensors, Buttons) Click the respective icon on the left sidebar to select that element. -If you instead click the cursor icon, you will be return to select mode, where you can select elements already on the bot, and change/remove them. +If you instead click the cursor icon, you will be returned to select mode, where you can select elements already on the bot, and change/remove them. .. image:: images/bot_edit_holding_elements.png :width: 600 @@ -51,7 +49,7 @@ Modifying elements ^^^^^^^^^^^^^^^^^^ To modify an element on the robot, we first need to enter the selecting mode, by clicking the cursor icon on the left sidebar. -Then, click on the element to select it. After this, the bottom bar should populate with properties to edit: +Then, click and drag to move an element, or click on the element to select it. After this, the bottom bar should populate with properties to edit: * Rotation * Fill and Stroke colour @@ -63,9 +61,7 @@ And many others. You can edit these properties and see them change in real time Any numerical property can be edited simply by typing out the value you want, after clicking in the box. You can also scroll while hovering over the value to increase/decrease it with ease. -The fill and stroke properties can be change by clicking the colour swatch next to it. This should open a colour picker. - -The device port entry can be whatever you want it to be, but this property tends to be ``in1,in2,in3...`` for sensors, and ``outA,outB,outC...`` for motors. +The fill and stroke properties can be changed by clicking the colour swatch next to it. This should open a colour picker. .. image:: images/bot_edit_properties.png :width: 600 @@ -81,17 +77,12 @@ Additionally, the backspace key should also remove the element. Adding code to a bot -------------------- -Designing a good bot also includes designing code to run! You can specify the code location for a specific bot by selecting it in the bot menu and pressing the settings cog. +Designing a good bot also includes designing code to run! -If you have the windows one click install, you can also find your bot in ``workspace/robots`` and right click, select ``Edit`` to go to the same window. +You can design this code by selecting the Folder icon when the bot is selected. This should open up a window with a folder containing three items: -.. image:: images/bot_menu_settings.png - :width: 600 - :alt: The bot menu screen, showing the bot properties cog. +* ``code.py`` - The python file your program will run. +* ``config.bot`` - Your robot information stored in a file. +* ``preview.png`` - A preview of your bot. -Then press the button next to 'Bot script' to open the file selector. -All code you want to run on your bot should be located in the ``code`` folder of your workspace! - -.. image:: images/bot_edit_code.png - :width: 600 - :alt: The bot property editing screen, showing the code location button. +To design code for your robot, simply edit the contents of ``code.py``. \ No newline at end of file diff --git a/docs/custom_presets.rst b/docs/custom_presets.rst index a8353b60..a84e7828 100644 --- a/docs/custom_presets.rst +++ b/docs/custom_presets.rst @@ -3,4 +3,6 @@ Custom Preset Types You can actually define your own preset types such as soccer and rescue, and run them through EV3Sim! -I haven't documented this because I'm not sure anyone will read this far. If you do want some information on this however, let me know with an issue on github and I can give you some help as well as populate this page! +I haven't documented this because I'm not sure anyone will read this far. If you do want some information on this however, let me know with an `issue on github`_ and I can give you some help as well as populate this page! + +.. _issue on github: https://github.com/MelbourneHighSchoolRobotics/ev3sim/issues \ No newline at end of file diff --git a/docs/ev3_extensions.rst b/docs/ev3_extensions.rst index 335f5f67..de75ba64 100644 --- a/docs/ev3_extensions.rst +++ b/docs/ev3_extensions.rst @@ -5,12 +5,12 @@ While your robots still run python-ev3dev2 code in the simulation, you also have Almost all of the below functionality is available in the package ``ev3sim.code_helpers``. In order for this code to work on your physical robot, there also needs to be a package on the physical bot filesystem called ``ev3sim.code_helpers``, containing `this file`_. -For a demo of most of these features, see ``demo.bot`` in the simulator. The code it runs is available `here`_. +For a demo of most of these features, see the ``demo`` bot in the simulator. The code it runs is available `here`_. Waiting for simulation ticks ---------------------------- -As most ev3 programs tend to have a single loop which handles all of the robot's logic, in the interest of efficiency on simulator we highly recommend you attempt to sync this program loop up with each tick of the simulator. +As most ev3 programs tend to have a single loop which handles all of the robot's logic, in the interest of efficiency on simulator it is essentially required that you attempt to sync this program loop up with each tick of the simulator. This is because running multiple program loops per simulation tick is useless (as sensor values won't change) and it can degrade the reliability of sensor values in future, if this program is spending a lot of CPU time running these pointless loops. You can achieve such a sync with the ``wait_for_tick`` method from the code helpers: @@ -21,9 +21,10 @@ You can achieve such a sync with the ``wait_for_tick`` method from the code help while True: # Program logic... + # Wait for the next simulation tick before I continue... wait_for_tick() -Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). +Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run on a physical bot (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). Robot ID -------- @@ -38,7 +39,7 @@ Since you might be running multiple instances of the same code on different robo This will also work on the brick, it should print "Robot-0". -Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). +Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run on a physical bot (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). Printing to console ------------------- @@ -81,7 +82,7 @@ Example: # This message will stay on the console for 3 seconds format_print("Hello world!") # This message will stay on the console for 5 seconds - format_print("Hello world!", life=3) + format_print("Hello world!", life=5) # This message will stay on the console for 1 second. format_print("Hello world!", life=1) @@ -107,7 +108,7 @@ This message will stay open in the console, and its message contents will change Logs ---- -All prints made to the console will also be stored in log files. These log files are available in your workspace if the workspace is defined. Otherwise they will be stored in your EV3Sim install location. +All prints made to the console will also be stored in log files (As well as error messages). These log files are available in your workspace if the workspace is defined. Otherwise they will be stored in your EV3Sim install location. Simulation testing ------------------ @@ -126,7 +127,7 @@ As an example, the simulator currently does not implement the ``Led`` functional if is_sim: print("Hello from the sim! Sadly I can't do lights at the moment :(") -Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). +Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run on a physical bot (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). Handling simulation events -------------------------- @@ -149,12 +150,12 @@ To handle such events you can use the code helpers EventSystem: EventSystem.on_goal_scored = handle_scored while True: - EventSystem.handle_events() wait_for_tick() + EventSystem.handle_events() ``EventSystem.handle_events`` must be called often (ie in every loop iteration, simply add this line after every occurrence of ``wait_for_tick``) to allow such events to fire the related code. Any event in the system returns a data object, which will contain any useful information about the event. -Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). +Importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run on a physical bot (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). The full list of events is: @@ -169,7 +170,7 @@ Fires whenever a goal is scored by either team. Fires whenever the game is reset manually. ``on_penalty_start`` -^^^^^^^^^^^^^^^^^^ +^^^^^^^^^^^^^^^^^^^^ Fires whenever you are placed in the penalty box. ``on_penalty_end`` @@ -188,7 +189,7 @@ Here is the list of supported commands: ``CommandSystem.TYPE_DRAW`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Draws an object to the screen using the same syntax as the simulator. The data passed in must be a dictionary with the following keys: +Draws an object to the screen using the same syntax as the simulator source code. The data passed in must be a dictionary with the following keys: - ``obj``: The visual representation of the object. - ``key``: The key the visual object will be referenced by (This means you can update the object position by sending the same key). @@ -198,7 +199,7 @@ Draws an object to the screen using the same syntax as the simulator. The data p ``CommandSystem.TYPE_CUSTOM`` ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -A custom event that can be caught by any custom presets you want to define. +A custom event that can be caught by any custom simulations you want to define. Example: @@ -247,14 +248,14 @@ As bluetooth communications are a popular option for complicated strategies with The communications are written in a client/server architecture, as with normal use of bluetooth comms. -This should also work on the physical robots over bluetooth, provided that the MAC Address and port are correct (Follow the instructions for normal bluetooth connectivity). As with above importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). +This should also work on the physical robots over bluetooth, provided that the MAC Address and port are correct (Follow the instructions for normal bluetooth connectivity). As with above importing this means you need to transfer ``ev3sim/code_helpers.py`` onto the brick for this to run on a physical bot (Just create a folder named ``ev3sim`` and place `code_helpers.py`_ in there). For an example of robots communicating device data to each other (in this case through a server, but client/server messaging could also simply work between two robots) try this example (place all 4 commands in separate terminals), you can run the simulation preset ``ev3sim/examples/sims/communications_demo.yaml`` Sources: `communication_client.py`_, `communication_server.py`_ -.. _here: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/examples/robots/demo.py +.. _here: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/examples/robots/demo/code.py .. _this file: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/code_helpers.py .. _code_helpers.py: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/code_helpers.py -.. _communication_client.py: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/robots/communication_client.py -.. _communication_server.py: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/robots/communication_server.py \ No newline at end of file +.. _communication_client.py: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/examples/robots/communication_client/code.py +.. _communication_server.py: https://github.com/MelbourneHighSchoolRobotics/ev3sim/tree/main/ev3sim/examples/robots/communication_server/code.py \ No newline at end of file diff --git a/docs/images/bot_menu_edit.png b/docs/images/bot_menu_edit.png index 76613364ec5f28a3f2598f1a48eb765a9c583b6c..4225150498bd64a1d3e8caa9c68e5304119ec85f 100644 GIT binary patch literal 20719 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 literal 15680 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 diff --git a/docs/images/randomisation_settings.png b/docs/images/randomisation_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..e825090921211f6fe5fba17d1490dba64422ed3c GIT binary patch literal 37532 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 literal 0 HcmV?d00001 diff --git a/docs/images/randomisation_settings2.png b/docs/images/randomisation_settings2.png new file mode 100644 index 0000000000000000000000000000000000000000..b6061b8110462346cd4aa4cc41f3c65336d00942 GIT binary patch literal 49705 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