|
12 | 12 |
|
13 | 13 | ### Downloading and running AirSim Binaries |
14 | 14 | #### Downloading |
| 15 | +- Final round binaries and environments (v1.1) |
| 16 | + - tl;dr: |
| 17 | + - [Linux] Use the [download_final_round_binaries.sh](download_final_round_binaries.sh) script |
| 18 | + - Long version: |
| 19 | + - Download the v1.1 [Linux](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/releases/tag/v1.1-linux) or [Windows](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/releases/tag/v1.1-windows) `AirSim.zip`, and unzip it. |
| 20 | + - Download your qualifier environments (shipped in pakfiles) - `Final_Tier_1_and_Tier_2.pak` and ` Final_Tier_3.pak`. |
| 21 | + - Move the environment pakfiles into `AirSim/AirSimExe/Content/Paks`. |
| 22 | + - Download and move the `settings.json` file to `~/Documents/AirSim/settings.json`. |
| 23 | + - Use `airsimneurips` >= 1.2.0 |
| 24 | + |
15 | 25 | - Qualifier binaries and environments (v1.0) |
16 | 26 | - tl;dr: |
17 | 27 | - [Linux] Use the [download_qualification_binaries.sh](download_qualification_binaries.sh) script |
@@ -108,7 +118,7 @@ We recommend you used python >= 3.6. Python 2.7 will go [out of support soon](ht |
108 | 118 | - Going through both open and closed issues in this repository might answer some of your questions. The search bar on top left can prove useful. |
109 | 119 | - [AirSim upstream API](https://microsoft.github.io/AirSim/docs/apis/) and [examples](https://github.com/microsoft/AirSim/tree/master/PythonClient) can also be of use. However, please note that the main AirSim repo's API is not used in the competition (there's some overlap and some differences), however is a good learning resource. |
110 | 120 |
|
111 | | -## Submitting Results and Leaderboard |
| 121 | +## Submitting Results and Leaderboard - Qualification Round |
112 | 122 | - For the qualification round, we have one race track for each tier. The relevant binaries (v1.0) are available for [linux](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/releases/tag/v1.0-linux) and [windows](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/releases/tag/v1.0-windows) |
113 | 123 | - Tier 1: This is in the Soccer Field environment. |
114 | 124 | THe race track is in the `Qual_Tier_1_and_Tier_3.pak` pakfile |
@@ -164,7 +174,58 @@ Please read [the race monitoring section](https://github.com/microsoft/AirSim-Ne |
164 | 174 | - We have emailed you a private key, which should be entered in the `Team ID` field. This helps us verify it was your team who indeed made the submission. |
165 | 175 | - The [leaderboard](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/leaderboard.html) is updated once per day at 2100 PST. |
166 | 176 | If you do not see your results after 24 hours, please [email us ](mailto:[email protected]) with your team name and submitted log files. |
167 | | - |
| 177 | + |
| 178 | +## Submitting Results and Leaderboard - Final Round |
| 179 | +- For the final round, we have one race track for each tier. The relevant binaries (v1.1) are available for [linux](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/releases/tag/v1.1-linux) and [windows](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/releases/tag/v1.1-windows) |
| 180 | + - Tier 1: This is in the Soccer Field environment. |
| 181 | + THe race track is in the `Final_Tier_1_and_Tier_2.pak` pakfile |
| 182 | + - Tier 2: This is in the Soccer Field environment. |
| 183 | + The race track is in the `Final_Tier_1_and_Tier_2.pak` pakfile. |
| 184 | + - Tier 3: This is again in the ZhangJiaJie environment. |
| 185 | + The race track is in the `Final_Tier_3.pak` pakfile. |
| 186 | + |
| 187 | +- How to generate logfiles for each tier: |
| 188 | + - Loading level and starting race: |
| 189 | + - Please update your airsimneurips pythonclient (should be >=1.2.0). |
| 190 | + - Calling `simStartRace(race_tier=1, 2, or 3)` generates the appropriate log files. You can only run `tier N` races in `Final_Tier_N` levels. |
| 191 | + - Tier 1: |
| 192 | + ```python |
| 193 | + airsim_client.simLoadLevel('Final_Tier_1') |
| 194 | + airsim_client.simStartRace(tier=1) |
| 195 | + ``` |
| 196 | + |
| 197 | + - Tier 2: |
| 198 | + ```python |
| 199 | + airsim_client.simLoadLevel('Final_Tier_2') |
| 200 | + airsim_client.simStartRace(tier=2) |
| 201 | + ``` |
| 202 | + |
| 203 | + - Tier 3: |
| 204 | + ```python |
| 205 | + airsim_client.simLoadLevel('Final_Tier_3') |
| 206 | + airsim_client.simStartRace(tier=3) |
| 207 | + ``` |
| 208 | + - As Tier 2 focuses on perception and Tier 3 focuses on both perception and planning, note that `simGetObjectPose` returns noisy gate poses. |
| 209 | + |
| 210 | + - As soon as `simStartRace(tier=1)` or `simStartRace(tier=3)` is called, `drone_2` (MSR opponent racer) will start flying. |
| 211 | + |
| 212 | + - See `baseline_racer.py` for sample code. The previous bullet points are being called in wrapper functions in the following snippet in `baseline_racer.py`: |
| 213 | + ```python |
| 214 | + baseline_racer.load_level(args.level_name) |
| 215 | + baseline_racer.start_race(args.race_tier) |
| 216 | + ``` |
| 217 | + |
| 218 | +- To submit your results to the final leaderboard: |
| 219 | + - Navigate to the [submission site](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/upload.html), enter your team name in the proper field, and upload any number of [race logs](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/blob/master/docs/competition_guidelines.md#race-monitoring). |
| 220 | +It's ok to make a submission for as little as a single track and/or a single tier. |
| 221 | +You can find race logs inside of `AirSimExe/Saved/Logs/RaceLogs` in your downloaded binary folder. |
| 222 | +Please read [the race monitoring section](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/blob/master/docs/competition_guidelines.md#race-monitoring) in the competition guidelines for more details. |
| 223 | + - The leaderboard will publish the results of a drone that is named `drone_1` (call [`generate_settings_file.py`](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing/blob/master/baselines/generate_settings_file.py) to generate an AirSim settings file, as done for the `baseline_racer` below. |
| 224 | + - Please submit a PDF file in the `report` section to help us verify the honesty of your submission by the Dec 5th, 2359 PST deadline. Please summarize your approach for all tiers you make a submission for, with appropriate citations. The report PDF size should not exceed 10 MB, and should be a maximum of 6 pages in length. We leave the exact format of the report to your descrition, but the [IEEE template](https://ras.papercept.net/conferences/support/tex.php) is a good choice. |
| 225 | + - We have emailed you a private key, which should be entered in the `Team ID` field. This helps us verify it was your team who indeed made the submission. |
| 226 | + - The [final leaderboard](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/leaderboard_final.html) is updated once per day at 2100 PST. |
| 227 | + If you do not see your results after 24 hours, please [email us ](mailto:[email protected]) with your team name and submitted log files. |
| 228 | + |
168 | 229 | ## Sample code |
169 | 230 | - Plan and move on minimum jerk trajectory using gate ground truth poses: |
170 | 231 | - Generate an AirSim settings.json file |
@@ -203,35 +264,97 @@ Please read [the race monitoring section](https://github.com/microsoft/AirSim-Ne |
203 | 264 | - R. Spica, D. Falanga, E. Cristofalo, E. Montijano, D. Scaramuzza, and M. Schwager, "A Real-Time Game Theoretic Planner for Autonomous Two-Player Drone Racing", in the Proccedings of Robotics: Science and Systems (RSS), 2018. |
204 | 265 |
|
205 | 266 | ## Quick API overview |
206 | | -- Changing unreal environments |
207 | | - There are two ways to swap between environments / "unreal level", either via AirSIm API or by the UI menu. |
208 | | - - Python API |
209 | | - Use `simLoadLevel(level_name="MainMenu")` to change Unreal environments on the fly. |
210 | | - Possible values for `level_name` are : `"Soccer_Field_Easy"`, `"Soccer_Field_Medium"`, `"ZhangJiaJie_Medium"`, `"Building99_Hard"`. |
211 | | - Here's a quick snippet to iterate throught all the training environments. |
212 | | - Before trying this, please ensure you've downloaded the corresponding training (v0.3) / qualifier (v1.0) binaries, [as described above](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing#downloading-airsimexe-and-unreal-environments) |
213 | | - |
214 | | - ```python |
215 | | - import airsimneurips as airsim |
216 | | - client = airsim.MultirotorClient() |
217 | | - client.confirmConnection() |
218 | | - |
219 | | - # use this for training environments (v0.3) |
220 | | - |
221 | | - client.simLoadLevel('Soccer_Field_Easy') |
222 | | - client.simLoadLevel('Soccer_Field_Medium') |
223 | | - client.simLoadLevel('ZhangJiaJie_Medium') |
224 | | - client.simLoadLevel('Building99_Hard') |
225 | | - |
226 | | - # use this for qualification environments (v1.0) |
227 | | - client.simLoadLevel('Qualification_Tier_1') |
228 | | - client.simLoadLevel('Qualification_Tier_2') |
229 | | - client.simLoadLevel('Qualification_Tier_3') |
| 267 | +We added some new APIs (marked with 💚) to [AirSim](https://github.com/Microsoft/Airsim) for the NeurIPS competition binaries. |
230 | 268 |
|
231 | | - ``` |
232 | | - - UI Menu |
233 | | - - Press `F10` to toggle the level menu |
234 | | - - Click your desired level. (Note: the UI lists all the pakfiles in the `AirSim/AirSimExe/Content/Paks` directory. Ensure you downloaded the pakfile, if you are not able to see a particular environment) |
| 269 | +#### Loading Unreal Engine environments |
| 270 | +- [`simLoadLevel(level_name)`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.level_name) 💚 |
| 271 | +Possible values for `level_name` are: |
| 272 | + - `"Soccer_Field_Easy"`, `"Soccer_Field_Medium"`, `"ZhangJiaJie_Medium"`, `"Building99_Hard"` in the training binaries (`v0.3`). |
| 273 | + - `"Qualification_Tier_1"`, `"Qualification_Tier_2"`, `"Qualification_Tier_3"` in the qualification binaries (`v1.0`). |
| 274 | + - `"Final_Tier_1"`, `"Final_Tier_2"`, `"Final_Tier_3"` in the final round binaries (`v1.1`). |
| 275 | +Before trying this, please ensure you've downloaded the corresponding training (`v0.3`) / qualifier (`v1.0`) / final round (`v1.0`) binaries, [as described above](https://github.com/microsoft/AirSim-NeurIPS2019-Drone-Racing#downloading-airsimexe-and-unreal-environments) |
| 276 | + |
| 277 | +- UI Menu |
| 278 | + - Press `F10` to toggle the level menu |
| 279 | + - Click your desired level. (Note: the UI lists all the pakfiles in the `AirSim/AirSimExe/Content/Paks` directory. Ensure you downloaded the pakfile, if you are not able to see a particular environment) |
| 280 | + |
| 281 | +#### Race APIs: |
| 282 | +- Start a race: |
| 283 | + [`simStartRace(tier=1/2/3)`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simStartRace) 💚 |
| 284 | + |
| 285 | +- Reset race: |
| 286 | + [`simResetRace()`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simResetRace) 💚 |
| 287 | + |
| 288 | +- Check if racer is disqualified: |
| 289 | + [`simIsRacerDisqualified()`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simIsRacerDisqualified) 💚 |
| 290 | + |
| 291 | +- Get index of last gate passed: |
| 292 | + [`simGetLastGatePassed()`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simGetLastGatePassed) 💚 |
| 293 | + |
| 294 | +- Disable generation of logfiles by race APIs: |
| 295 | + [`simDisableRaceLog`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simDisableRaceLog) 💚 |
| 296 | + |
| 297 | +#### Lower level control APIs: |
| 298 | +- FPV like Angle rate setpoint APIs: |
| 299 | + - [`moveByAngleRatesThrottleAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByAngleRatesThrottleAsync) 💚 |
| 300 | + - [`moveByAngleRatesZAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByAngleRatesZAsync) 💚 (stabilizes altitude) |
| 301 | + |
| 302 | +- Angle setpoint APIs: |
| 303 | + - [`moveByRollPitchYawThrottleAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByRollPitchYawThrottleAsync) 💚 |
| 304 | + - [`moveByRollPitchYawZAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByRollPitchYawZAsync) 💚 (stabilizes altitude) |
| 305 | + |
| 306 | +- RollPitchYawrate setpoint APIs: |
| 307 | + - [`moveByRollPitchYawrateThrottleAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByRollPitchYawrateThrottleAsync) 💚 |
| 308 | + - [`moveByRollPitchYawrateZ`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByRollPitchYawrateZ) 💚 (stabilizes altitude) |
| 309 | + |
| 310 | +#### Medium level control APIs: |
| 311 | +- Velocity setpoints |
| 312 | + - [`moveByVelocityAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByVelocityAsync) |
| 313 | + - [`moveByVelocityZAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveByVelocityZAsync) (stabilizes altitude) |
| 314 | + |
| 315 | +- Position setpoints |
| 316 | + - [`moveToPosition`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveToPositionAsync) |
| 317 | + - [`moveOnPath`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveOnPathAsync) |
| 318 | + - [`moveToZAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveToZAsync) |
| 319 | + |
| 320 | +#### High level control APIs: |
| 321 | +- Minimum jerk trajectory planning (using [ethz-asl/mav_trajectory_generation](https://github.com/ethz-asl/mav_trajectory_generation)), and trajectory tracking (using a pure pursuit like controller minimizing position and velocity errors), with position setpoints. |
| 322 | + Optionally use the `*lookahead*` parameters to start new trajectory from a point sampled `n` seconds ahead for trajectory being tracked currently. |
| 323 | + - [`moveOnSplineAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveOnSplineAsync) 💚 |
| 324 | + |
| 325 | +- Minimum jerk trajectory planning (using [ethz-asl/mav_trajectory_generation](https://github.com/ethz-asl/mav_trajectory_generation)), and trajectory tracking (using a pure pursuit like controller minimizing position and velocity errors), with position setpoints and corresponding velocity constraints. Useful for making a drone go through a gate waypoint, while obeying speed and direction constraints. |
| 326 | + Optionally use the `*lookahead*` parameters to start new trajectory from a point sampled `n` seconds ahead for trajectory being tracked currently. |
| 327 | + - [`moveOnSplineVelConstraintsAsync`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.moveOnSplineVelConstraintsAsync) 💚 |
| 328 | + |
| 329 | +- Clear and stop following current trajectory. |
| 330 | + - [`clearTrajectory`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.clearTrajectory) 💚 |
| 331 | + |
| 332 | +#### Gain setter APIs: |
| 333 | +- [`setAngleRateControllerGains`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.setAngleRateControllerGains) 💚 |
| 334 | +- [`setAngleLevelControllerGains`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.setAngleLevelControllerGains) 💚 |
| 335 | +- [`setVelocityControllerGains`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.setVelocityControllerGains) 💚 |
| 336 | +- [`setPositionControllerGains`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.setPositionControllerGains) 💚 |
| 337 | +- [`setTrajectoryTrackerGains`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.setTrajectoryTrackerGains) 💚 |
| 338 | + |
| 339 | +#### APIs to help generate gate detection datasets: |
| 340 | +- Object pose setter and getter: |
| 341 | + - [`simSetObjectPose`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simSetObjectPose) |
| 342 | + - [`simGetObjectPose`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simGetObjectPose) |
| 343 | + |
| 344 | +- Object scale setter and getter: |
| 345 | + - [`simSetObjectScale`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simSetObjectScale) 💚 |
| 346 | + - [`simGetObjectScale`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simGetObjectScale) 💚 |
| 347 | + |
| 348 | +- Object segmentation ID setter and getter: |
| 349 | + - [`simGetSegmentationObjectID`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simGetSegmentationObjectID) |
| 350 | + - [`simSetSegmentationObjectID`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simSetSegmentationObjectID) |
| 351 | + |
| 352 | +- Listing all the objects in the scene: |
| 353 | + - [`simListSceneObjects`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simListSceneObjects) 💚 |
| 354 | + |
| 355 | +- Gate specific APIs: |
| 356 | + - [`simGetNominalGateInnerDimensions`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simGetNominalGateInnerDimensions) 💚 |
| 357 | + - [`simGetNominalGateOuterDimensions`](https://microsoft.github.io/AirSim-NeurIPS2019-Drone-Racing/api.html#airsimneurips.client.MultirotorClient.simGetNominalGateOuterDimensions) 💚 |
235 | 358 |
|
236 | 359 | ## Questions |
237 | 360 | Please open a Github Issue on **this** repository (not [AirSim](https://github.com/microsoft/AirSim)) for any technical questions w.r.t. the Neurips competition. |
0 commit comments