Bring the excitement of virtual drones, programming, and gaming to your community with VRAD VRAD, presented by the REC Foundation and Robotify, offers a global, multiplayer, virtual aerial drone competition that combines the excitement of Esports, computer science, programming skills, and virtual drones.
MARTIAN SURVIVAL
2021/22 USER GU I DE
VERSION 1.0
Table of Contents Table of Contents
2
1. Introduction
5
1.1 Overview of the VRAD Program
5
1.3 Creating a team and getting involved
6
2. The Game
7
2.1 Team Roles
7
2.2 Matches
8
2.3 Code
8
2.4 Scoring
8
2.5 Drones
9
2.6 Mines
9
2.7 Charging Pads
10
2.8 Home Base
10
3. Practice Projects
12
3.1 Overview
12
3.2 Creating a Project
12
3.3 Accessing and Editing Your Projects
12
3.4 Sharing a Project
13
3.5 Forking a Project
13
3.6 Creating a File in Your Project
13
3.7 Downloading a File From Your Project
14
3.8 Importing a Project File
14
4. Preseason
15
4.1 Dates
15
4.2 Competition Mode
15
4.3 Team Rankings
15
5. Competition Season
16
5.1 Dates
16
2
5.2 Competition Mode
16
5.3 Team Rankings
16
6. VRAD Championship
17
6.1 Dates
17
6.2 How to Qualify
17
6.3 Round Robin
17
6.3 Knockout Rounds
17
7. Ranking System
18
7.1 Overview
18
7.2 Team Rating Score
18
8. Accessing the Game
19
8.1 Device Requirements
19
8.2 Network Connections
19
8.3 Accessing Matches
19
Appendix A: Documentation
21
A.1 What is Python
21
A.2 Importing Modules
21
A.3 Drone API
22
Appendix B: Glossary
24
Acceleration
24
API
24
Async
24
Battery Capacity
24
Blocking
24
Championship
24
Comms Api
24
Competition Season
25
Diamonds
25
Dictionary
25
Drone
25
Drone Api
25
Float
25
3
Holding Capacity
25
Hull Points
25
Integer
26
ISCED
26
Knockout Round
26
Match
26
Match Area
26
Pre Season
26
Round Robin Round
26
Sensor Range
26
Speed
27
Team Base
27
Team Code
27
Appendix C: Match Area Maps
28
Appendix D: Version Notes
28
Appendix C: Match Area Maps
28
Appendix C: Match Area Maps
28
Appendix C: Match Area Maps
28
Appendix D: Version Notes
29
4
1. Introduction
1.1 Overview of the VRAD Program VRAD is the Virtual REC Foundation Aerial Drones Program.
The REC Foundation in partnership with Robotify is launching VRAD Season 2: the world’s first global multiplayer virtual aerial drone competition. VRAD combines the excitement of Esports and the educational value of computer science with a competition focused on real-world programming skills and gaming strategy. Coaches are responsible for registering students for VRAD teams. But it is the students who learn how to program the drones using the documentation and training spaces within the game. Students will put programming skills to the test, develop the best algorithms to win and work with teammates to test and optimize their code. Coaches are not expected nor required to teach the students how to code.
1.2 Educational Connection
1.2.1 Programming and coding skills are at a premium in today’s world with this trend likely to continue to accelerate into the future. VRAD incentivizes students to rapidly iterate and test out ideas within a defined problem space with measurable outcomes. Teams are encouraged to think of both the software and hardware elements to their game plan. 1.2.2 Game based learning and competitive design encourage students to win matches and increase their team’s ranking in the Roboduel Leaderboards. Access to the highest divisions of the Championships is the prize for those teams that put their robotics and coding learning to best use. While round robin divisions ensure that all students, regardless of ability, get to put their skills to the test.
5
1.3 Creating a team and getting involved 1.3.1 Registering a VRAD team.
1.3.1a Create a free account by clicking on the register link at
https://www.robotevents.com/
1.3.1b From the “My Account” dashboard, click “Register a Team” to create one or more VRAD teams. Note that the Primary Team Contact is considered the “coach.”
1.3.1c Pay the registration fee of $150 USD per team.
1.3.2 Accessing Roboduel
1.3.2a On completion of the VRAD registration a coach will receive their login credentials and a team code for Robotify via email. 1.3.2b Students must create a robotify.com account and enter their team code, provided by their coach, to be added to their team. 1.3.3 VRAD team registration gives teams access to the competition for all of preseason and the competition season. Teams will be given the opportunity to participate in the VRAD Championship in March 2022. Further registration will be required in March to participate in the Championship.
6
2. The Game
2.1 Team Roles 2.1.1 The Team
2.1.1a Teams are made up of a maximum of three (3) students and one (1) coach. 2.1.1b Teams are defined as either Middle School Teams or High School Teams. Note that students may be enrolled in a High School, but if eligible according to the dates below, may choose to be on a Middle School team. Likewise, students enrolled in Middle Schools or Primary Schools may choose to be on a High School team, if eligible. 2.1.1c Middle School Teams must consist of only eligible Middle School Students. 2.1.1d High School Teams must consist of only eligible High School Students OR consist of eligible High School Students and eligible Middle School Students. 2.1.1e Once a Team is registered as a Middle School Team or as a High School Team, that team may not change grade levels.
2.1.2 The Coach
2.1.2a Coaches are responsible for teammanagement and registration and for ensuring students participate according to the rules of the game and competitions. 2.1.2b Coaches must be adults according to their local laws, but may be teachers, club organisers, parents, or otherwise associated with the team.
2.1.2c Coaches may not create code for use in competitions.
2.1.3 The Students
2.1.3a High School Students must be born before 1 May 2008 and after 1 May 2002, i.e. they must be between 13 and 18 years of age on 1 May 2021. 2.1.3b Middle School Students must be born before 1 May 2011 and after 1 May 2006, i.e they must be between 10 and 14 years of age on 1 May 2021.
7
2.1.3c Students must be enrolled in ISCED level 2 or 3 education, for example Middle or High School in the USA, or late Primary or Secondary School in the Republic of Ireland.
2.2 Matches 2.2.1 A match takes place between two teams of one (1) to three (3) players.
2.2.2 Matches are 10 minutes in duration.
2.2.3 At the end of a match the team with the highest score wins. Tie breaking rules are dependent on the competition and competition phase.
2.3 Code 2.3.1 Teams may upload prewritten code to execute during a match.
2.3.2 Teams may write new code during a match.
2.3.4 Both prewritten uploaded and new code must be created by the team using said code. 2.3.5 All code must be written by students. Code found to be written by a coach will be deemed ineligible for use in the competition. 2.4 Scoring 2.4.1 A team scores points by returning diamonds to their home base. Each diamond is worth one (1) point.The first player to score will get a 5x score multiplier on their first deposit. 2.4.2 A team’s end of match score is equal to the number of diamonds they have mined and delivered to their base at the end of a match. 2.4.3 Diamonds are found at Mines, shown in image 2.4. Mines contain a randomised number of diamonds in the range 1 to 5. 2.4.4 A Drone can mine and carry a number of diamonds equal to its capacity. A diamond only scores a point if it is delivered by a drone to the team base.
8
2.5 Drones 2.5.1 There are 4 different drone classes:
● hauler - big and heavy, large capacity. ● conman - ability to drop a fake mine ● speedster - fast and lightweight ● basic - jack of all trades, master of none
2.5.2 The drone class can be changed using the droneX.setClass() command. This command can only be run at a base. If the drone is carrying objects, the carried objects must first be deposited at the base before classes are changed. The default class is basic. 2.5.3 There are a total of 8 drones in the game with a max of 4 drones per team. On each team of 4 drones, 1 drone is remote controlled and the other 3 drones can be automatically controlled via python code. 2.5.4 A player can be in control of a minimum of 1 drone and a maximum of 4 drones. Each player will always have at least 1 drone. 2.5.5 In situations where there are unassigned drones, the unassigned drone can be requested by another player using the VradDrone.request(drone_no) .
2.6 Mines 2.6.1 Distribution and Discovery
2.6.1a Mines are randomly distributed throughout the match area at the beginning of each match. Mines are visible at the beginning of a match in an undiscovered state. 2.6.1b Mines are discovered by flying a drone, with active sensors, within sensor range of a mine. Once a mine has been discovered it is highlighted with a purple cylinder. 2.6.1c Each mine has a set of coordinates associated with it. Once a mine has been discovered by a team, that team can access the mine’s coordinates through the comms API.
9
2.6.2 Diamonds
2.6.2a A mine generates a random number of diamonds at the beginning of each match. Once generated this number is fixed and does not replenish. 2.6.2b A mine’s diamonds can be mined by landing a drone on the mine’s landing pad and using the drone API. 2.6.2c A mine can be mined by either or both teams, as long as it has a diamond supply remaining.
2.7 Charging Pads 2.7.1 Distribution and Discovery
2.7.1a Charging pads are randomly distributed throughout the match area at the beginning of each match. Charging pads are visible at the beginning of a match.
2.7.1b Each charging pad has a set of coordinates associated with it.
2.7.2 While you can charge your drone by landing on the match area ground, drones that have landed on a charging pad will recharge quicker.Charging rates vary and are randomised between 25 and 40 amps.
2.7.3 Battery size is measured in amp hours.
2.8 Home Base 2.8.1 Drones begin each match at rest on their home base landing pad.
2.8.2 Drones cannot enter the opposition team’s home base.
2.8.3 A drone that is within the coloured cylinder surrounding their home base landing pad does not experience any battery drain. 2.8.4 A drone can deliver minerals to its home base by entering the coloured cylinder surrounding their home base landing pad, and using the drone API to deposit the minerals.
10
Red Home Base
Blue Home Base
11
3. Practice Projects
3.1 Overview 3.1.1 Students can create projects in which to practice and test code.
3.1.2 Code created in these practice projects can be used in competitions.
3.1.3 Practice projects can be either public or private.
3.1.4 Public practice projects can be shared via a link.
3.1.5 Public practice projects can be forked by anyone who has a copy of the link.
3.2 Creating a Project 3.2.1 Projects can be created in the Robotify Projects system by navigating to robotify.com/projects.
3.2.2 Step-by-step
3.2.2a Click or tap the “Create Project” button in the left hand ribbon. Alternatively click the empty project frame with the “+” symbol.
3.2.2b Give the project a name and description.
3.3.2c Select the VRAD Mars Competition environment from the available options.
3.3.2d Click or tap the “Create Project” button below the description field.
3.3 Accessing and Editing Your Projects 3.3.1 Your previously created projects can be found at robotify.com/projects.
3.3.2 Step by Step
3.3.2a Find the project frame for your project and click on it to enter the project details page. 3.3.2b Click on “Settings” to change the project name, description, or published status.
3.3.2c Click on “Code” t o open the project for editing.
12
3.4 Sharing a Project 3.4.1 Projects can be shared with teammembers and other Robotify users.
3.4.2 Step by Step
3.4.2a Access the project details page for the project you wish to share.
3.4.2b Copy the URL for the details page and send it to anyone you wish to share the project with.
3.5 Forking a Project 3.5.1 Anyone with a link to a project can create a fork of that project. 3.5.2 Forking a project will create an exact copy of that project in your projects system. 3.5.3 The owner of the original project can see a list of all forks of that project, including the username of the user who forked the project.
3.5.4 Step by Step
3.5.4a Navigate to a project through a shared project URL or via your own projects system. 3.5.4b In the project details page click the “Fork” button, this will redirect you to your project's system. 3.5.4c In your project's system, find the project, it will be named “<ORIGINAL PROJECT NAME>- fork”.
3.6 Creating a File in Your Project 3.6.1 Projects with no files
3.6.1a In the left hand Files panel, click “New File +”.
3.6.1b Rename your file by right clicking it and selecting rename.
3.6.2 Projects with files
3.6.2a Right click anywhere in the left hand Files panel, click “New File”.
3.6.2b Rename your file by right clicking it and selecting rename.
13
3.7 Downloading a File From Your Project 3.7.1 In the left hand Files panel, right click the file you wish to download and select “Download”. 3.7.2 Alternatively click the dropdown arrow beside the name of the file you wish to download and select “Download”.
3.7.3 Downloaded files will be of the form <filename>.py.
3.8 Importing a Project File 3.8.1 In the top ribbon, click the dropdown arrow beside the “Save” button, click load project. 3.8.2 Select the project file(s) you would like to import, file(s) for import will be marked with a green tick. Click the import button.
3.8.3 Imported files appear in the left hand File panel.
14
4. Preseason
4.1 Dates 4.1.1 The Season 1 Preseason (hereafter referred to as Preseason) will take place from October 23, 2021 to January 10, 2022.
4.1.2 Team Rating Scores (TRS) will be reset at midnight GMT January 10, 2022.
4.2 Competition Mode 4.2.1 Game rules otherwise follow those laid out in Section 2. The Game. 4.2.2 The specifics of game rules and competition rules may be changed periodically throughout the Preseason on the basis of improvements to balance, competition, and technical improvements. Any such changes will be communicated via a number of channels and updated in this document. 4.3 Team Rankings 4.3.1 TRS will be calculated throughout the Preseason, based on the system laid out in Section 7. Ranking System.
4.3.2 Preseason TRS will not affect Championship qualification.
15
5. Competition Season
5.1 Dates 5.1.1 The Season 1 Competition Season (hereafter referred to as the Season) will take place from January 17, 2022 - March 11, 2022. 5.1.2 Team Rating Scores (TRS) will be reset before the beginning of the Competitions Season, at midnight GMT January 10, 2022.
5.2 Competition Mode 5.2.1 Competition mode will be open to teams of up to three (3) players.
5.2.2 Game rules otherwise follow those laid out in Section 2. The Game.
5.2.3 The specifics of game rules and competition rules will not change during the Competition Season except in exceptional circumstances based on required improvements to balance and competition, or technical improvements. Any such changes will be communicated via a number of channels and updated in this document. 5.3 Team Rankings 5.3.1 TRS will be calculated throughout the Season, based on the system laid out in Section 7. Ranking System. 5.3.2 The Season TRS at midnight GMT March 12, 2022 directly affects Championship division allocation as laid out in Section 6. VRAD Championship. 5.3.3 Player created matches (i.e. those not created by the matchmaking system) do not affect TRS.
16
6. VRAD Championship
6.1 Dates 6.1.1 The Season 1 Championships (hereafter referred to as the Championship) will take place from March 21, 2022 - April 1, 2022. 6.1.2 The Team Ranking Score (TRS) system is not applied to VRAD championship matches. 6.1.3 Teams will need to be available to play at match times as laid out for their division in their invitation.
6.2 How to Qualify 6.2.1 Teams must register in March 2022 to take part in the Championship.
6.2.2 TRS rankings will determine Division allocation of each team.
6.2.3 Divisions will be created on the basis of acceptance of the Championship invitation and TRS ranking.
6.3 Round Robin 6.4.1 Divisions will consist of 4-5 teams based on uptake.*
6.4.2 Week 1 of the Championship will be based on a round robin league format, with each team playing all other teams in their division once. 6.4.3 Match wins will confer 4 league points, draws 2 league points, and losses 0 league points. *Championship structure is subject to change based on the number of teams participating in the Championship. Coaches will be kept up to date. 6.3 Knockout Rounds 6.3.1 Knockout Rounds will consist of 16 teams competing in an elimination tournament.
17
6.3.2 Teams at the top of their division will be invited to participate in a series of knockout rounds. 6.3.3 The winner of all their knockout rounds will be crowned as the VRAD Season 2 Champion.
7. Ranking System
7.1 Overview 7.1.1 The Roboduel ranking system is based on the Elo rating system.
7.1.2 A Ranked Period is a period of competition time in which the ranking system is applied to matches. 7.1.3 Preseason rankings have no effect on the Competition Season or Championship qualification.
7.1.4 Competition Season rankings affect Championship division allocation.
7.1.5 At the end of a Ranking Period all team ranks are reset.
7.2 Team Rating Score 7.2.1 Each team has a Team Rating Score (TRS) expressed as a numerical value.
7.2.3 On entry into a Ranked Period a team will be assigned a TRS of 1000.
7.2.3 When a team takes part in a Ranked Match their TRS will be raised or lowered based on the match outcome and the other team’s TRS at the start of the match.
7.2.4 Teams with a higher TRS are ranked higher than teams with a lower TRS.
18
8. Accessing the Game
8.1 Device Requirements 8.1.1 Robotify Simulations will run on most devices. For VRAD competitions, it is recommended to use a device with a keyboard and mouse such as a laptop, desktop or Chromebook.
8.1.2 WebGL support is required. You can check if your device supports WebGL at get.webgl.org/webgl2
8.1.3 Google Chrome is the recommended browser.
8.1.3a You can download Chrome at www.google.com/intl/en_ie/chrome/
8.1.3b For the best experience hardware acceleration should be enabled, disabling hardware acceleration can cause slow frame rates. Hardware acceleration is enabled by default, if you experience low frame rates you can enable hardware acceleration by following the guide at www.howtogeek.com <https://www.howtogeek.com/412738/how-to-turn-hardware-acceleration-on-and- off-in-chrome/> 8.2 Network Connections 8.2.1 A minimum internet speed of 10-15 Mbps is recommended. You can check your internet speed at www.speedtest.net.
8.2.2 Disconnection from a match will count as a loss.
8.3 Accessing Matches 8.3.1Hosting a match.
8.3.1a Click the HOST button. This will start a private lobby.
8.3.1b You can copy and send the GAME CODE to allow other players to join your lobby.
8.3.2 Joining a match.
19
8.3.2a Click the JOIN button.
8.3.2b Type or paste a game code into the text field.
8.3.3 Automatic matchmaking.
8.3.3a Click the CLICK TO PLAY button.
8.3.3b The server will automatically determine whether to host or join a public lobby based on demand. 8.3.3c You are still able to share the GAME CODE for other players to join manually.
20
Appendix A: Documentation
A.1 What is Python Python is a general purpose programming language. Python is a very versatile language which is famous for its simple programming syntax, code readability and English-like commands which make coding in Python very easy and efficient. Python is used for many different things such as web development, AI, machine learning, operating systems, mobile application development, robotics and video games. The VRAD Martian Survival competition features an in-browser python code editor which allows you to program your drones using the Python programming language.
A.2 Importing Modules
There are four drones that can be programmed in VRAD, drone1, drone2, drone3, drone4.
Modules can be imported with the following code at the top of your script:
import drone1 # import drone1 module import drone2 # import drone2 module import drone3 # import drone3 module import drone4 # import comms module
import currentDrone # import currentDrone module
import VRADDrone # import VRRADDrone module
VRADDrone is used for static functions:
Static functions: bool VRADDrone.take_control(id) - Sets the camera to focus on the specified drone. If you take control of an RC drone, you will be able to control it with the keyboard now
21
bool VRADDrone.request(id) - Requests control of the specified drone. If somebody else owns the drone, the current owner will receive a popup and they can accept or deny the request. float array VRADDrone.get_base_position(base_number) - Get the x,y,z coordinates of the specified base float array VRADDrone.get_gps(team, id) - Get the x,y,z coordinates of the specified drone. team is a string, either “red” or “blue” (internally use 0 for red, 1 for blue) float array VRADDrone.get_chargers() - Get the x, z coordinates of the discovered chargers. Returned in the form of a 2d array. float array VRADDrone.get_mines() - Get the x, z coordinates of the discovered mines. Returned in the form of a 2d array. drone1 / drone2 / drone3 / drone4 to reference drones 1-4. (Each drone is represented as an object, use the drone API methods below to instruct each drone on what behaviour to follow, example: drone1.take_off(5) )
currentDrone refers to the drone that the camera is currently fixated on, you can change this using the command:
VRADDrone.take_control(drone#);
example : VRADDrone.take_control(3); would change the camera to focus on drone3 and allow you to reference drone3 using the currentDrone object.
A.3 Drone API
Methods (functions returning bool are indicating success/failure): bool check_owner() - Returns false if you have ownership of the specified drone. True otherwise. Check if drone has other owner. string get_class()- Returns class of the drone referenced. bool set_class(type) - Sets the class of the drone referenced, must pass in as string eg: drone2.set_clas s(‘conman’); float get_heading() - In range [-180, 180). Ownership not required for this method float array get_gps() - Ownership not required for this method int get_currently_carrying()- Number of objects currently in cargo float get_battery()- In range [0, 1] returns battery remaining dictionary get_ir_data() - { forward: { name: “mine”/”charger”/”ground”, distance: 1.23 }, left: { etc } } bool toggle_sensors(enable)- Enable or disable sensors by passing a boolean value eg: drone3.toggle_sensors(True); bool move_forward(dst)- Moves the drone forward (pitch forward)
22
bool move_backward(dst)- Moves the drone backward (pitch backward) bool move_left(dst) - Drone will move left (roll left) bool move_right(dst) - Drone will move right (roll right) bool move_up(dst) - Drone will increase its altitude by dst. Note : Must take_off() first bool move_down(dst) - Drone will decrease its altitude by value of dst. bool set_altitude(alt) - Drone will increase/decrease its altitude to reach the height set Note: Must take_off() first bool turn_left(ang) - Drone will turn left (yaw left) bool turn_right(ang) - Drone will turn right (yaw right) bool take_off(alt) - Turns on the drone’s motors and flies it to the specified altitude bool land() - The drone will land over its current position bool linear_angular(lin, ang) - Sets the linear and angular velocity of the drone. The arguments in range [0, 1] as a percentage of the drone’s maximum speed bool stop() - Stops the drone’s current movement ( does not affect any other operation such as mining) bool drop_mine() - Conman only . Drops a fake mine with 0. Your team’s drones won’t be able to discover it using their sensors. Can only drop 1 mine. bool mine() - Mines as many objects as the drone can carry as long as there is at least that amount available in the mine bool deposit() - Deposits the full amount of objects currently being carried by the drone. Must be at base or you will lose your minerals. bool revive(batteryPercentage) - Donates a percentage of your battery (in range [0, 1]) to another drone if you are currently landed on it. If you recharge their battery past 100%, you waste the extra amount. float get_distance(x, z) - Returns the distance between this drone’s XZ coordinates and the specified XZ coordinates, using the Pythagorean theorem. Ownership not required for this method float get_angle(x, z) Returns the angle that this drone must rotate to the right by in order to face the given XZ position. turn_right(getAngleTo(x, z)) will rotate you towards this point. Ownership not required for this method
23
Appendix B: Glossary
Acceleration How quickly a drone can reach its top speed. Controlled by accelerationAP. API Application Programming Interface. Collection of exposed methods for programming with drones and communications.
Async See Blocking.
Battery Capacity How much battery power a drone has. Rate of battery drain affected by drone mass, speed, and sensor status. Controlled by batteryAP Blocking A blocking command takes a certain amount of time to execute. It will prevent the next line of code running until the blocking command has completed. Championship End of season competitive weeks with prize support. Divided into Round Robin and Knockout Rounds. Comms Api Communication API which grants access to arrays of discovered mine and charging pad coordinates.
24
Competition Season Regular competition period. Lasts a number of weeks. Ranked. Rank determines team eligibility for Championship Knockout or Round Robin divisions.
Diamonds
Game resource, available at mines, worth one point on delivery to team base.
Dictionary Unordered, changeable, indexed collection of objects. Often refers to a JSON input to a python method.
Drone There are 5 types of drone this season.
Drone Api Drone control API which grants access to the drone control methods for movement, managing your fleet, and other functions. Accessible via <robot module>. Float Floating point number. Contains a decimal point somewhere in the number but not always the same position. Holding Capacity Total number of minerals a drone can carry. Carrying more minerals adds to mass and affects battery drain. Controlled by holdingCapacityAP Hull Points A measure of the overall capabilities of a drone, giving a drone more hull points allows it to use more attribute points for its game attributes. Represents overall physical design capabilities. Affects weight. Each hull point provides a drone with three attribute points.
25
Integer Whole numbers.
ISCED International Standard Classification of Education. Framework for education levels across a number of educational systems worldwide. Available at
http://uis.unesco.org/en/topic/international-standard-classification-education-isced
Knockout Round Operates over the second week of the championship.
Match
A ten minute game of VRAD Roboduel between two matchmade or invited teams.
Match Area Area between team bases in which mines and charging pads appear.
Pre Season Proceeds competition season. Last a number of weeks. Ranked. Ranks are reset at the end of the pre-season. Serves as a practice season.
Round Robin Round Operated over the first week of Championship
Sensor Range
Range out to which a drone can sense an object. Sensors can be toggled off to save battery. Controlled by sensorRangeAP
26
Speed Top speed of a drone. Affected battery drain. Controlled by speedAP.
Team Base Home base of each team. Drones cannot enter or land in opposition bases. Drones deposit minerals at their team base. Team Code Access code provided by REC to the coach upon team registration. The coach shares this code with teammembers who register on Robotify.
27
Appendix C: Match Area Maps
Appendix D: Version Notes
Appendix C: Match Area Maps
Appendix C: Match Area Maps
Appendix C: Match Area Maps
28
Appendix D: Version Notes Version notes will be added to this page as necessary
29
M A R T I A N S U R V I V A L - 2 0 2 0 / 2 1
MARTIAN SURVIVAL
V i s i t robot i cseduca t i on .org /v r ad to l ea r n more & reg i s te r you r team today. Robot i cs Educa t i on & Compe t i t i on Founda t i on 1519 I -30 Wes t • Greenv i l l e • Texas 75402 r ad@robot i cseduca t i on .org www. robot i cseduca t i on .org /v r ad/
Version 1.0 published 29 OCT 2021 ©2021 Robotics Education & Competition Foundation. All rights reserved. All trademarks are the property of their respective owners.
P A G E 2
Page 1 Page 2 Page 3 Page 4 Page 5 Page 6 Page 7 Page 8 Page 9 Page 10 Page 11 Page 12 Page 13 Page 14 Page 15 Page 16 Page 17 Page 18 Page 19 Page 20 Page 21 Page 22 Page 23 Page 24 Page 25 Page 26 Page 27 Page 28 Page 29 Page 30Made with FlippingBook HTML5