Latest commit

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

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

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

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

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

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

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

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

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

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

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

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

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

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

5 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

AutonomousSystem_Project3 @ University of California, Irvine

This projects has three parts:

  • Part 1 : PID Controllers
    • In this problem, I use TurtleBot3 simulator to tune a PID controller. In workspace, create a new node named PID_Controller. This node shall subscribe to the following topics:
      • /reference_point : this topic contains information about the new pose (x,y,theta) that the robotshall visit. It also contains another parameter called “mode”.
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
    • This node shall publish to the topic:
      • /cmd_vel : which is used to assign linear and angularvelocities. The node shall implement the PID controller to move the robot from its current pose to the reference pose. In particular, it should implementtwo PID controllers, one that controls the angular motion, while the other one controls the linearmotion.
    • Whenever the “mode” is set to zero, then the PID_Controller shall activate the PID for the angular velocity first until the robot faces the reference point, followed by activating the linearvelocity controller until the robot gets to the reference point, and finally activate the angular velocity controller again to turn the robot towards the final angle. Whenever the “mode” is set to 1, then the PID_Controller shall activate both the angular and the linear controller simultaneously trying to control both the angle and the position of the robot to get to the final pose.You need to pick different combinations of the P, I, and D for the angular velocity controller and the linear controller. You need to try different values until you get an acceptable result.
  • Part 2 : Path Planning Using RRT
    • In this problem, I implement the RRT algorithm for path planning. In workspace, create a new ROS node named RRT_node. This node should subscribe to the following topics:
      • /map : this topic is used to publish the current occupancy grid computed by the Hector SLAM
      • /slam_pose : this topic contains information about the current robot position as estimated by the Hector SLAM algorithm.
      • /target_pose : this topic is used by the user to specify the target point for which the robot should visit.
    • And publishes to the following topic:
      • /trajectory : this topic should contain the trajectory (an array of points) that needs to be visitedby the robot in order to move from its current position to the target point.
    • This node shall implement the RRT algorithm (assume that the robot is a circle of width = 0.5 meters). The RRT algorithm computes a tree data structure with its root is set to the current robot pose. It then expands the tree by adding more nodes to it. To structure your code, you should implement the following functions that are needed for RRT algorithm to work:
      1. Random_configuration: this function generates a new random configuration in the configuration space. The configuration space is 2-dimensional. So this function is going to generate a random (x,y) point
      2. Nearest_vertex: this function takes as input the randomly generated configuration. It shall go through all the nodes in the tree and compute the euclidean distance with respect to the randomly generated configuration. The function should return the nearest node in the tree.
      3. New_configuration: this function takes as input the randomly generated configuration along with its nearest node in the tree. If the Euclidean distance between the two issmaller than a certain threshold, then this functionshould return the randomly generated configuration. If not, then it should compute the nearest point to the randomly generated configuration whose Euclidean distance is less than the threshold.
      4. Add_vertex: this function should add the node computed by the “New_configuration” to the tree.RRT algorithm shall use the four functions above to add nodes to the tree until add a node that is “close” to the target pose (i.e., the Euclidean distance between one of the nodes in thetree and the target pose is less than the threshold) or reach a max number of iterations. Finally, RRT algorithm should find the trajectory between the root and the target. This can be done by starting from the target node in the tree and go up in the tree until get to the root.

About

University of California, Irvine

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages