Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

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

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

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

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

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

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

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

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

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

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

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

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

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

Latest commit

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project1 @ University of California, Irvine

This project has three parts:

  • Part 1 my_teleop_node:
    1. Create a node (under the scripts folder) named my_teleop_node.
    2. This node will subscribe to the topic /turtle1/cmd_vel.
    3. Writing Python code that takes input from the keyboard. Whenever the user hits the w key, the turtle should move forward. Whenever the user hits the s key, the turtle should move backwards. Whenever the user hits the key a then the turtle should rotate to the left without moving. Finally, when the user hits the key d the turtle should rotate to the right without moving.
  • Part 2 swim_node:
    1. Create a new node in the same package and named swim_node under the scripts folder.
    2. Upon initialization, this node should pick some random linear velocity and some random angular velocity.
    3. The turtle then swims in a figure 8 shape using these random velocities.
  • Part 3 swim_to_goal:
    1. Create a new node in the same package and named swim_to_goal under the scripts folder.
    2. Upon initialization, this node will ask the user to enter two numbers called x_goal and y_goal
    3. Calculate the error between the turtle current position (current_x, current_y) and the goal(x_goal,y_goal). The turtle pose can be retrieved by subscribing to /turtle1/pose topic. This error can be computed as:
      • Error_position = Euclidean distance between (current_x, current_y) and (x_goal,y_goal)
      • Error_angle = atan2(Error_position)
    4. Set the turtle velocity to be proportional to the error, i.e., when the turtle is far away from the goal it should move faster than when the turtle is near the goal, and should not move when it arrives to the goal. Once you calculate the velocities, you can publish them on the /turtle1/cmd_vel topic.
    5. Check if Error_position is smaller than 0.5, then you can stop moving the turtle. Else, go to Step 3. 6. When the turtle arrives to the final goal, it should ask the user for a new x_goal and y_goal and then move the turtle accordingly.

About

University of California, Irvine

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages