Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Pathfinder

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation.

Pathfinder is a library for generating Motion Profiles, a way to smoothly fit and follow a trajectory based upon given waypoints. Currently, both a C and Java API are available, but can be applied to almost any application.

An example profile is given below, with the waypoints:

  1. X = -4, Y = -1, Angle = -45 degrees
  2. X = -2, Y = -2, Angle = 0
  3. X = 0, Y = 0, Angle = 0

The Graph on top is the X/Y position, and the Graph on the bottom is the Velocity.

Modifiers

Pathfinder supports Modifiers. Modifiers are a way to manipulate a trajectory with a given rule.
Pathfinder supports Tank and Swerve Drive modifiers.

Tank Drive:

Swerve Drive:

Part of the FIRST Robotics Competition?

We've got some Wiki Entries for you. After you've read this README, go to the wiki to learn more about how to integrate Pathfinder into your FRC application!

Building

To build the project, run the following command:

./gradlew build
./gradlew assemble

To build the C code only:

./gradlew :Pathfinder-Core:build

To build the Java code:

./gradlew :Pathfinder-Java:build
./gradlew :Pathfinder-Java:assemble

This will build for both the x64 and x86 architecture for your platform. To cross compile for ARM, do the following:

./gradlew build -Parm -PcompilerPrefix=arm-linux-gnueabi-
./gradlew assemble

Installing on your Architecture

If your OS or Architecture doesn't fall under the prebuilt binaries that are available with the library, you can install pathfinder's native binaries onto your local system manually. This will allow you to include the library in any project you want

64-Bit

./gradlewinstall

32-Bit

./gradlewinstall -P32

If you want to change the prefix location (by default it is /usr/local), you can pass the prefix property:

./gradlewinstall -Pprefix=<yourprefixlocation>

Usage

To see the usage for each language variation of the API, see the README in their folder.

LanguageFolder
CPathfinder-Core
JavaPathfinder-Java
LabVIEWPathfinder-LabVIEW

About

Cross-Platform, Multi-Use Motion Profiling and Trajectory Generation

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages