These brief instructions will help you get started with the simulator. The other topics in this help provide additional information and detail about working with other aspects of this platform.

Building a Simulation

Welcome to the SWARM Developer System Cloud Version!

1. Install and Prepare Your Environment

Please follow the guide for installation in Installation Guide

1. Start a SWARM RDS Server by Signing up for an account

We have a number of servers readily available on Amazon Web Services (AWS). To get started, you will need to create an account at (www.swarmsim.io)[https://www.swarmsim.io].

2. Start the Server

Once you have logged in, you will see a green button on the dashboard at the bottom of the screen that says: "Cloud Server Manager". Click that button and you will be taken to the main server management page. Next, you will be able to select an environemnt to deploy and request a server. The process takes between 30 seconds and 1 minute to start. You will then see the following screen, providing an IP address of the server to use in the following steps. You can restart the system and turn it off when you are finished. If you do not submit a Simulation for an hour, the system will automatically turn off.

3. Install and Prepare Your Environment

Please follow the guide for installation in [Installation Guide](mydoc_installation.md).

2. Install Your License Key

In the welcome email you received, please put the file labelled `LicenseKey.json` in the `settings` folder in the root of the `SWARM-RDS-Client` repository.

3. Set Up Your Simulation

Look at the following file, as shown below, in the `settings` folder called `DefaultSimulationSettings.json`.
{
    "ID": 0,
    "SimulationName": "example",
    "RunLength": 140.0,
    "Scenario": {
        "Name": "DataCollection",
        "Options": {
            "MultiLevel": false,
            "LevelNames": [
                "Level1"
            ]
        }
    },
    "Environment": {
        "Name": "MountainVillage",
        "StartingLevelName": "Level1",
        "StreamVideo": true,
        "Options": {}
    },
    "Data": {
        "VehicleState": {
            "Format": "SWARM"
        }
    },
    "Agents": {
        "Drone1": {
            "Vehicle": "Multirotor",
            "VehiclePhysicsProfile": "CodexX500",
            "VehicleOptions": {},
            "AutoPilot": "SWARM",
            "Sensors": {
                "Cameras": {
                    "Camera1": {
                        "Enabled": false,
                        "PublishPose": false,
                        "X": 0.35,
                        "Y": 0.0,
                        "Z": 0.0,
                        "Roll": 0.0,
                        "Pitch": 0.0,
                        "Yaw": 0.0,
                        "ImageType": "Scene",
                        "Width": 640,
                        "Height": 480,
                        "FOV_Degrees": 90.0,
                        "FramesPerSecond": 24.0,
                        "Record": true,
                        "OutputType": "Video",
                        "VideoName": "Camera1_Capture"
                    }
                }
            },
            "Controller": {
                "Name": "PID",
                "Gains": {
                    "P": 0.95,
                    "I": 0.2,
                    "D": 0.3
                }
            },
            "StartingPosition": {
                "X": 0.0,
                "Y": 0.0,
                "Z": -0.01,
                "Roll": 0.0,
                "Pitch": 0.0,
                "Yaw": 0.0
            },
            "SoftwareModules": {
                "HighLevelBehavior": {
                    "Algorithm": {
                        "Level": 1,
                        "States": [],
                        "Parameters": {
                            "completed_waypoint_distance": 1.25
                        },
                        "InputArgs": [
                            "Trajectory"
                        ],
                        "ClassName": "PathFollowing",
                        "ReturnValues": [
                            "Position",
                            "Heading",
                            "Speed"
                        ]
                    },
                    "Publishes": [
                        "MovementCommand"
                    ],
                    "Subscribes": [
                        "AgentState"
                    ]
                },
                "LowLevelPathPlanning": {
                    "Algorithm": {
                        "Level": 1,
                        "States": [],
                        "Parameters": {},
                        "InputArgs": [
                            "MovementCommand"
                        ],
                        "ClassName": "PassThroughPlanner",
                        "ReturnValues": [
                            "MovementCommand"
                        ]
                    },
                    "Parameters": {},
                    "Publishes": [],
                    "Subscribes": [
                        "MovementCommand",
                        "AgentState"
                    ]
                }
            }
        }
    }
}
You can leave everything as it is above. This configuration will run a simulation with a single agent with a single camera, returning to you a tar file containing the images collected and a set of flight logs. **Note** This file, along with the Trajectory you define, will be validated before submission.

4. Define Your Trajectory

You will need to set the set of points you want to fly. This can be done by modifying the file called `DefaultTrajectory.json` in the `settings` folder. Each point must have the five fields as shown below and you are defining points in North, East and Down (NED).
{
    "X": 0.0,
    "Y": 0.0,
    "Z": -0.5,
    "Heading": 0.0,
    "Speed": 2.0
}

5. Run the SWARM Developer Client

In another terminal, run the following command: `python3 main.py --map-name SWARMHome --ip-address IP_ADDRESS`. The IP_ADDRESS is the IP address provided when you started the SWARM RDS Server. The system will validate your settings file and trajectory file to ensure they are valid and will run properly. Once you have submitted, you will see the following messages in the terminal.

6. View Your Simulation

View the Streaming output by going to any web browser and typing `IP_ADDRESS` where IP_ADDRESS is the IP address provided in the Welcome email, then click start to view the stream. This is a fully interactive client that will allow you to control the camera. (Hit `F1` to view options!)

7. Collect and View the Data

Once the simulation has been completed, it will ask if you want to collect data from the server. Enter 'Y'. This will start the download process.

8. View Your Data

Untar the tarball file by running `tar -xzvf data/example_data.tar.gz`. This will print out what files were collected. You can go to the `data` directory to see the files. [titlepage]: titlepage.html [tocpage]: tocpage.html [index]: index.html [roadmap]: roadmap.html [mydoc_installation]: mydoc_installation.html [mydoc_getting_started]: mydoc_getting_started.html [px4_tutorial]: px4_tutorial.html [custom_algorithm_gui]: custom_algorithm_gui.html [custom_algorithm_cli]: custom_algorithm_cli.html [developing_with_rds]: developing_with_rds.html [data_collect_gui]: data_collect_gui.html [data_collect_cli]: data_collect_cli.html [mydoc_features]: mydoc_features.html [pytorch]: pytorch.html [currently_supported]: currently_supported.html [environment_list]: environment_list.html [environment_control]: environment_control.html [multi_level]: multi_level.html [swarm_core_api]: swarm_core_api.html [swarm_firmware_api]: swarm_firmware_api.html [sensors]: sensors.html [algorithms]: algorithms.html [pub_sub]: pub_sub.html [configuration]: configuration.html [px4_configuration]: px4_configuration.html [ros_configuration]: ros_configuration.html [swarm_classes]: swarm_classes.html [mydoc_api_doc_index]: mydoc_api_doc_index.html [mydoc_faq]: mydoc_faq.html [mydoc_hyperlinks.html#automatedlinks]: mydoc_hyperlinks.html#automatedlinks [mydoc_hyperlinks.html#bookmarklinks]: mydoc_hyperlinks.html#bookmarklinks [mydoc_pages.html#someIdTag]: mydoc_pages.html#someIdTag [index]: index.html