{"id":17502116,"url":"https://github.com/itstorque/2086-wallfollower","last_synced_at":"2025-03-28T19:25:18.384Z","repository":{"id":77107183,"uuid":"257055093","full_name":"itstorque/2086-WallFollower","owner":"itstorque","description":"MATLAB simulation of a PID controlled robot equipped with a LIDAR","archived":false,"fork":false,"pushed_at":"2020-05-12T16:19:32.000Z","size":951,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-02T20:54:34.336Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://www.overleaf.com/read/zbrfjkpjqtcb","language":"MATLAB","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/itstorque.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-04-19T17:02:04.000Z","updated_at":"2020-05-12T16:19:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"34d35c1d-dbbd-4734-b04f-3653dac54921","html_url":"https://github.com/itstorque/2086-WallFollower","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itstorque%2F2086-WallFollower","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itstorque%2F2086-WallFollower/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itstorque%2F2086-WallFollower/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/itstorque%2F2086-WallFollower/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/itstorque","download_url":"https://codeload.github.com/itstorque/2086-WallFollower/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246086654,"owners_count":20721390,"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":[],"created_at":"2024-10-19T20:38:27.690Z","updated_at":"2025-03-28T19:25:18.350Z","avatar_url":"https://github.com/itstorque.png","language":"MATLAB","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 2086-WallFollower\n[Report documenting our work and results](resources/report.pdf)\nor the live\n[overleaf version](https://www.overleaf.com/read/zbrfjkpjqtcb)\n\nThis is a MATLAB project that simulates a 2D robot with LIDAR as an extroceptive\ninput and applies a wall following PID algorithm to reach an end desired position.\nThe project will deliver a 2D visualization of a robot with self-optimizing\nparameters for a PID algorithm moving along a wall at a fixed distance offset\nin a user interactable field.\n\n\u003cbr/\u003e\n\u003cp align=\"center\"\u003e\n \u003cimg alt=\"Screenshot Example\" src=\"resources/example.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\n## Robot's Attributes\n\n### Sensor Data\n\nThe main sensor used in this simulation is a LIDAR sensor mounted on the center of\nthe robot. The data input is an array of values ranging from [-pi/2, pi/2], more\nspecifically the front of the robot is at the angle 0 and the robot follows the\ngeneric right-handed 3D coordinate frame.\n\n### Ackerman Drive\n\nThe robot we are modeling uses the so called [Ackermann steering geometry](https://en.wikipedia.org/wiki/Ackermann_steering_geometry). The modelled geometric\nassembly causes the robots drive to be dependent on only two variables, the speed\nand the angle of turn.\n\n## Project Classes\n\n#### Robot\n\nThe robot is regarded as a dynamic [Field Object](#field-objects) that roams the field\nbased on the logic built inside the [Controller](#controller) class. The Robot class\ncontains methods relevant to simulating and processing sensor data, including simulating\nmeasurements and splicing the input array.\n\nSplicing is operated in a fashion where the distance measurement vector from the LIDAR is\nconverted into 3 point clouds: left, right and front. These are relevant to the logic\nthat controller uses.\n\n#### Controller\n\nContains an Ackerman drive simulation logic and the PID controller logic. The PID logic\ntakes in the error from the current position, which is characterized as the offset from\nthe desired distance away from the wall, and reacts to the error in three different\nmanners within a feedback controller. The different point clouds are used to weight the\ndistance away from the wall in a manner that would make responding to obstacles in a\nfield more smooth.\n\n#### Field Objects\n\nAll physical objects in this simulation are considered field objects, whether they are\nthe robot itself or walls in the field. These objects can be static or dynamic, and can\nhave any polygonal shape. The LIDAR distances are measured incident to these objects. The objects can be set up in the \"Configure Environment\" window which looks like this\n\n\u003cbr/\u003e\n\u003cp align=\"center\"\u003e\n \u003cimg alt=\"Setup Window Screenshot\" src=\"resources/setup_example.png\" width=\"50%\"/\u003e\n\u003c/p\u003e\n\u003cbr/\u003e\n\n#### Visualization\n\nAll [Field Objects](#field-objects) can be presented in a user-friendly manner by the\nvisualization class. It showcases a field map with the distance of 1 coordinate\ncorresponding to a distance of 1 meter. To use, just run the GUI by creating an instance of mainUI. (Running that class).\n\n## Requirements\n\nThis program was developed on MATLAB 2019b and is intended for use on versions higher than that only. A lot of UI classes were built for 2019b+ and versions such as 2018b or 2019a might not work with the software out of the box. In short - we only support 2019b or newer.\n\n## Project Status\n\nComplete, useful for some numerical experiments and simulation.\n\n### Members\n - Levi Gershon\n - Tareq Dandachi\n - Jason Daniels\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitstorque%2F2086-wallfollower","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fitstorque%2F2086-wallfollower","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fitstorque%2F2086-wallfollower/lists"}