{"id":15149290,"url":"https://github.com/wobblyyyy/pathfinder2","last_synced_at":"2025-08-23T10:32:25.457Z","repository":{"id":42056534,"uuid":"375493230","full_name":"Wobblyyyy/Pathfinder2","owner":"Wobblyyyy","description":"Paths, trajectories, splines, the number 2, and a whole lot of swag.","archived":false,"fork":false,"pushed_at":"2023-03-18T22:22:42.000Z","size":1667,"stargazers_count":13,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-06-10T16:10:32.113Z","etag":null,"topics":["challenge","competition","first","frc","ftc","java","library","pathfinder","robotics"],"latest_commit_sha":null,"homepage":"https://wobblyyyy.github.io/docs/pathfinder2/documentation.html","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Wobblyyyy.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":".github/CONTRIBUTING.md","funding":null,"license":"license.md","code_of_conduct":".github/CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2021-06-09T21:26:20.000Z","updated_at":"2025-05-07T08:30:02.000Z","dependencies_parsed_at":"2022-08-12T03:31:48.526Z","dependency_job_id":"facbc868-666e-4770-859d-c99a0b973aa2","html_url":"https://github.com/Wobblyyyy/Pathfinder2","commit_stats":null,"previous_names":[],"tags_count":50,"template":false,"template_full_name":null,"purl":"pkg:github/Wobblyyyy/Pathfinder2","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wobblyyyy%2FPathfinder2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wobblyyyy%2FPathfinder2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wobblyyyy%2FPathfinder2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wobblyyyy%2FPathfinder2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Wobblyyyy","download_url":"https://codeload.github.com/Wobblyyyy/Pathfinder2/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Wobblyyyy%2FPathfinder2/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271746655,"owners_count":24813575,"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","status":"online","status_checked_at":"2025-08-23T02:00:09.327Z","response_time":69,"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":["challenge","competition","first","frc","ftc","java","library","pathfinder","robotics"],"created_at":"2024-09-26T13:43:32.069Z","updated_at":"2025-08-23T10:32:25.433Z","avatar_url":"https://github.com/Wobblyyyy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch2 align=\"center\"\u003eImportant Notice\u003c/h2\u003e\n\nThis project is no longer actively being developed. If anyone is interested in\ncontinuing the development of this project, please let me know!\n\nI'd be happy to help you with using this project. You can reach me through\nDiscord (`wobblyyyy#6733`) or e-mail (`carobertson1000@gmail.com`).\n\n\u003cp align=\"center\"\u003e\n\u003cimg src=\"media/pathfinder2-logo.png\" alt=\"Pathfinder2\"\u003e\n\u003cbr\u003e\n\u003cb\u003eAutonomous motion planning and control library for wheeled mobile robots.\u003c/b\u003e\n\u003cbr\u003e\n\u003ci\u003eSuccessor to \u003ca href=\"https://github.com/Wobblyyyy/Pathfinder\"\u003ePathfinder\u003c/a\u003e.\u003c/i\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003cimg alt=\"GNU GPL V3\" src=\"https://img.shields.io/github/license/Wobblyyyy/Pathfinder2\"\u003e\n\u003cimg alt=\"Top Language\" src=\"https://img.shields.io/github/languages/top/wobblyyyy/Pathfinder2\"\u003e\n\u003cimg alt=\"Issues\" src=\"https://img.shields.io/github/issues/Wobblyyyy/Pathfinder2\"\u003e\n\u003cimg alt=\"Forks\" src=\"https://img.shields.io/github/forks/Wobblyyyy/Pathfinder2\"\u003e\n\u003cimg alt=\"Stars\" src=\"https://img.shields.io/github/stars/Wobblyyyy/Pathfinder2\"\u003e\n\u003cimg alt=\"Latest Release (Bleeding)\" src=\"https://img.shields.io/github/v/release/wobblyyyy/Pathfinder2?include_prereleases\"\u003e\n\u003cimg alt=\"Latest Release\" src=\"https://img.shields.io/github/v/release/wobblyyyy/Pathfinder2\"\u003e\n\u003c/div\u003e\n\nPathfinder2 is a continuation of the\noriginal [Pathfinder](https://github.com/Wobblyyyy/Pathfinder) library: a\nstreamlined motion planning and control system designed for FIRST events, such\nas the [FIRST Robotics Competition](https://www.firstinspires.org/robotics/frc)\nand the [FIRST Tech Challenge](https://www.firstinspires.org/robotics/ftc).\n- Track the position of a wheeled mobile robot using a variety of odometry\n  implementations.\n- Dynamically correct for movement error and drift.\n- Plan complex routes using the\n  [Trajectory](./docs/17_the_trajectory_system.md)\n  system. Follow splines, arcs, lines, equations, the little green light at\n  the end of the tunnel - whatever you want, it's really up to you.\n- Full-featured geometry package with polygon collision detection, several\n  shapes, lines, points, and angles.\n- Map gamepad events (button press, trigger press, joystick move, etc) to\n  `Runnable`s, making it easy to create listeners.\n- Incredibly customizable: much of Pathfinder is based on interfaces and\n  there's a plugin system for advance usages.\n- Potentially the coolest piece of code ever written. I don't have any\n  evidence to support that, but we're all about swag here.\n\nNEW DOCUMENTATION:\n\n\u003e Pathfinder has improved documentation available in the [`docs`](/docs/)\n\u003e directory.\n\nOLD DOCUMENTATION:\n\n\u003e Want to get started? Check out the [releases guide](project_releases.md) to\n\u003e get everything installed, and then head over to the\n\u003e [documentation portal](https://wobblyyyy.github.io/docs/pathfinder2/documentation.html).\n\n\u003ch2 align=\"center\"\u003eSummary\u003c/h2\u003e\n\nPathfinder handles everything related to your robot's movement. It abstracts\naway much of the tedious movement-related code many robot codebases are bogged\ndown with and allows you to focus on what else your robot can do. In addition\nto providing a robust interface for precisely controlling your robot's\nmovement, Pathfinder provides a wide array of robotics-related utilities and\ntools.\n\nWant your robot to move to a certain point on the field? Simple:\n```java\npathfinder.goTo(new PointXY(10, 15));\n```\n\n`PointXY` is a simple Cartesian coordinate with X and Y values. Now let's say\nyou want to make your robot move to the same point, but turn to 45 degrees.\n```java\n// method 1\npathfinder.goTo(new PointXYZ(10, 15, Angle.fromDeg(45)));\n\n// method 2\npathfinder.goToZ(Angle.fromDeg(45));\n```\n\nPathfinder is capable of significantly more than simple movement - splines,\nmotion profiling, recording and playback - the list goes on.\n\n\u003ch2 align=\"center\"\u003eExample Code\u003c/h2\u003e\n\nCheck out an example FRC project\n[here](https://github.com/Wobblyyyy/MecanumPathfinderFRC)!\n\nHere's a demonstration of Pathfinder's utilization of lambda expressions to\nwrite simple and readable code.\n```java\npathfinder\n    .setSpeed(0.5)\n    .setTolerance(2)\n    .setAngleTolerance(Angle.fixedDeg(5))\n    .splineTo(\n        new PointXYZ(10, 10, Angle.fixedDeg(90)),\n        new PointXYZ(20, 30, Angle.fixedDeg(45)),\n        new PointXYZ(30, 50, Angle.fixedDeg(180))\n    )\n    .tickUntil();\n\npathfinder.getListenerManager()\n    .bindButton(gampad::a, (isPressed) -\u003e {\n        // code to be executed whenever the A button is pressed\n    })\n    .bindButton(gamepad::b, (isPressed) -\u003e {\n        // code to be executed whenever the B button is pressed\n    })\n    .bind(new ListenerBuilder()\n        .setMode(ListenerMode.CONDITION_IS_MET)\n        .addInput(() -\u003e SupplierFilter.anyTrue(\n            () -\u003e gamepad.rightTrigger() \u003e 0,\n            () -\u003e gamepad.leftTrigger() \u003e 0\n        ))\n        .setWhenTriggered(() -\u003e {\n            // code to be executed whenever either trigger is pressed\n        })\n        .setPriority(10)\n        .setExpiration(Double.MAX_VALUE),\n        .setMaximumExecutions(Double.MAX_VALUE)\n    );\n\n// whenever pathfinder is \"ticked\" (updated, basically), set the robot's\n// translation to whatever the driver's controller outputs\npathfinder.onTick(() -\u003e {\n    pathfinder.setTranslation(new Translation(\n        gamepad.leftStickX(),\n        gamepad.leftStickY(),\n        gamepad.rightStickX()\n    ));\n});\n\nwhile (true) {\n    // tick pathfinder forever\n    pathfinder.tick();\n}\n```\n\n\u003ch2 align=\"center\"\u003eInstallation\u003c/h2\u003e\n\nInstallation instructions have been moved [here](project_releases.md).\n\n\u003ch2 align=\"center\"\u003eDocumentation\u003c/h2\u003e\n\nHere's all of the sources of documentation I can think of right now.\n\n- [Documentation portal](https://wobblyyyy.github.io/docs/pathfinder2/documentation.html) -\n  the hub for documentation for this library.\n- [Project tutorial](.github/project_tutorial.md) - this is a basic tutorial\n  that walks through the fundamentals of the library. This is probably the best\n  place to start getting acquainted with the library.\n- [Examples](pathfinder2-examples) - several example usages of the project. Each\n  of the classes contained in this module will contain more specific\n  documentation explaining what the example is demonstrating.\n- [JavaDoc](https://wobblyyyy.github.io/JavaDocs/Pathfinder2/0.7.0) - JavaDoc\n  for the Pathfinder2 library. This is the most fine-grained documentation, and I'd\n  encourage you to check this out once you're comfortable with the library.\n- [Video guides](https://google.com) - (not yet available) video guides on using\n  the library. Who doesn't love videos? Right? Right.\n- [Project releases](project_releases.md) - a guide on all of the available\n  releases of Pathfinder.\n\n\u003ch2 align=\"center\"\u003eLicensing\u003c/h2\u003e\n\nThis project uses the [GNU GPL V3](license.md). You're allowed to freely\ndistribute and modify the code contained in this project, so long as a copy of\nthe original license is provided, and all of your code is made open-source.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwobblyyyy%2Fpathfinder2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwobblyyyy%2Fpathfinder2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwobblyyyy%2Fpathfinder2/lists"}