{"id":29625137,"url":"https://github.com/theolepage/brainstorming","last_synced_at":"2026-02-06T02:32:59.362Z","repository":{"id":97341069,"uuid":"161944653","full_name":"theolepage/brainstorming","owner":"theolepage","description":"Sail through algorithms.","archived":false,"fork":false,"pushed_at":"2023-10-25T07:03:50.000Z","size":279,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-21T06:12:20.474Z","etag":null,"topics":["algorithm","algorithms","autonomous-vehicles","autopilot","drone","sailing"],"latest_commit_sha":null,"homepage":"","language":null,"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/theolepage.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,"governance":null}},"created_at":"2018-12-15T21:19:58.000Z","updated_at":"2023-10-25T07:03:54.000Z","dependencies_parsed_at":"2023-05-01T07:34:50.319Z","dependency_job_id":null,"html_url":"https://github.com/theolepage/brainstorming","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/theolepage/brainstorming","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theolepage%2Fbrainstorming","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theolepage%2Fbrainstorming/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theolepage%2Fbrainstorming/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theolepage%2Fbrainstorming/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/theolepage","download_url":"https://codeload.github.com/theolepage/brainstorming/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/theolepage%2Fbrainstorming/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29145869,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-06T01:13:33.096Z","status":"online","status_checked_at":"2026-02-06T02:00:08.092Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["algorithm","algorithms","autonomous-vehicles","autopilot","drone","sailing"],"created_at":"2025-07-21T06:07:23.874Z","updated_at":"2026-02-06T02:32:59.344Z","avatar_url":"https://github.com/theolepage.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Brainstorming\n\nSail through algorithms.\n\n## Objectives\n\n### Short-term\n\nThis project is aimed to find efficient algorithms able to manage the trajectory of a sailboat. For the moment, our objective is to create a 2D physic simulation to represent a sailboat in realistic conditions.\n\n### Long-term\n\nThis project could be used to build an autonomous sailboat powered mainly by clean energy. Its aim would be to reach a target (or waypoints) set through a user interface.  \n\nA 4 layer algorithm would be required:\n1. Strategic long term routing: determines optimal route, according to weather conditions and sea topology, by dividing it into many short legs.\n2. Short course routing: determines optimal way to reach each waypoint defined above.\n3. Manoeuvre execution: ensures smooth execution of the manoeuvres automatically.\n4. Emergency reflexes: overrules the requested actions if there is a threat.\n\nThis project answers the problem of short course routing as many solutions already exist for the strategic long term routing.\n\n## Algorithms\n\nWe consider that our sailboat has a desired heading angle.\nWe are looking for the approach to determine the rudder and sail angle to maximizing its speed in this direction.  \n\nTwo different approaches to controlling the sails and rudders are presented in the following documents.\n1. Strömbec, C (2017). *Modeling, Control and Optimal Trajectory Determination for an Autonomous Sailboat* (Master's thesis).  Department of Automatic Control, Lund University, Sweden. Retrieved from [http://lup.lub.lu.se/luur/download?func=downloadFile\u0026recordOId=8923407\u0026fileOId=8923408](http://lup.lub.lu.se/luur/download?func=downloadFile\u0026recordOId=8923407\u0026fileOId=8923408).\n2. Stelzer, R. *Autonomous Sailboat Navigation* (Doctoral dissertation). Centre for Computational Intelligence, De Montfort University, England. Retrieved from [https://www.dora.dmu.ac.uk/bitstream/handle/2086/7364/thesis-optimized-300dpi.pdf](https://www.dora.dmu.ac.uk/bitstream/handle/2086/7364/thesis-optimized-300dpi.pdf).\n\n### The cost based trajectory control\n\nThis method will associate a cost for each angle (depending on sensors or predefined data). The following costs are covered: heading cost, velocity polar diagram cost, obstacle cost, action cost, strategic cost, tactical cost, wave cost...  \n\nThe algorithm determines which angle to go by finding the angle with the minimum cost.  \n\nIt relies on a [proportional–integral–derivative controller](https://en.wikipedia.org/wiki/PID_controller) (or PID controller) to continuously calculates an error value (as the difference between the desired heading and the current heading) and applies a smooth correction.\n\n### The velocity made good strategy\n\nThis algorithm is based on the optimisation of the  time-derivative of the distance between boat and target.\n\n![Velocity polar diagram of a Hobie 20](https://raw.githubusercontent.com/theolepage/brainstorming/master/docs/vpd-hobie20.png)\n\nAccording to the [velocity made good](https://en.wikipedia.org/wiki/Velocity_made_good) (or VMG) concept, the actual speed a sailboat can reach in a certain direction depends on the windspeed but also on the angle between boat heading and wind direction. While no direct course is possible straight into the wind, the maximum speed for a Hobie 20 is obtained with the wind from the side at about ±90 degrees. A boat-specific velocity polar diagram (or VPD) is created and used by the algorithm to adapt the heading.\n\nFurthermore, the algorithm described in the second documents provides an answer to the question when to tack on upwind courses. However, it does not provide an obstacle avoidance as opposed to the first one.\n\n## To-Do\n\n- Try using a neural network (3 inputs: wind/objective/heading angle, 1 output: rudder angle)\n- Create a simulation sandbox to test different algorithms\n- Write an implementation for both algorithms\n- Create a website hosting sailing tournaments to challenge each user's algorithm\n- Develop a complete and efficient solution to our problem\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheolepage%2Fbrainstorming","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheolepage%2Fbrainstorming","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheolepage%2Fbrainstorming/lists"}