{"id":49587904,"url":"https://github.com/sch-28/clever-drones","last_synced_at":"2026-05-03T23:10:08.059Z","repository":{"id":37550919,"uuid":"497614632","full_name":"sch-28/clever-drones","owner":"sch-28","description":"Self learning flying drones","archived":false,"fork":false,"pushed_at":"2022-10-18T20:27:12.000Z","size":5559,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2023-03-05T07:53:28.347Z","etag":null,"topics":["drones","machine-learning","neural-network","tensorflow"],"latest_commit_sha":null,"homepage":"https://sch-28.github.io/clever-drones/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sch-28.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-05-29T14:28:38.000Z","updated_at":"2023-01-12T16:59:24.000Z","dependencies_parsed_at":"2023-01-19T12:32:52.309Z","dependency_job_id":null,"html_url":"https://github.com/sch-28/clever-drones","commit_stats":null,"previous_names":[],"tags_count":null,"template":null,"template_full_name":null,"purl":"pkg:github/sch-28/clever-drones","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sch-28%2Fclever-drones","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sch-28%2Fclever-drones/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sch-28%2Fclever-drones/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sch-28%2Fclever-drones/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sch-28","download_url":"https://codeload.github.com/sch-28/clever-drones/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sch-28%2Fclever-drones/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32587842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"ssl_error","status_checked_at":"2026-05-03T22:09:10.534Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["drones","machine-learning","neural-network","tensorflow"],"created_at":"2026-05-03T23:10:07.255Z","updated_at":"2026-05-03T23:10:08.053Z","avatar_url":"https://github.com/sch-28.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Teaching a drone how to fly\nAfter seeing the epic [project](https://github.com/johnBuffer/AutoDrone) of [John Buffer](https://github.com/johnBuffer), I decided to give it a shot myself to create something similar.\n\nMy version is written in typescript, you are able to directly try it in your [browser](https://sch-28.github.io/clever-drones/). \n\n## Approach\nThe training consists of 9 targets. For each target, each drone has a **set time to reach** it.\nReaching means to not only hit the target, but to also **stay** on the position for a while.\nIf they don't reach their current target at the end of the time, they are destroyed. The time gets reset when the drone stayed long enough on top of the target.\nA next generation will be initialized if each drone is either destroyed or if all targets have been reached.\n\nThe next generation is created by letting all the drones reproduce based on their performance.\nThe performance is the normalized score of each drone. The score determined by their:\n- distance to their current target each iteration\n- how many targets they successfully reached\n- time it took to reach each target\n\n\nAfter two parents have been chosen for a new child-drone, there will be a chance for mutations.\nThrough mutations, there is the possibility of discovering a new behavior which might yield better results. In **evolutionary algorithms**, it is normally also required to perform a cross-over between the parents. This however has not yet been implemented.\n\n## Actual Training\nTo achieve the current used drone, I let the website run for 10+ hours. Depending on your luck/hardware, it may take less or more time.\u003cbr\u003e\nI usually trained with 200 drones per generation - which still ran fine on my pc.\n\n## Missing / Improvements\n- A big bottleneck is [tensorflow-js](https://github.com/tensorflow/tfjs). **Tensorflow** is made for anything but **neuro-evolution** and is slowing down the training a lot. Actual implementations of the **neat algorithm** would improve this project by a lot.\n- Adding cross-over to improve the algorithm.\n- Finishing the _nodejs server_ to allow easier training.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsch-28%2Fclever-drones","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsch-28%2Fclever-drones","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsch-28%2Fclever-drones/lists"}