{"id":339,"date":"2023-12-14T04:47:36","date_gmt":"2023-12-14T04:47:36","guid":{"rendered":"https:\/\/ai.seejazzwork.com\/autobots\/?p=339"},"modified":"2023-12-14T04:47:36","modified_gmt":"2023-12-14T04:47:36","slug":"final-project-reflection-blog-hardware","status":"publish","type":"post","link":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/","title":{"rendered":"Final Project Reflection Blog &#8211; Hardware"},"content":{"rendered":"\n<p>My partner Lizzie Manabat and I decided to work on the hardware option of the final project. This included taking the project 3 from where I left off, and adding the capabilities of follow-me 1D and 2D driving using both the LIDAR and ultrasonic sensor.<\/p>\n\n\n\n<p>This project directly builds on and extends project 3, as we needed to successfully install 3 sensors and make sure they worked in the project 3. In the final project however, we needed to implement project 3&#8217;s code into the follow-me 1D and 2D. <\/p>\n\n\n\n<p>I contributed to this project as the driver of the code. Lizzie was more of a navigator and tinkering with the ideas to implement our algorithm. We could say I worked more on the software and she worked more on the hardware, including the wiring and maintenance of the mechanical pieces.  However, at the end of the day, we each did contribute to both hardware and software and got to understand how everything worked &#8211; from the start to the end. <\/p>\n\n\n\n<p>On the way, we faced many obstacles, the biggest one of which being the WiringPi library being incompatible with other software that was installed on the Raspberry Pi, resulting in unexpected crashes at unexpected times. We solved the issue by manually ending the process by using the following commands:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ps -ef | grep follow\nkill -9 &lt;processnumber&gt;\n\n<\/code><\/pre>\n\n\n\n<p>The first line of code above allows us to find every process including the keyword &#8220;follow&#8221;, as our project filename was follow-2D. The second line of code force ends the process, so that it is no longer running. After that, we go back to our directory, and rerun our program without any crashed (until it crashes again.) Unfortunately, this is only a temporary fix and the permanent fix lies in changing the library used\/ using Pico instead of Raspberry Pi itself to control the sensors.<\/p>\n\n\n\n<p>Here is out video of the working robot:<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"CSC 286 Project 4 2D Wall Follower\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/NYZgiHGMUu8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>Here is our code for 1D:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\r\n * File: 1D_control.cpp\r\n *\r\n * Controls the robot to maintain a given distance to the wall directly in\r\n * front of it.\r\n *\r\n * This code uses Bang-Bang control or P-control to maintain the setpoint\r\n * distance.\r\n *\/\r\n\r\n#include &lt;iostream&gt;\r\n#include &lt;cmath&gt;\r\n\r\n#include &lt;signal.h&gt;\r\n\r\n#include &lt;follow_me\/common\/utils.h&gt;\r\n#include &lt;mbot_bridge\/robot.h&gt;\r\n#include &lt;wiringPi.h&gt;\r\n\r\n#define TRIG 21\r\n#define ECH 22\r\n\r\n\r\n\r\nint getCM() {\r\n        \/\/Send trig pulse\r\n        digitalWrite(TRIG, HIGH);\r\n        delayMicroseconds(20);\r\n        digitalWrite(TRIG, LOW);\r\n        \/\/Wait for echo start\r\n        while(digitalRead(ECH) == LOW);\r\n        std:: cout&lt;&lt; \"L \\n\";\r\n        \/\/Wait for echo end\r\n        long startTime = micros();\r\n        while(digitalRead(ECH) == HIGH);\r\n        std:: cout&lt;&lt; \"H \\n\";\r\n        long travelTime = micros() - startTime;\r\n         \/\/Get distance in cm\r\n        int distance = travelTime \/ 58;\r\n \r\n        return distance;\r\n}\r\n\r\nbool ctrl_c_pressed;\r\nvoid ctrlc(int)\r\n{\r\n    ctrl_c_pressed = true;\r\n}\r\n\r\n\r\nint main(int argc, const char *argv&#091;])\r\n{\r\n    signal(SIGINT, ctrlc);\r\n    signal(SIGTERM, ctrlc);\r\n\r\n    wiringPiSetup();\r\n        pinMode(TRIG, OUTPUT);\r\n        pinMode(ECH, INPUT);\r\n\r\n        \/\/TRIG pin must start LOW\r\n        digitalWrite(TRIG, LOW);\r\n        delay(30);\r\n\r\n    \/\/ Initialize the robot.\r\n    mbot_bridge::MBot robot;\r\n    \/\/ We will store the Lidar scan data in these vectors.\r\n    std::vector&lt;float&gt; ranges;\r\n    std::vector&lt;float&gt; thetas;\r\n\r\n    \/\/ *** Task 1: Adjust these values appropriately ***\r\n\r\n    float setpoint = 30;  \/\/ The goal distance from the wall in meters\r\n    float error = 5;\r\n    float velocity= 50;\r\n    \/\/ *** End student code *** \/\/\r\n\r\n\r\n    while (true) {\r\n        \/\/ This function gets the Lidar scan data.\r\n        robot.readLidarScan(ranges, thetas);\r\n\r\n        \/\/ Get the distance to the wall.\r\n        float dist_to_wall = findFwdDist(ranges, thetas);\r\n        \r\n\r\n        \/\/ *** Task 2: Implement the Follow Me controller *** \/\/\r\n\r\n        if (dist_to_wall &lt; 0) continue;      \r\n       int distance1 = getCM();\r\n       std:: cout &lt;&lt; \"echo: \" &lt;&lt; distance1 &lt;&lt; \"\\n\";\r\n       std:: cout &lt;&lt; \"lidar: \" &lt;&lt; dist_to_wall &lt;&lt; \"\\n\";\r\n        if ( distance1 &gt;= 35 &amp;&amp; dist_to_wall &gt;=0.35) robot.drive (0.3,0,0); \/\/ if the distance sensor and lidar both show a value bigger than 35cm, then drive forward.\r\n       else if (dist_to_wall &gt; 0.23 &amp;&amp; dist_to_wall &lt;0.35 || distance1 &gt; 20 &amp;&amp; distance1 &lt;35  ) robot.drive (0,0,0); \/\/ if just distance sensor or just the lidar show a value lower than threshold but higher than the low limit, then stop.\r\n       else if (dist_to_wall &lt;= 0.23 || distance1 &lt;= 20 ) robot.drive (-0.3,0,0); \/\/ if too close to the mbot, move back. Either the lidar or the distance sensor.\r\n       \/\/ if ((dist_to_wall &gt;=0.25) &amp;&amp; (dist_to_wall &lt;=0.35)) robot.stop();\r\n       else robot.drive(0,0,0); \/\/else stop the robot. not necessary but it's still there.\r\n        \/\/ *** End Student Code *** \/\/\r\n\r\n\r\n        if (ctrl_c_pressed)\r\n            break;\r\n    }\r\n\r\n    \/\/ Stop the robot.\r\n    robot.stop();\r\n    return 0;\r\n}\n\n<\/code><\/pre>\n\n\n\n<p>And here is our code for 2D:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/**\r\n * File: 2D_control_nearest.cpp\r\n *\r\n * Controls the robot to maintain a given distance to the nearest wall.\r\n *\r\n * This code finds the distance to the nearest wall in the Lidar scan. It\r\n * applies a control to the robot in the direction of the wall using the angle\r\n * to the scan.\r\n *\/\r\n\r\n#include &lt;iostream&gt;\r\n#include &lt;cmath&gt;\r\n\r\n#include &lt;signal.h&gt;\r\n#include &lt;string&gt;\r\n#include &lt;follow_me\/common\/utils.h&gt;\r\n#include &lt;mbot_bridge\/robot.h&gt;\r\n#include &lt;wiringPi.h&gt;\r\n\r\n#define TRIG 21\r\n#define ECH 22\r\n#define TRIG2 2\r\n#define ECHO2 3\r\n#define TRIG3 12\r\n#define ECHO3 13\r\n\r\nusing namespace std;\r\n\r\nbool ctrl_c_pressed;\r\nvoid ctrlc(int)\r\n{\r\n    ctrl_c_pressed = true;\r\n}\r\n\r\nint getCM() {\r\n        \/\/Send trig pulse\r\n        digitalWrite(TRIG, HIGH);\r\n        delayMicroseconds(20);\r\n        digitalWrite(TRIG, LOW);\r\n        \/\/Wait for echo start\r\n        while(digitalRead(ECH) == LOW);\r\n        std:: cout&lt;&lt; \"L \\n\";\r\n        \/\/Wait for echo end\r\n        long startTime = micros();\r\n        while(digitalRead(ECH) == HIGH);\r\n        std:: cout&lt;&lt; \"H \\n\";\r\n        long travelTime = micros() - startTime;\r\n         \/\/Get distance in cm\r\n        int distance = travelTime \/ 58;\r\n \r\n        return distance;\r\n}\r\n\r\nint getCM2() {\r\n        \/\/Send trig pulse\r\n        digitalWrite(TRIG2, HIGH);\r\n        delayMicroseconds(20);\r\n        digitalWrite(TRIG2, LOW);\r\n \r\n        \/\/Wait for echo start\r\n        while(digitalRead(ECHO2) == LOW);\r\n \r\n        \/\/Wait for echo end\r\n        long startTime = micros();\r\n        while(digitalRead(ECHO2) == HIGH);\r\n        long travelTime = micros() - startTime;\r\n \r\n        \/\/Get distance in cm\r\n        int distance2 = travelTime \/ 58;\r\n \r\n        return distance2;\r\n}\r\n\r\nint getCM3() {\r\n        \/\/Send trig pulse\r\n        digitalWrite(TRIG3, HIGH);\r\n        delayMicroseconds(20);\r\n        digitalWrite(TRIG3, LOW);\r\n \r\n        \/\/Wait for echo start\r\n        while(digitalRead(ECHO3) == LOW);\r\n \r\n        \/\/Wait for echo end\r\n        long startTime = micros();\r\n        while(digitalRead(ECHO3) == HIGH);\r\n        long travelTime = micros() - startTime;\r\n \r\n        \/\/Get distance in cm\r\n        int distance3 = travelTime \/ 58;\r\n \r\n        return distance3;\r\n}\r\n\r\n\/**\r\n * @brief findMinDist takes an vector of ranges, and returns the\r\n *        index of the smallest range in the vector\r\n *\r\n * @param ranges\r\n * @return int\r\n *\/\r\nint findMinDist(const std::vector&lt;float&gt;&amp; ranges)\r\n{\r\n    \/\/ *** Task 2: Implement findMinDist logic *** \/\/\r\n    \/\/ TODO: Add logic so that findMinDist returns the correct index.\r\n    int index = 0;\r\n    for (float min_idx = 1; min_idx &lt; ranges.size(); min_idx++)\r\n    {\r\n        if (ranges&#091;min_idx] != 0){\r\n            if (ranges&#091;min_idx] &lt; ranges&#091;index]){\r\n                index = min_idx;\r\n            }\r\n        }\r\n    }\r\n    return index;\r\n    \/\/ HINT: Remember to ignore any ranges that are zero!\r\n}\r\n\r\n\r\nint main(int argc, const char *argv&#091;])\r\n{\r\n    signal(SIGINT, ctrlc);\r\n    signal(SIGTERM, ctrlc);\r\n    \/\/initialize all 3 sensors\r\n    wiringPiSetup();\r\n        pinMode(TRIG, OUTPUT);\r\n        pinMode(ECH, INPUT);\r\n        pinMode(TRIG2, OUTPUT);\r\n        pinMode(ECHO2, INPUT);\r\n        pinMode(TRIG3, OUTPUT);\r\n        pinMode(ECHO3, INPUT);\r\n\r\n        \/\/TRIG pin must start LOW\r\n        digitalWrite(TRIG, LOW);\r\n        digitalWrite(TRIG2, LOW);\r\n        digitalWrite(TRIG3, LOW);\r\n        delay(30);\r\n\r\n    \/\/ Initialize the robot.\r\n    mbot_bridge::MBot robot;\r\n    \/\/ We will store the Lidar scan data in these vectors.\r\n    std::vector&lt;float&gt; ranges;\r\n    std::vector&lt;float&gt; thetas;\r\n\r\n    \/\/ *** Task 1: Adjust these values appropriately ***\r\n\r\n\r\n    \/\/ *** End student code *** \/\/\r\n\r\n    while (true) {\r\n        \/\/ This function gets the Lidar scan data.\r\n        robot.readLidarScan(ranges, thetas);\r\n\r\n        \/\/ Get the distance to the wall.\r\n        float min_idx = findMinDist(ranges);\r\n        float dist_to_wall = ranges&#091;min_idx];\r\n        float angle_to_wall = thetas&#091;min_idx];\r\n        int dist1 = getCM();\r\n        int dist2 = getCM2();\r\n        int dist3 = getCM3();\r\n        \/\/ *** Task 3: Implement the 2D Follow Me controller ***\r\n        \/\/ Hint: Look at your code from follow_1D\r\n        \/\/ TODO: create a shortestdistance variable and iterate through the three sensors and assign the smallest sensor value data to shortestdistance variable, and then compare that variable to to each sensor data to find the sensor that's shortest.\r\n\r\n        int shortestdistance = 1000000; \r\n        if (dist1&lt; shortestdistance){\r\n            shortestdistance = dist1;\r\n        }\r\n        if (dist2&lt; shortestdistance){\r\n            shortestdistance = dist2;\r\n        }\r\n        if (dist3&lt; shortestdistance){\r\n            shortestdistance = dist3;\r\n        }\r\n\r\n        if (shortestdistance &lt; dist_to_wall * 100 + 6.5){ \/\/shortestdistance is in cm while dist_to_wall is in meters.\r\n            cout&lt;&lt; \"dist1: \"&lt;&lt; dist1 &lt;&lt;endl;\r\n            cout&lt;&lt; \"dist2: \"&lt;&lt; dist2 &lt;&lt;endl;\r\n            cout&lt;&lt; \"dist3: \"&lt;&lt; dist3 &lt;&lt;endl;\r\n            cout&lt;&lt; \"dist_to_wall: \"&lt;&lt; dist_to_wall &lt;&lt;endl;\r\n            float setpoint = 30;  \/\/ The goal distance from the wall in meters\r\n            float margin = 5;\r\n            float speed= 0.3;\r\n            if (shortestdistance == dist1){\r\n                cout&lt;&lt;\"shortestdistance: \"&lt;&lt; dist1&lt;&lt; endl;\r\n                angle_to_wall = 0; \r\n                \r\n            }\r\n            else if (shortestdistance == dist2){\r\n                cout&lt;&lt;\"shortestdistance: \"&lt;&lt; dist2&lt;&lt; endl;\r\n                angle_to_wall = 120; \r\n            }\r\n            else if (shortestdistance == dist3){\r\n                cout&lt;&lt;\"shortestdistance: \"&lt;&lt; dist3&lt;&lt; endl;\r\n                angle_to_wall = 240;\r\n            }\r\n            float vx = speed*(cos(angle_to_wall));\r\n            float vy = speed*(sin(angle_to_wall));\r\n            cout &lt;&lt; \"sensor vx \" &lt;&lt; vx &lt;&lt; endl;\r\n            cout &lt;&lt; \"sensor vy \" &lt;&lt; vy &lt;&lt; endl;\r\n            if (shortestdistance &gt; setpoint+ margin) {\r\n            robot.drive(vx, vy, 0);\r\n            }\r\n            else if (shortestdistance &lt; setpoint - margin){\r\n                robot.drive(-vx,-vy,0);\r\n            }\r\n            else {\r\n                robot.drive(0,0,0);\r\n            }\r\n\r\n        }\r\n        else{\r\n            cout&lt;&lt;\"shortestdistance: \"&lt;&lt; dist_to_wall&lt;&lt; endl;\r\n            float setpoint = 0.3;  \/\/ The goal distance from the wall in meters\r\n            float margin = 0.05;\r\n            float speed = 0.3;\r\n            float angle_to_wall = thetas&#091;min_idx];\r\n            float vx = speed*(cos(angle_to_wall));\r\n            float vy = speed*(sin(angle_to_wall));\r\n            cout &lt;&lt; \"lidar vx \" &lt;&lt; vx &lt;&lt; endl;\r\n            cout &lt;&lt; \"lidar vy \" &lt;&lt; vy &lt;&lt; endl;\r\n            if (dist_to_wall &gt; setpoint+ margin) {\r\n                robot.drive(vx, vy, 0);\r\n            }\r\n            else if (dist_to_wall &lt; setpoint - margin){\r\n                robot.drive(-vx,-vy,0);\r\n            }\r\n            else {\r\n                robot.drive(0,0,0);\r\n            }\r\n       \r\n        }         \r\n\r\n\r\n\r\n\r\n\r\n        \/\/ Hint: When you compute the velocity command, you might find the functions\r\n        \/\/ sin(value) and cos(value) helpful!\r\n\r\n        \/\/ *** End Student Code ***\r\n\r\n        if (ctrl_c_pressed) break;\r\n    }\r\n\r\n    \/\/ Stop the robot.\r\n    robot.stop();\r\n    return 0;\r\n}\n<\/code><\/pre>\n\n\n<div class=\"wp-block-post-author\"><div class=\"wp-block-post-author__avatar\"><img alt='' src='https:\/\/secure.gravatar.com\/avatar\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=48&#038;d=mm&#038;r=g' srcset='https:\/\/secure.gravatar.com\/avatar\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=96&#038;d=mm&#038;r=g 2x' class='avatar avatar-48 photo' height='48' width='48' \/><\/div><div class=\"wp-block-post-author__content\"><p class=\"wp-block-post-author__name\">eren<\/p><\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>My partner Lizzie Manabat and I decided to work on the hardware option of the final project. This included taking the project 3 from where I left off, and adding the capabilities&#8230;<\/p>\n","protected":false},"author":15,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"nf_dc_page":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-339","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Final Project Reflection Blog - Hardware - Autonomous Systems<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Final Project Reflection Blog - Hardware - Autonomous Systems\" \/>\n<meta property=\"og:description\" content=\"My partner Lizzie Manabat and I decided to work on the hardware option of the final project. This included taking the project 3 from where I left off, and adding the capabilities...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/\" \/>\n<meta property=\"og:site_name\" content=\"Autonomous Systems\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-14T04:47:36+00:00\" \/>\n<meta name=\"author\" content=\"eren\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"eren\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/\"},\"author\":{\"name\":\"eren\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#\\\/schema\\\/person\\\/878a94464ce27ecc960caaf52b289545\"},\"headline\":\"Final Project Reflection Blog &#8211; Hardware\",\"datePublished\":\"2023-12-14T04:47:36+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/\"},\"wordCount\":335,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#organization\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/\",\"url\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/\",\"name\":\"Final Project Reflection Blog - Hardware - Autonomous Systems\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#website\"},\"datePublished\":\"2023-12-14T04:47:36+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/2023\\\/12\\\/14\\\/final-project-reflection-blog-hardware\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Final Project Reflection Blog &#8211; Hardware\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#website\",\"url\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/\",\"name\":\"AI and Autonomous Systems Class\",\"description\":\"AI, Algorithms, Robotics (HelloRob | Berea College)\",\"publisher\":{\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#organization\",\"name\":\"Berea College Computer Science\",\"url\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/mbot-omni.jpg\",\"contentUrl\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/wp-content\\\/uploads\\\/2023\\\/08\\\/mbot-omni.jpg\",\"width\":603,\"height\":751,\"caption\":\"Berea College Computer Science\"},\"image\":{\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/#\\\/schema\\\/person\\\/878a94464ce27ecc960caaf52b289545\",\"name\":\"eren\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=96&d=mm&r=g\",\"caption\":\"eren\"},\"url\":\"https:\\\/\\\/ai.seejazzwork.com\\\/autobots\\\/blog\\\/author\\\/eren\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Final Project Reflection Blog - Hardware - Autonomous Systems","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/","og_locale":"en_US","og_type":"article","og_title":"Final Project Reflection Blog - Hardware - Autonomous Systems","og_description":"My partner Lizzie Manabat and I decided to work on the hardware option of the final project. This included taking the project 3 from where I left off, and adding the capabilities...","og_url":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/","og_site_name":"Autonomous Systems","article_published_time":"2023-12-14T04:47:36+00:00","author":"eren","twitter_card":"summary_large_image","twitter_misc":{"Written by":"eren","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/#article","isPartOf":{"@id":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/"},"author":{"name":"eren","@id":"https:\/\/ai.seejazzwork.com\/autobots\/#\/schema\/person\/878a94464ce27ecc960caaf52b289545"},"headline":"Final Project Reflection Blog &#8211; Hardware","datePublished":"2023-12-14T04:47:36+00:00","mainEntityOfPage":{"@id":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/"},"wordCount":335,"commentCount":0,"publisher":{"@id":"https:\/\/ai.seejazzwork.com\/autobots\/#organization"},"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/","url":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/","name":"Final Project Reflection Blog - Hardware - Autonomous Systems","isPartOf":{"@id":"https:\/\/ai.seejazzwork.com\/autobots\/#website"},"datePublished":"2023-12-14T04:47:36+00:00","breadcrumb":{"@id":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/2023\/12\/14\/final-project-reflection-blog-hardware\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ai.seejazzwork.com\/autobots\/"},{"@type":"ListItem","position":2,"name":"Final Project Reflection Blog &#8211; Hardware"}]},{"@type":"WebSite","@id":"https:\/\/ai.seejazzwork.com\/autobots\/#website","url":"https:\/\/ai.seejazzwork.com\/autobots\/","name":"AI and Autonomous Systems Class","description":"AI, Algorithms, Robotics (HelloRob | Berea College)","publisher":{"@id":"https:\/\/ai.seejazzwork.com\/autobots\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ai.seejazzwork.com\/autobots\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ai.seejazzwork.com\/autobots\/#organization","name":"Berea College Computer Science","url":"https:\/\/ai.seejazzwork.com\/autobots\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ai.seejazzwork.com\/autobots\/#\/schema\/logo\/image\/","url":"https:\/\/ai.seejazzwork.com\/autobots\/wp-content\/uploads\/2023\/08\/mbot-omni.jpg","contentUrl":"https:\/\/ai.seejazzwork.com\/autobots\/wp-content\/uploads\/2023\/08\/mbot-omni.jpg","width":603,"height":751,"caption":"Berea College Computer Science"},"image":{"@id":"https:\/\/ai.seejazzwork.com\/autobots\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/ai.seejazzwork.com\/autobots\/#\/schema\/person\/878a94464ce27ecc960caaf52b289545","name":"eren","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f1906eecd5c7972e755962416206e321bdeddea12285c3a6b853fff096bac4ed?s=96&d=mm&r=g","caption":"eren"},"url":"https:\/\/ai.seejazzwork.com\/autobots\/blog\/author\/eren\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/posts\/339","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/users\/15"}],"replies":[{"embeddable":true,"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/comments?post=339"}],"version-history":[{"count":1,"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/posts\/339\/revisions"}],"predecessor-version":[{"id":342,"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/posts\/339\/revisions\/342"}],"wp:attachment":[{"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/media?parent=339"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/categories?post=339"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ai.seejazzwork.com\/autobots\/wp-json\/wp\/v2\/tags?post=339"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}