{"id":231,"date":"2022-03-07T09:45:03","date_gmt":"2022-03-07T13:45:03","guid":{"rendered":"https:\/\/seniordesign.digitalscholar.rochester.edu\/spring2022\/?p=231"},"modified":"2022-09-12T16:57:40","modified_gmt":"2022-09-12T20:57:40","slug":"fritz-the-ball-throwing-robot","status":"publish","type":"post","link":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/","title":{"rendered":"Fritz &#8211; The Ball Throwing Robot"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Team<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Aayman A Abdellatif<\/li><li>Samuel B Hauser<\/li><li>Frederick G Howard<\/li><li>William T Phillips<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Mentors<\/h2>\n\n\n\n<p>Professors Jack Mottley and Daniel Phinney<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Abstract<\/h2>\n\n\n\n<p>The purpose of this project is to design and prototype a semi-autonomous robot that detects a moving target, makes all the necessary calculations, and shoots a small foam ball. This was done by collecting visual target information via an Arduino camera and sending the data as UART commands from a Raspberry Pi 4 to a PIC32MX795F512L. The PIC32 drives DC brushless motors and servos that manipulate mechanisms responsible for yaw\/pitch angles, ball feeding, and ball launching. When the right conditions are met and calculations made, the ball is launched at the target.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Construction Design<\/h2>\n\n\n\n<p>To achieve the main goal of the project, construction is categorized into three parts &#8211; Architectural design, launcher design, and electronics design. Such categorization allows us to focus on each area of the project to ensure the intended operation while also making the testing and debugging process significantly easier\/more convenient.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/launch.png\" alt=\"\" class=\"wp-image-95412\" width=\"281\" height=\"173\" srcset=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/launch.png 401w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/launch-300x185.png 300w\" sizes=\"auto, (max-width: 281px) 100vw, 281px\" \/><figcaption>Structure Categorization <\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Architecture<\/h3>\n\n\n\n<p>One of the initial concerns when beginning the construction process was how the electrical components would be attached to the physical hardware of the launcher. It was decided that by designating two areas &#8211; one for the electrical components and one for the launcher &#8211; the electronics would not be compromised by the physical hardware of the launcher while still being close enough to assemble all the necessary wiring.\u00a0 Thus, two platforms &#8211; Upper and Lower, each consisting of two steel sheets &#8211; are joined together vertically using metal legs. This creates an interior area in between the two platforms where all electrical components &#8211; the PIC32 board, Raspberry Pi, and H-bridges &#8211; are bolted onto the lower platform with the camera attached to the side of the upper platform.\u00a0<\/p>\n\n\n\n<p>The upper platform serves as the foundation of the launcher. All components and attachments regarding launcher design are bolted onto the lazy Suzan that sits on this platform.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"453\" height=\"235\" src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/struct.png\" alt=\"\" class=\"wp-image-95402\" srcset=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/struct.png 453w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/struct-300x156.png 300w\" sizes=\"auto, (max-width: 453px) 100vw, 453px\" \/><figcaption>Platform Composition<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Launcher<\/h3>\n\n\n\n<p>There are two main constraints in the design of the launcher: how to manipulate pivoting\/swiveling motion and how to feed in the small foam balls. Due to functional restraints with the ordered camera lens, the Arduino camera is limited to a 90\u00b0 field of view (45\u00b0 on either side of each axis). As such, it was not necessary to design a swivel that rotates the entire launcher a full 360\u00b0, as it exceeds the working FOV. This allowed for a lot of leniencies when applying the concept of a bike chain pulley as our swivel operation. Using basic nails, a chain is attached to the circumference of a wooden disc of 22 cm diameter and 2 cm thickness. The nails are strategically placed so that when the chain is driven by a motor, there is no interference in the first 90\u00b0 range motion. This contraption is bolted down onto a lazy Suzan and sits on the top platform.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1920\" style=\"aspect-ratio: 1080 \/ 1920;\" width=\"1080\" controls src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/chaindemo.mp4\"><\/video><figcaption>Demonstration of Yaw using bike chain<\/figcaption><\/figure>\n\n\n\n<p>Regarding the angle pivoting, the initial goal was to align the capabilities of the launcher to that of the Arduino camera\u2019s 45\u00b0 vertical FOV (+y-axis). However, initial testing revealed that the physical size of the construction materials and device interfered with its launching operation. Even after altering the physical size of the materials, the imposition of a pivot of 20\u00b0 up and down was adopted into the design. This motion is driven by a low-power servo attached to the base of the launcher.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/seniordesign.digitalscholar.rochester.edu\/spring2022\/wp-content\/uploads\/2022\/04\/IMG_2829-edited.jpg\" alt=\"\" class=\"wp-image-936\" width=\"188\" height=\"345\"\/><\/figure><\/div>\n\n\n\n<p>The second constraint revolves around how to feed the balls into the launcher. Ideally, the ball would be fed automatically through a geared feeder, similar to that of our reverse-engineered commercial launcher. However, this concept was scrapped in the interim as there were too many limitations with the physical materials when it came to device testing. As a result, we experimented with the concept of a scissor lift, where the two spinning motors close in on a ball at rest. Discussions with the Professors, however, resulted in the conclusion that it was best to have the motors be stiffly attached to the launcher. As a result, we settled on the idea of manually feeding the ball into the gap between the two motors, using gravity as an external force to drive momentum. As such, we attached two long, curved metal bars to guide the ball from the top of the launcher down into the spinning motors.<\/p>\n\n\n\n<p>However, as the design process came to a close, and testing concluded, we decided to revert to our original design of automatically feeding the ball into the launcher using a low-power servo motor at the top of the exoskeleton. Using two axles, the servo spins with enough force to propel the ball &#8211; resting on the curved bars &#8211; into the gap between the two wheels. Testing proved this to be sufficient.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-1007x1024.jpg\" alt=\"\" class=\"wp-image-95212\" width=\"287\" height=\"292\" srcset=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-1007x1024.jpg 1007w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-295x300.jpg 295w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-768x781.jpg 768w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-1510x1536.jpg 1510w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-2014x2048.jpg 2014w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-1200x1220.jpg 1200w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279138929_696698285084269_4976913997262525722_n-1980x2014.jpg 1980w\" sizes=\"auto, (max-width: 287px) 100vw, 287px\" \/><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Troubleshooting:<\/h4>\n\n\n\n<p>Overall launcher design was constantly tweaked as more and more complications arose throughout its construction. One such complication was the lack of stiffness in the motors. Initially, each of the two motors that drive the wheels has a gearbox. However, to consistently drive the motors at maximum speeds, the gearboxes were removed, resulting in an unforeseen consequence where the motors, and the wheels being spun, violently vibrate and detach from the launching platform. Furthermore, without a gearbox, the motors lack torque, making it very easy for other forces, such as gravity, to act upon the system, drastically reducing spin-speed when the pivot is at its maximum inversion. For the first complication, we were left with two choices &#8211; either reattached the gearboxes, reducing overall speed, and thus, distance, or make the system stiffer to discourage detachment. We opted for the latter by adding brackets to the exoskeleton as well as plastic separators and a series of metal bars, serving to add weight to the system. For the second complication, repositioning the motors to be bolted down from the bottom rather than the top as well ramping the pivot (using delays) instead of having it switch to angles aggressively proved to be sufficient in reducing the impacts of external forces on the system.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Software Design<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Localization &amp; Targeting<\/h3>\n\n\n\n<p>When discussing project design, the team decided that it would be best to have certain parameters pre-defined\/constant &#8211; Focal Length and target size. Using these parameters, we can deduce depth using similar triangles and ray optics by employing the OpenCV library<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">AruCo Board<\/h4>\n\n\n\n<p>Employing the use of an AruCo board as our &#8220;target&#8221; allows us to easily localize a target in a fixed frame from real-time visual data. Since the size of the board is constant (pre-defined), we can estimate the pose of the camera with respect to the four corners of the board, thus tracking the overall position of the target regardless of motion. Thus, by using built-in methods of the OpenCV library to calculate the four corners, we can continuously target and track the center of the AruCo board relative to its size. <\/p>\n\n\n\n<figure class=\"wp-block-gallery aligncenter has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1344\" height=\"1792\" data-id=\"96482\" src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/278990138_303976831753578_5437139687616025777_n-1-edited.jpg\" alt=\"\" class=\"wp-image-96482\" srcset=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/278990138_303976831753578_5437139687616025777_n-1-edited.jpg 1344w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/278990138_303976831753578_5437139687616025777_n-1-edited-225x300.jpg 225w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/278990138_303976831753578_5437139687616025777_n-1-edited-768x1024.jpg 768w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/278990138_303976831753578_5437139687616025777_n-1-edited-1152x1536.jpg 1152w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/278990138_303976831753578_5437139687616025777_n-1-edited-1200x1600.jpg 1200w\" sizes=\"auto, (max-width: 1344px) 100vw, 1344px\" \/><figcaption>Arduino Camera<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" data-id=\"96442\" src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279101809_355264329770675_8781273895773589517_n-1.jpg\" alt=\"\" class=\"wp-image-96442\" srcset=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279101809_355264329770675_8781273895773589517_n-1.jpg 300w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/279101809_355264329770675_8781273895773589517_n-1-150x150.jpg 150w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><figcaption>AruCo Board<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p>Below is an example of the code, written in Python, using the focal length of a MacBook Pro camera:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#!\/usr\/bin\/env python\n# coding: utf-8\n\n\nimport numpy as np\nimport cv2\nimport cv2.aruco as aruco\nimport math\n#side of square is currently 8.25 inches or 20.955 cm\nf = 5 #focal length of mac = 5 cm\nD = 20.955\n\n\ndef lengthCalc(lengthOfSide, topLeftCorner, topRightCorner, bottomLeftCorner, bottomRightCorner):\n    lengthTop = ((topRightCorner&#91;0]-topLeftCorner&#91;0])**2+(topRightCorner&#91;1]-topLeftCorner&#91;1])**2)**.5\n    lengthBottom = ((bottomRightCorner&#91;0]-bottomLeftCorner&#91;0])**2+(bottomRightCorner&#91;1]-bottomLeftCorner&#91;1])**2)**.5\n    conversionFactorTop = lengthTop \/ lengthOfSide\n    conversionFactorBottom = lengthBottom \/ lengthOfSide\n    print(\"Top length: \" + str(lengthTop))\n    print(\"Bottom length: \" + str(lengthBottom))\n    print(\"top = \" + str(conversionFactorTop) + \"pixel\/cm\")\n    print(\"bottom = \" + str(conversionFactorBottom) + \"pixel\/cm\")\n    return (lengthTop ,conversionFactorBottom)\n\n\n\ndef depthCalc(f, d, D):\n    Z = 2*D*(f\/d)\n    ##print(\"Depth: \" + str(Z*3.28) + \"ft\")\n    return Z\n\n\ndef centerBox(topLeft, topRight, bottomLeft, bottomRight):\n    y=(max(topLeft&#91;0],topRight&#91;0],bottomLeft&#91;0],bottomRight&#91;0])+min(topLeft&#91;0],topRight&#91;0],bottomLeft&#91;0],bottomRight&#91;0]))\/\/2\n    x=(max(topLeft&#91;1],topRight&#91;1],bottomLeft&#91;1],bottomRight&#91;1])+min(topLeft&#91;1],topRight&#91;1],bottomLeft&#91;1],bottomRight&#91;1]))\/\/2\n    return (int(y),int(x))\n\ndef calculatePitch(distance,height,velocity):\n    g=9.8\n    valueUnderSqrt=-(distance**2)*((g**2)*(distance**2)+(2*g*velocity**2*height)-(velocity**4))\n    numerator = velocity**2*distance-math.sqrt(varrible)\n    argument=varrible2\/(g*distance**2)\n    return math.atan(argument)\n\ndictTag = cv2.aruco.DICT_ARUCO_ORIGINAL\n\ntag = np.zeros((300, 300, 1), dtype=\"uint8\")\nID = 24\n\narucoDict = cv2.aruco.Dictionary_get(cv2.aruco.DICT_ARUCO_ORIGINAL)\ncv2.aruco.drawMarker(arucoDict, ID, 300, tag, 1)\n\ncv2.imwrite('TagTest.png',tag) #creates tag, stores in tagtest\ncap = cv2.VideoCapture(0)  # Get the camera source\n\n\nwhile True:\n    ret, frame = cap.read()\n    if not ret:\n        print(\"failed to grab frame\")\n        break\n    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # Change grayscale\n    aruco_dict = aruco.Dictionary_get(cv2.aruco.DICT_ARUCO_ORIGINAL)  # Use 5x5 dictionary to find markers\n    parameters = aruco.DetectorParameters_create()  # Marker detection parameters\n    corners, ids, rejected_img_points = aruco.detectMarkers(gray, aruco_dict,parameters=parameters)\n    centerX, centerY, other = frame.shape\n    size = 1\n    center = (centerY\/\/2, centerX\/\/2)\n    if type(ids) != type(None) and len(ids) &lt;= 1:\n#         print(corners)\n#         print()\n#         print(corners&#91;0]&#91;0]&#91;0]) #top left corner\n        d = lengthCalc(D, corners&#91;0]&#91;0]&#91;0], corners&#91;0]&#91;0]&#91;1], corners&#91;0]&#91;0]&#91;2], corners&#91;0]&#91;0]&#91;3])\n        distance=depthCalc(f, d&#91;0], D)\n        aruco.drawDetectedMarkers(frame, corners)  # Draw A square around the markers\n        point = centerBox(corners&#91;0]&#91;0]&#91;0], corners&#91;0]&#91;0]&#91;1], corners&#91;0]&#91;0]&#91;2], corners&#91;0]&#91;0]&#91;3])\n        print(\"Y,X: \" + str(point))\n        cv2.circle(frame,point, size, (0,0,255), 5) #center of box\n        offsetFromCenter = (point&#91;0] - center&#91;0], point&#91;1] - center&#91;1]) #how far away\n        #print(offsetFromCenter)\n        #velocity=10\n        #theta=calculatePitch(distance,centerY\/d&#91;1],velocity)\n        pitch =(point&#91;1] - center&#91;1])\/center&#91;1] * 45\n        yaw =(point&#91;0] - center&#91;0])\/center&#91;0] * 45\n        print(str(yaw)+\",\"+str(pitch)+\",0*\")\n        #print(offsetFromCenter)\n    centerX, centerY, other = frame.shape\n    size = 1\n#     cv2.circle(frame,(centerY\/\/2,centerX\/\/2), size, (0,0,255), 5) #center of frame\n\n\n    cv2.imshow(\"test\", frame)\n    cv2.waitKey(1)\n\ncap.release()\ncv2.destroyAllWindows()<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\">Pivot (Pitch) &amp; Swivel (Yaw)<\/h4>\n\n\n\n<p>Using the default limits of the Arduino camera (45\u00b0 in either direction), the maximum pitch angle (\u03b2) is calculated using trigonometric ratios with the distance to the target (d) and height of the target off the ground (h). For yaw, angle (<em>\u03b3<\/em>) is calculated by tracking the total range of width motion (a) with distance (d) using similar triangles. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"256\" src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/pivot-1024x256.png\" alt=\"\" class=\"wp-image-95382\" srcset=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/pivot-1024x256.png 1024w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/pivot-300x75.png 300w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/pivot-768x192.png 768w, https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/pivot.png 1088w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Yaw\/Pitch Angle Calculation<\/figcaption><\/figure><\/div>\n\n\n\n<p>From these calculations, data packets are sent using three parameters as strings:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>(&#8220;X&#8221;, &#8220;Y&#8221;, &#8220;Z&#8221;)<\/em><\/p>\n\n\n\n<p>Where X and Y are the angles of Yaw &amp; Pitch, respectively, calculated from target localization, and Z is a binary that commands the launcher (0 for Standby; 1 for Shoot).<\/p>\n\n\n\n<p>Data packets with pitch and yaw commands are generated by the Raspberry Pi and sent to the PIC32 board via the UART communication protocol. To compensate for the occasional issue of missed packets, identical packets are continuously sent.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Driving Motors &amp; Servos<\/h3>\n\n\n\n<p>The project consists of two types of motors &#8211; three DC Brushless motors and two servos. The servos are employed in the pitch and ball feeding mechanisms while the DC motors drive the swivel and actual ball launching mechanisms.<\/p>\n\n\n\n<p>Servos are connected through a special servo board that generates PWM signals based on UART commands from the Raspberry Pi to the PIC32 board.<\/p>\n\n\n\n<p>The DC motors are connected to the PIC32 through an H-Bridge and are always driven at maximum speed. However, the DC motor responsible for the yaw motion operates with a \u00b1 2\u00b0 bit-band. This, along with the use of a quadrature encoder keeps track of the state\/position of the motor as it rotates the entire launcher back and forth. The two other DC motors are responsible for ball launching and are &#8220;bang-bang&#8221; controlled, meaning they are driven at maximum speed until the supplied power is cut or are manually stopped via commands.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Launcher Demonstration<\/h3>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video height=\"352\" style=\"aspect-ratio: 640 \/ 352;\" width=\"640\" controls src=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/04\/launcherdemo.mp4\"><\/video><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusions<\/h2>\n\n\n\n<p>This project allowed us to holistically combine several experiences across four years of the electrical &amp; computer engineering major to create a semi-autonomous robot that tracks a target, makes all the proper calculations, and aims\/shoots a ball. From image processing in ECE 247 to microcontroller communication in ECE 216, we were able to combine so much knowledge in a year to create something that not only meets expectations but allowed us the opportunity to refresh on certain material and become more well-rounded engineers.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A launcher that locks on to a pre-defined target and fires a ball.<\/p>\n","protected":false},"author":6242,"featured_media":104452,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[116],"tags":[],"coauthors":[8612],"class_list":["post-231","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ece-archive"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Fritz - The Ball Throwing Robot - Senior Design Day<\/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:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Fritz - The Ball Throwing Robot - Senior Design Day\" \/>\n<meta property=\"og:description\" content=\"A launcher that locks on to a pre-defined target and fires a ball.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/\" \/>\n<meta property=\"og:site_name\" content=\"Senior Design Day\" \/>\n<meta property=\"article:published_time\" content=\"2022-03-07T13:45:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-12T20:57:40+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/03\/image-8.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/\"},\"author\":{\"name\":\"admin\",\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/#\\\/schema\\\/person\\\/351018fbcf84ed8cac6d8072ba5b347c\"},\"headline\":\"Fritz &#8211; The Ball Throwing Robot\",\"datePublished\":\"2022-03-07T13:45:03+00:00\",\"dateModified\":\"2022-09-12T20:57:40+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/\"},\"wordCount\":1576,\"image\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/image-8.jpg\",\"articleSection\":[\"ECE Archive\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/\",\"url\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/\",\"name\":\"Fritz - The Ball Throwing Robot - Senior Design Day\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/image-8.jpg\",\"datePublished\":\"2022-03-07T13:45:03+00:00\",\"dateModified\":\"2022-09-12T20:57:40+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/#\\\/schema\\\/person\\\/351018fbcf84ed8cac6d8072ba5b347c\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/image-8.jpg\",\"contentUrl\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/wp-content\\\/uploads\\\/2022\\\/03\\\/image-8.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/fritz-the-ball-throwing-robot\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Fritz &#8211; The Ball Throwing Robot\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/#website\",\"url\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/\",\"name\":\"Senior Design Day\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/#\\\/schema\\\/person\\\/351018fbcf84ed8cac6d8072ba5b347c\",\"name\":\"admin\",\"url\":\"https:\\\/\\\/www.hajim.rochester.edu\\\/senior-design-day\\\/author\\\/seniordesign\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Fritz - The Ball Throwing Robot - Senior Design Day","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:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/","og_locale":"en_US","og_type":"article","og_title":"Fritz - The Ball Throwing Robot - Senior Design Day","og_description":"A launcher that locks on to a pre-defined target and fires a ball.","og_url":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/","og_site_name":"Senior Design Day","article_published_time":"2022-03-07T13:45:03+00:00","article_modified_time":"2022-09-12T20:57:40+00:00","og_image":[{"url":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/03\/image-8.jpg","width":150,"height":150,"type":"image\/jpeg"}],"author":"admin","twitter_card":"summary_large_image","twitter_misc":{"Written by":"admin","Est. reading time":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/#article","isPartOf":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/"},"author":{"name":"admin","@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/#\/schema\/person\/351018fbcf84ed8cac6d8072ba5b347c"},"headline":"Fritz &#8211; The Ball Throwing Robot","datePublished":"2022-03-07T13:45:03+00:00","dateModified":"2022-09-12T20:57:40+00:00","mainEntityOfPage":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/"},"wordCount":1576,"image":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/03\/image-8.jpg","articleSection":["ECE Archive"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/","url":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/","name":"Fritz - The Ball Throwing Robot - Senior Design Day","isPartOf":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/#primaryimage"},"image":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/#primaryimage"},"thumbnailUrl":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/03\/image-8.jpg","datePublished":"2022-03-07T13:45:03+00:00","dateModified":"2022-09-12T20:57:40+00:00","author":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/#\/schema\/person\/351018fbcf84ed8cac6d8072ba5b347c"},"breadcrumb":{"@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/#primaryimage","url":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/03\/image-8.jpg","contentUrl":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-content\/uploads\/2022\/03\/image-8.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/fritz-the-ball-throwing-robot\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/"},{"@type":"ListItem","position":2,"name":"Fritz &#8211; The Ball Throwing Robot"}]},{"@type":"WebSite","@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/#website","url":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/","name":"Senior Design Day","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/#\/schema\/person\/351018fbcf84ed8cac6d8072ba5b347c","name":"admin","url":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/author\/seniordesign\/"}]}},"_links":{"self":[{"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/posts\/231","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/users\/6242"}],"replies":[{"embeddable":true,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/comments?post=231"}],"version-history":[{"count":20,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/posts\/231\/revisions"}],"predecessor-version":[{"id":104632,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/posts\/231\/revisions\/104632"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/media\/104452"}],"wp:attachment":[{"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/media?parent=231"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/categories?post=231"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/tags?post=231"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.hajim.rochester.edu\/senior-design-day\/wp-json\/wp\/v2\/coauthors?post=231"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}