{"id":18375038,"url":"https://github.com/cyberbotics/wrestling","last_synced_at":"2025-04-06T20:30:52.598Z","repository":{"id":64000810,"uuid":"454443408","full_name":"cyberbotics/wrestling","owner":"cyberbotics","description":"Humanoid robot wrestling competition","archived":false,"fork":false,"pushed_at":"2023-10-04T14:30:57.000Z","size":7384,"stargazers_count":50,"open_issues_count":2,"forks_count":9,"subscribers_count":30,"default_branch":"main","last_synced_at":"2025-03-22T06:25:51.833Z","etag":null,"topics":["competition","humanoid","programming","robot"],"latest_commit_sha":null,"homepage":"https://webots.cloud/run?version=R2023a\u0026url=https://github.com/cyberbotics/wrestling/blob/main/worlds/wrestling.wbt\u0026type=competition","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cyberbotics.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-02-01T15:34:33.000Z","updated_at":"2024-12-07T13:12:55.000Z","dependencies_parsed_at":"2023-10-02T08:11:46.139Z","dependency_job_id":null,"html_url":"https://github.com/cyberbotics/wrestling","commit_stats":null,"previous_names":[],"tags_count":2,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberbotics%2Fwrestling","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberbotics%2Fwrestling/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberbotics%2Fwrestling/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cyberbotics%2Fwrestling/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cyberbotics","download_url":"https://codeload.github.com/cyberbotics/wrestling/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247547122,"owners_count":20956496,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["competition","humanoid","programming","robot"],"created_at":"2024-11-06T00:17:16.364Z","updated_at":"2025-04-06T20:30:50.532Z","avatar_url":"https://github.com/cyberbotics.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cspan id=\"title\"\u003e\n\n# IROS 2023 Wrestling Competition\n\n\u003c/span\u003e\n\n[![webots.cloud - Competition](https://img.shields.io/badge/webots.cloud-Competition-007ACC)][1]\n\n\u003cspan id=\"description\"\u003e\n\nThis competition focuses on the development of advanced humanoid robot control software for a wrestling game. It relies on a calibrated simulation model of the NAO robot, running in the Webots simulator with realistic physics, sensor and actuator simulation.\n\n\u003c/span\u003e\n\nBeing spectacular and easy to get started with, this competition aims at gathering a large number of competitors, both on-site and remotely. The fully open-source competition software stack was designed to be re-used as a [template](https://github.com/cyberbotics/competition-template) for other simulation-based robot competitions.\n\n![Webots screenshot](preview/thumbnail.jpg \"Webots screenshot\")\n\n## Competition Information\n\n\u003cspan id=\"information\"\u003e\n\n- Difficulty: Master or PhD\n- Robot: [NAO](https://webots.cloud/run?version=R2023b\u0026url=https://github.com/cyberbotics/webots/blob/develop/projects/robots/softbank/nao/protos/Nao.proto)\n- Programming Language: any\n- Commitment: a few weeks\n- Prize: [1 Ether](https://www.google.com/search?q=ethereum+price)\n\n\u003c/span\u003e\n\n## Important Dates\n\n| date                                                                                                             | description                                      |\n|------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|\n| June 23rd, 2023                                                                                                  | registration opens and qualification games start |\n| September 19th, 2023                                                                                             | selection of the best 32 teams                   |\n| September 26th, 2023 - [3pm CEST](https://dateful.com/time-zone-converter?t=15\u0026d=2023-09-26\u0026tz2=Central-European-Summer-Time-CEST)                                                                                            | code freeze for the finals                       |\n| **October 2nd, 2023** - [4pm EDT](https://dateful.com/convert/eastern-daylight-time-edt?t=4pm\u0026d=2023-10-02)      | **1/16 finals**                                  |\n| **October 3rd, 2023** - [11am EDT](https://dateful.com/convert/eastern-daylight-time-edt?t=11am\u0026d=2023-10-03)    | **1/8 finals**                                   |\n| **October 3rd, 2023** - [4:30pm EDT](https://dateful.com/convert/eastern-daylight-time-edt?t=430pm\u0026d=2023-10-03) | **1/4 finals**                                   |\n| **October 4th, 2023** - [11am EDT](https://dateful.com/convert/eastern-daylight-time-edt?t=11am\u0026d=2023-10-04)    | **semifinals, third place game and final**       |\n\n### Finals\n\nThe finals will take place during the [IROS 2023](https://ieee-iros.org) conference in Detroit (USA) and will be broadcasted online in real time.\nRemote participation will be possible.\n\n### Selection for the Finals\n\nOn September 19th, at [9am EDT](https://dateful.com/convert/eastern-daylight-time-edt?t=9am\u0026d=2023-09-19), we will select the best 32 teams from the [leader board][1] that will participate to the finals.\nThese teams will have exactly one week of time to further improve their robot controller before their code is frozen and checked out for the finals.\nMeanwhile, other teams will not be allowed to run games any more.\n\nOn September 26th, between [9am EDT](https://dateful.com/convert/eastern-daylight-time-edt?t=9am\u0026d=2023-09-26) and [11am EDT](https://dateful.com/convert/eastern-daylight-time-edt?t=11am\u0026d=2023-09-26), we will checkout the current version of the robot controller for each qualified participant.\nPlease refrain from making any commit to your main branch during this period as it may have unexpected consequences on your controller.\nWe will use exclusively this version for running all the final games from the 1/16 finals until the final.\n\n### Finals Games\n\nAll the finals games will be played in sets, in a best-of-five format, which means that players need to win 3 sets to win the game (like in Grand Slams ATP tennis tournaments). Therefore a finals game will have between three and five sets and the final score will be either 3-0, 3-1 or 3-2.\n\nHere is the [result](result-iros2023.md) page that will reflect in real-time the finals games, so that online competitors can follow the finals remotely.\nThe **Game** columns will contain links to 3D playbacks of the sets.\n\n### Certificates\n\nThe 32 best ranked participants will receive an official certificate mentionning the robot controller name, team members and organization, as described respectively in the name, team and organization fields of their [participant.json](controllers/participant/participant.json) file.\n\n## Prize\n\nThe winning team will receive [one Ether](https://www.google.com/search?q=ethereum+price) crypto-currency (priced around USD 1'742 on June 14th, 2023) and an official IROS certificate.\nThe second and third place will receive an official IROS certificate.\n\n## Participation Conditions\n\nParticipation is free of charge, including the finals.\nAnyone can participate: there is absolutely no restriction on the quality and number of team members.\nA team may perfectly have only one single member.\nHowever, an individual cannot be a member of several teams in the [leaderboard][1].\nAlso, sharing code privately with another team is not allowed.\nBut, sharing code publicly is allowed as long as it is immediately announced on [this GitHub Discussions](https://github.com/cyberbotics/wrestling/discussions/).\nAny team suspected to break any of these rules will be removed.\n\n## Get Started Now\n\nTo get started programming your wrestling robot, you will have to:\n\n### 1. Create your own Participant Repository from this Template\n\n[Click here](../../generate) to create your own repository automatically or do it manually by clicking on the green button \"Use this template\".\nIf you get a 404 page it's probably because you are not connected to your GitHub account.\n- Fill the \"Repository name\" field with a name for your controller.\n- Set the visibility of your repository to \"Private\" unless you don't care about people looking at your code.\n- Finally, click on the green button \"Create repository from template\".\n\nYou should continue reading this document on your **own** repository page and not this one.\n**This is important** in order to be able to use the links in the following sections.\nRemember that you can open a link in a new tab by middle-clicking the link.\n\n### 2. Add [omichel](https://github.com/omichel) as a Collaborator\n\nYou can skip this step if you created your repository as \"Public\" instead of \"Private\".\n\nOtherwise, you must grant access to your repository to the competition organizer so that your code can be checked out to evaluate its performance and the organizer can post issues on your repository in case of problems with your code.\n\n- [Click here](../../settings/access) to go to the \"Collaborators\" setting page. You might need to confirm the access by re-entering your GitHub password.\n- You should see a \"Manage access\" box where you will see the current collaborators of the repo.\nClick on the \"Add people\" and search for \"[omichel](https://github.com/omichel)\".\nWhen you found the organizer, add him to the repository.\n\n### 3. Modify your Robot Controller\n\nYou can now edit your [participant.json](../../edit/main/controllers/participant/participant.json) file to set your name, description and country information and also modify your [main robot controller file](../../edit/main/controllers/participant/participant.py) or create new files in this folder and push the modification to the main branch of your repository.\nA series of automated actions will take place in a few seconds.\nIf everything went well, your repository should appear after some time in the [leader board][1] of the competition.\nIf there was a problem, an [issue](../../issues) will be open automatically on your repository by the organizer.\nYou will have to read it, fix what is wrong and push the changes to your main branch to re-run the automated verification.\n\n## Rules\n\n*Note*: the rules might be slightly adapted to fix minor issues until September 1st, 2023. Past this date, no change will be made to rules.\n\nThe rules of game are implemented in the [referee supervisor](controllers/referee/referee.py).\nThey can be summarized as follow:\n\nA game lasts until one of these two conditions occurs:\n- **Knock-out**: If the altitude (along Z axis) of the head of a robot remains below a given threshold and below the one of the other robot for more than 10 seconds, then the other robot is declared the winner and the game is immediately over. This may happen if a robot falls down and cannot recover quickly or if it falls off the ring.\n- **Time-out**: If no knock-out happened after 3 minutes, the robot having the greater ring *coverage* is declared the winner and the game is over. In the unlikely case of *coverage* equality, the winner is determined randomly. \n\nThe *coverage* reflects how far a robot has moved inside the ring. It is computed over the time frame of a game from its maximum and minimum positions along the X and Y axes, respectively *X_max*, *X_min*, *Y_max* and *Y_min*, using the following formula:\n\n```python\ncoverage = X_max + Y_max - X_min - Y_min\n```\n\n### Demo Robot Controllers\n\nA series of simple examples are provided using different programming languages or frameworks and different complexity levels:\n\n| Language / Framework | Examples |\n|---|---|\n| Python | [Alice](https://github.com/cyberbotics/wrestling-alice \"Alice plays a simple motion file.\"), [Bob](https://github.com/cyberbotics/wrestling-bob \"Bob sends position commands to some motors and plays a motion file.\"), [Charlie](https://github.com/cyberbotics/wrestling-charlie \"Charlie plays a custom motion file and uses the LEDs.\"), [David](https://github.com/cyberbotics/wrestling-david \"David is able to detect when he falls down and to recover.\"), [Eve](https://github.com/cyberbotics/wrestling-eve \"Eve processes camera images to detect her opponent and targets him.\"), and [Fatima](https://github.com/cyberbotics/wrestling-fatima \"Fatima uses an advanced gait manager with inverse kinematics.\") |\n| C      | [Alice](https://github.com/cyberbotics/wrestling-alice-c \"Alice plays a simple motion file.\")    |\n| C++    | [Alice](https://github.com/cyberbotics/wrestling-alice-cpp \"Alice plays a simple motion file.\")  |\n| Java   | [Alice](https://github.com/cyberbotics/wrestling-alice-java \"Alice plays a simple motion file.\") |\n| ROS 2  | [Alice](https://github.com/cyberbotics/wrestling-alice-ros-2 \"Alice plays a simple motion file.\"), [Bob](https://github.com/cyberbotics/wrestling-bob-ros-2 \"Bob sends position commands to some motors and plays a motion file.\")  |\n| Rust   | [Ferris](https://github.com/katharostech/icra-2023-robot-wrestling-rust-template \"Ferris sends position commands to some motor.\") |\n\n### Recommendation to Competitors\n\nThe earlier you start working on the competition, the better.\nThe ranking algorithm allows a very good robot controller to climp-up to the top of the [leader board][1] in one day.\nHowever, in practice, it is recommended to enter the [leader board][1] rankings as early as possible.\nThis allows you to compare your robot controller to others and have time to improve its performance.\n\n### Include Dependencies in your Docker Container\n\nYour controller is run in a [Docker container](https://www.docker.com/resources/what-container/). If your robot controller has dependencies, such as some specific libraries, python modules, a Java programming interface or a complete ROS framework, be sure to update the [controllers/Dockerfile](controllers/Dockerfile) to include all these dependencies. The default Dockerfile includes the tools needed to run and compile simple C, C++ and Python controllers.\n\n### Ranking System\n\nEach time you push a commit on your main branch, a series of games is started on the runner machine.\nIf you are ranked number 1, no game will take place.\nOtherwise, you will first play a game against the competitor ranked just above you in the [leader board][1].\nIf you loose, nothing will be changed in the [leader board][1] ranking and no further game will be played.\nOtherwise, you will swap your position in the [leader board][1] with the competitor just above you and you will play another game with the competitor just above your new position.\nThis will be repeated as long as you win until you reach the first rank of the [leader board][1].\n\n### Checking the Log File of an Evaluation Run\n\nWhen there is a problem with your repository, an issue is opened automatically on your repository to invite you to check the log of the evaluation run.\nHowever, if your controller crashes for some reason, no error will be reported to you, but the animation of your robot will show your robot not moving at all (and your robot will likely loose the game).\nIt that case, you should check the log file of the evaluation run to understand why your controller crashed.\nAll the log files are available on https://github.com/cyberbotics/wrestling/actions\n\n### Friendly Test Games\n\nIt is possible for the participants to start a friendly test game against another participant of their choice.\nThis can be achieved from the [Actions](../../actions) tab of the participant repository: select the [Trigger Test Game](../../actions/workflows/test.yml) action and click the \u003ckbd\u003eRun workflow\u003c/kbd\u003e button.\nEnter the name of your opponent as it appears in the [leader board][1] and click the green \u003ckbd\u003eRun workflow\u003c/kbd\u003e button.\nOnce complete, friendly test games can be viewed from the `Test` buttons in the [leader board][1].\n\n### Runner Machine Configuration\n\nThe runner machine will host a single game at a time.\nIt will run 3 docker containers:\n\n1. One with Webots and the wrestling supervisor.\n2. One with the controller of the red player (participant).\n3. One with the controller of the blue player (opponent).\n\nEach docker container running a robot controller has [3](https://github.com/cyberbotics/wrestling/blob/0d017092f85cb989dcc0c65eb0e5a2ac18042ade/webots.yml#L9) virtual [CPU cores](https://github.com/cyberbotics/competition-record-action/blob/e820b586cf3ad70257682afb5245df9d2a5fc7c8/metascript/animation.py#L146-L147), [6 GB](https://github.com/cyberbotics/wrestling/blob/0d017092f85cb989dcc0c65eb0e5a2ac18042ade/webots.yml#L10) of [RAM](https://github.com/cyberbotics/competition-record-action/blob/e820b586cf3ad70257682afb5245df9d2a5fc7c8/metascript/animation.py#L239-L240) and shared access to the GPU hardware. However, we request that participants do not exceed 1 GB of GPU RAM usage for their robot controller. Participant exceeding this limit will be disqualified without prior notice.\n\nThe runner machine configuration is the following:\n- CPU: [Intel core i7-6700K @ 4.00 Ghz](https://www.cpubenchmark.net/cpu.php?id=2565).\n- RAM: 16 GB.\n- GPU: [NVIDIA GeForce GTX 1060 3 GB](https://www.videocardbenchmark.net/gpu.php?id=3566).\n\n[1]: https://webots.cloud/run?version=R2023b\u0026url=https%3A%2F%2Fgithub.com%2Fcyberbotics%2Fwrestling%2Fblob%2Fmain%2Fworlds%2Fwrestling.wbt\u0026type=competition \"Leader board\"\n\n## Acknowledgements\n\n\u003ca href=\"https://opendr.eu/\"\u003e\n  \u003cimg src=\"https://opendr.eu/wp-content/uploads/2020/01/logo-300x125.png\"\n       alt=\"opendr_logo\" height=\"60\" \u003e\n\u003c/a\u003e\u003c/br\u003e\n\nSupported by OpenDR - Open Deep Learning Toolkit for Robotics.\nMore information: \u003ca href=\"https://opendr.eu/\"\u003eopendr.eu\u003c/a\u003e\n\n\u003cimg src=\"https://opendr.csd.auth.gr/wp-content/uploads/2019/12/Flag_of_Europe-300x200.png\"\n     alt=\"eu_flag\" height=\"45\" align=\"left\" \u003e\n\nThis project has received funding from the European Union’s Horizon 2020\nresearch and innovation programme under grant agreement no. 871449.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberbotics%2Fwrestling","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcyberbotics%2Fwrestling","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcyberbotics%2Fwrestling/lists"}