{"id":3191,"date":"2022-12-11T23:34:59","date_gmt":"2022-12-12T04:34:59","guid":{"rendered":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/?p=3191"},"modified":"2022-12-11T23:35:00","modified_gmt":"2022-12-12T04:35:00","slug":"dinner-partner-final-report-matt-karen","status":"publish","type":"post","link":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/2022\/12\/11\/dinner-partner-final-report-matt-karen\/","title":{"rendered":"Dinner Partner &#8211; Final Report &#8211; Matt &amp; Karen"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1-1024x769.jpg\" alt=\"\" class=\"wp-image-3211\" width=\"619\" height=\"464\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1-1024x769.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1-768x577.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1-1536x1154.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1-973x731.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1-508x382.jpg 508w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/Copy-of-P1060424-1.jpg 1800w\" sizes=\"(max-width: 619px) 100vw, 619px\" \/><\/figure>\n\n\n\n<h2>Project Narrative <\/h2>\n\n\n\n<p>Our performance consists of a person who used their knowledge in robotics to create a structure that fills a void from loneliness and their inability to sit alone with their own thoughts as they share a meal together. The objective of our performance was for the audience to see how the performer is occupied by and content with their fictitious partner. Their reliance on each other builds sympathy for the performer as the audience is able to recognize how lonely they are and how the performer would rather eat with an invisible person than eating alone. We were trying to get the audience to reflect on their own lives, and what would they do if they were truly alone. Would they be able to sit with their own thoughts? Or are distractions such as TV, social media, or family members essential to occupy them during an otherwise lonely experience? People who struggle with mental health or stress may find distractions comforting in lonely times and it makes the audience question what else is going on in the performer&#8217;s life that they cannot see. <\/p>\n\n\n\n<h2>Relationship to Course Themes<\/h2>\n\n\n\n<p>Our project aimed to connect with the course themes of using autonomy in a narrative medium and exploring the relationship between a human and robot in a hybrid performance. In terms of autonomy, we programmed the behavior of the fork and knife to be completely autonomous. Based off of a random value, the fork and knife moved, just the fork moved or just the knife moved at a constant interval. This autonomous movement allows the show to go on and eliminate downtime between elements that the performer actuates. The robot lifting the chalice and rotating the Lazy Suzan were all actuated by foot pedals that the performer would press under the tablecloth. This created a sense of mystery as it was not always clear as to what was automated and what was not. <\/p>\n\n\n\n<p>The robot and the human performer interacted by &#8216;passing food&#8217; via the Lazy Susan, &#8220;Cheers\u201ding each other&#8217;s chalice and by the performer smiling to the invisible person across the table showing the comfort that the robot brought to them. <\/p>\n\n\n\n<p>By using motors and the clear acrylic as part of the illusion, we aimed to convert simple robotic movements into meaningful personifications of using utensils and drinking out of a chalice. <\/p>\n\n\n\n<h2>Outcomes<\/h2>\n\n\n\n<p><strong>Mechanical Design and Assembly<\/strong>:<\/p>\n\n\n\n<p>To create illusion by hiding the electrical components required to create our robot, we designed a false tabletop that everything sat below. Once we determined which table we were using for the performance, we created a CAD model assembly of the entire tabletop and Lazy Susan. This was effective in helping us visualize the scene and allowed us to catch mistakes in our design before fabricating. Various geometric and trigonometric calculations were required to optimize the size of the cut outs for the acrylic arm attachments. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"562\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1024x562.jpg\" alt=\"\" class=\"wp-image-3192\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1024x562.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-300x165.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-768x422.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1536x843.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-973x534.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-508x279.jpg 508w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image.jpg 1647w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Final CAD assembly of False Tabletop and Lazy Susan<\/figcaption><\/figure>\n\n\n\n<p>We laser cut the entire assembly, excluding the Lazy Susan, out of 6mm plywood, and assembled with wood glue. This was effective in making our tabletop sturdy enough to support the food and decorations we wanted to place on top for the performance. <\/p>\n\n\n\n<p>The chucks that held the fork and knife were created and 3D printed to have a tight fit to the irregular geometry of the fork and knife ends. This worked well as we did not need to glue the ends of the utensils inside of the chuck as the tolerance was small enough to hold them in with friction. The chalice holder was designed with greater tolerances, which allowed the chalice to actually tip at the top arc of its motion. This was an unintended consequence of the looser fit, but the outcome looked more realistic and further animated the robotic behavior. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"256\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1024x256.png\" alt=\"\" class=\"wp-image-3213\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1024x256.png 1024w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-300x75.png 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-768x192.png 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-973x243.png 973w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-508x127.png 508w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image.png 1036w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>From left to right: Knife Chuck, Fork Chuck and Chalice Holder CAD images, all 3D printed<\/figcaption><\/figure>\n\n\n\n<p><strong>Electrical Design and Control System:<\/strong><\/p>\n\n\n\n<p>We used a RaspberryPi Pico as our microcontroller to control the motors. We used two DC gear motors for moving the fork and knife, Matt had a strong Worm Gear motor from a previous project that we reused for lifting the glass, and we used a DC stepper motor for turning the Lazy Susan. The pico used motor drivers in order to control the speed and direction of the motors&#8217; rotations, as well as how long they rotated (or how many steps in the case of the stepper motor). The code randomly chooses whether to move the fork, knife, or both. It moves the utensil(s) back and forth across the plate a few times, then pauses for a few seconds in a loop. Two foot pedals act as switches in order to trigger movement from the glass or the Lazy Susan. This movement is pre-programmed, and the pedals act as a switch in order to trigger the movement. One foot pedal causes the glass to be raised, as if someone is drinking from it, while the other foot pedal causes the Lazy Susan to turn half of a rotation. A 12V and 5V wall jack were used to power the motors and the pico.<\/p>\n\n\n\n<p><strong>Performance:<\/strong><\/p>\n\n\n\n<p>To set the stage, we used a tablecloth to cover the false tabletop. This hid everything and was effective in polishing the final look of our project. Many audience members did not even see the foot pedals under the table. The table was set with plates, napkins, salt &amp; pepper, candles and real food that the performer was eating\/ drinking during the performance. This, in addition to performing without speaking to the robot, upheld the emersion into the scene.<\/p>\n\n\n\n<p>During the performance, there were no unexpected errors or problems. The robot ran exactly as programmed and the robot held up for the entire performance. We believe that the level of polish our assembly helped convey the messages we were trying to get across. While it was quite obvious to many audience members that the performer was lonely, the idea of not being able to sit with our thoughts alone did not get across until it was explained. We think that if we were to have more time, we could better convey this point my making the robot break mid performance, and the performer goes crazy trying to fix it or gets angry because he cannot handle not having his partner while he eats. While it was difficult to stay in character for the full performance, it was rewarding to see people&#8217;s reactions to our performance and we were happy that people enjoyed the show. <\/p>\n\n\n\n<h2>Performance Video<\/h2>\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=\"Dinner Partner\" width=\"620\" height=\"349\" src=\"https:\/\/www.youtube.com\/embed\/Og-IUdlkpWo?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><figcaption>Video of Performance and each component of our robot<\/figcaption><\/figure>\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=\"Performance Video 2\" width=\"620\" height=\"349\" src=\"https:\/\/www.youtube.com\/embed\/hbo6WskFE2I?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe>\n<\/div><figcaption>Another video shot by Professor Garth Zeglin of our Performance <\/figcaption><\/figure>\n\n\n\n<h2>Citations<\/h2>\n\n\n\n<p>Example code from the  Creative Kinetic Systems website was used as a starting point for our code: <a rel=\"noreferrer noopener\" href=\"https:\/\/courses.ideate.cmu.edu\/16-223\/f2022\/text\/code\/index.html\" target=\"_blank\">https:\/\/courses.ideate.cmu.edu\/16-223\/f2022\/text\/code\/index.html<\/a><\/p>\n\n\n\n<p>The Lazy Susan and the associated CAD files were created by Professor Garth Zeglin<\/p>\n\n\n\n<h2>Source Code<\/h2>\n\n\n<pre class=\"brush: python; title: ; notranslate\" title=\"\">\n# DRV8833 carrier board: https:\/\/www.pololu.com\/product\/2130\n\n################################################################\n# CircuitPython module documentation:\n# time    https:\/\/circuitpython.readthedocs.io\/en\/latest\/shared-bindings\/time\/index.html\n# math    https:\/\/circuitpython.readthedocs.io\/en\/latest\/shared-bindings\/math\/index.html\n# board   https:\/\/circuitpython.readthedocs.io\/en\/latest\/shared-bindings\/board\/index.html\n# pwmio   https:\/\/circuitpython.readthedocs.io\/en\/latest\/shared-bindings\/pwmio\/index.html\n\n################################################################################\n# print a banner as reminder of what code is loaded\nprint(&quot;Starting script.&quot;)\n\n# load standard Python modules\nimport math, time\n\n# load the CircuitPython hardware definition module for pin definitions\nimport board\n\n# load the CircuitPython pulse-width-modulation module for driving hardware\nimport pwmio\n\nimport time\nfrom digitalio import DigitalInOut, Direction, Pull\nimport digitalio\nimport random as r\n\n#--------------------------------------------------------------------------------\n# Class to represent a single dual H-bridge driver.\n\nclass DRV8833():\n    def __init__(self, AIN1=board.GP18, AIN2=board.GP19, BIN2=board.GP20, BIN1=board.GP21, pwm_rate=20000):\n        # Create a pair of PWMOut objects for each motor channel.\n        self.ain1 = pwmio.PWMOut(AIN1, duty_cycle=0, frequency=pwm_rate)\n        self.ain2 = pwmio.PWMOut(AIN2, duty_cycle=0, frequency=pwm_rate)\n\n        self.bin1 = pwmio.PWMOut(BIN1, duty_cycle=0, frequency=pwm_rate)\n        self.bin2 = pwmio.PWMOut(BIN2, duty_cycle=0, frequency=pwm_rate)\n\n    def write(self, channel, rate):\n        &quot;&quot;&quot;Set the speed and direction on a single motor channel.\n\n        :param channel:  0 for motor A, 1 for motor B\n        :param rate: modulation value between -1.0 and 1.0, full reverse to full forward.&quot;&quot;&quot;\n\n        # convert the rate into a 16-bit fixed point integer\n        pwm = min(max(int(2**16 * abs(rate)), 0), 65535)\n\n        if channel == 0:\n            if rate &lt; 0:\n                self.ain1.duty_cycle = pwm\n                self.ain2.duty_cycle = 0\n            else:\n                self.ain1.duty_cycle = 0\n                self.ain2.duty_cycle = pwm\n        else:\n            if rate &lt; 0:\n                self.bin1.duty_cycle = pwm\n                self.bin2.duty_cycle = 0\n            else:\n                self.bin1.duty_cycle = 0\n                self.bin2.duty_cycle = pwm\n\n\n#--------------------------------------------------------------------------------\n# Create an object to represent a dual motor driver.\nprint(&quot;Creating driver object.&quot;)\ndriver = DRV8833()\n\n\nclass A4988:\n    def __init__(self, DIR=board.GP16, STEP=board.GP17):\n        &quot;&quot;&quot;This class represents an A4988 stepper motor driver.  It uses two output pins\n        for direction and step control signals.&quot;&quot;&quot;\n\n        self._dir  = digitalio.DigitalInOut(DIR)\n        self._step = digitalio.DigitalInOut(STEP)\n\n        self._dir.direction  = digitalio.Direction.OUTPUT\n        self._step.direction = digitalio.Direction.OUTPUT\n\n        self._dir.value = False\n        self._step.value = False\n\n    def step(self, forward=True):\n        &quot;&quot;&quot;Emit one step pulse, with an optional direction flag.&quot;&quot;&quot;\n        self._dir.value = forward\n\n        # Create a short pulse on the step pin.  Note that CircuitPython is slow\n        # enough that normal execution delay is sufficient without actually\n        # sleeping.\n        self._step.value = True\n        # time.sleep(1e-6)\n        self._step.value = False\n\n    def move_sync(self, steps, speed=1000.0):\n        &quot;&quot;&quot;Move the stepper motor the signed number of steps forward or backward at the\n        speed specified in steps per second.  N.B. this function will not return\n        until the move is done, so it is not compatible with asynchronous event\n        loops.\n        &quot;&quot;&quot;\n\n\n        self._dir.value = (steps &amp;gt;= 0)\n        #print(self._dir.value)\n        time_per_step = 1.0 \/ speed\n        #print(time_per_step)\n        for count in range(abs(steps)):\n            self._step.value = True\n            # time.sleep(1e-6)\n            self._step.value = False\n            time.sleep(time_per_step)\n\n    def deinit(self):\n        &quot;&quot;&quot;Manage resource release as part of object lifecycle.&quot;&quot;&quot;\n        self._dir.deinit()\n        self._step.deinit()\n        self._dir  = None\n        self._step = None\n\n    def __enter__(self):\n        return self\n\n    def __exit__(self):\n        # Automatically deinitializes the hardware when exiting a context.\n        self.deinit()\n\n#--------------------------------------------------------------------------------\n# Stepper motor demonstration.\n\ndef turn_half():\n    speed = 500\n    stepper.move_sync(1725, speed)\n\ndef turn_third():\n    speed = 500\n    stepper.move_sync(575, speed)\n\n\n\n#--------------------------------------------------------------------------------\n# Begin the main processing loop.  This is structured as a looping script, since\n# each movement primitive 'blocks', i.e. doesn't return until the action is\n# finished.\n\ndef move_knife():\n    knifeUp = 0.8\n    knifeDown = 0.8\n    sleepUp = 0.15\n    sleepDown = 0.15\n\n    driver.write(0, knifeUp)\n    time.sleep(sleepUp)\n\n    driver.write(0, 0.55)\n    time.sleep(0.2)\n\n    driver.write(0, -1*knifeDown)\n    time.sleep(sleepDown)\n\n    driver.write(0, 0.55)\n    time.sleep(0.2)\n\ndef move_fork():\n    speedUp = 0.8\n    speedDown = 0.75\n    sleepUp = 0.13\n    sleepDown = 0.13\n\n    driver.write(1, speedUp)\n    time.sleep(sleepUp)\n\n    driver.write(1, 0.3)\n    time.sleep(0.2)\n\n    driver.write(1, -1*speedDown)\n    time.sleep(sleepDown)\n\n    driver.write(1, 0.4)\n    time.sleep(0.2)\ndef move_fork_and_knife():\n    knifeUp = 0.8\n    knifeDown = 0.8\n    forkUp = 0.8\n    forkDown = 0.85\n    sleepUp = 0.13\n    sleepDown = 0.13\n\n    driver.write(0, knifeUp)\n    driver.write(1, forkUp)\n    time.sleep(sleepUp)\n\n    driver.write(0, 0.55)\n    driver.write(1, 0.3)\n    time.sleep(0.2)\n\n    driver.write(0, -1*knifeDown)\n    driver.write(1, -1*forkDown)\n    time.sleep(sleepDown)\n\n    driver.write(0, 0.55)\n    driver.write(1, 0.55)\n    time.sleep(0.2)\n\n\n#   Pico pin 4, GPI34  -&amp;gt; PMW\n#   Pico pin 5, GPIO3  -&amp;gt; IN_A\n#   Pico pin 6, GPIO4  -&amp;gt; IN_B\nIN_A =DigitalInOut(board.GP3)\nIN_A.direction = Direction.OUTPUT\nIN_B =DigitalInOut(board.GP4)\nIN_B.direction = Direction.OUTPUT\nPMW = pwmio.PWMOut(board.A2)\n\ndef motor_stop():\n    IN_A.value = False\n    IN_B.value = False\n    PMW.duty_cycle = 0\narm_pmw =  20000\ndef motor_cw():\n    IN_A.value = True\n    IN_B.value = False\n    PMW.duty_cycle = arm_pmw\n\ndef motor_ccw():\n    IN_A.value = False\n    IN_B.value = True\n    PMW.duty_cycle = arm_pmw\n\n\nled = DigitalInOut(board.LED)  # GP25\nled.direction = Direction.OUTPUT\n\n\nswitch = DigitalInOut(board.GP15)\nswitch.direction = Direction.INPUT\nswitch2 = DigitalInOut(board.GP14)\nswitch2.direction = Direction.INPUT\n\ntime.sleep(3.0)\nprint(&quot;Starting main script.&quot;)\ni = 0\nj = 0\nstate_index = False\nstate_index2 = False\nstepper = A4988()\nfork_knife_move = r.randint(0,2)\nprint(fork_knife_move)\nwhile True:\n    if state_index is False:\n        if switch.value is True:\n            state_index = True\n            print(&quot;susan On&quot;)\n            turn_half()\n\n\n    elif state_index is True:\n        if switch.value is False:\n            state_index = False\n            print(&quot;susan Off&quot;)\n\n\n\n    if state_index2 is False:\n        if switch2.value is True:\n            state_index2 = True\n            print(&quot;arm On&quot;)\n            motor_ccw()\n            time.sleep(1)\n            motor_stop()\n            time.sleep(0.6)\n            motor_cw()\n            time.sleep(0.66)\n            motor_stop()\n\n\n    elif state_index2 is True:\n        if switch2.value is False:\n            state_index2 = False\n            print(&quot;arm Off&quot;)\n\n    if i == 10 and j == 50:\n        i = 0\n        j=0\n        fork_knife_move = r.randint(0,2)\n    elif i == 10:\n        time.sleep(0.1)\n        j = j+1\n    else:\n        if fork_knife_move == 0:\n            move_fork()\n        elif fork_knife_move == 1:\n            move_knife()\n        else:\n            move_fork_and_knife()\n        i=i+1\n<\/pre>\n\n\n<h2>Mechanical CAD Files<\/h2>\n\n\n\n<p>The file size of our CAD assembly was too big to upload to the Media Library. Please use the link below to find our FinalAssy.zip uploaded to Google Drive:<\/p>\n\n\n\n<p><a href=\"https:\/\/drive.google.com\/file\/d\/16lPWVSlWRBp4n3A_TnQfvgPp6M4_eqgr\/view?usp=share_link\">https:\/\/drive.google.com\/file\/d\/16lPWVSlWRBp4n3A_TnQfvgPp6M4_eqgr\/view?usp=share_link<\/a><\/p>\n\n\n\n<p>Misc. CAD  files that were separate from our tabletop assembly, including the fork and knife chucks, and the chalice components, here:<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-8430275e-f0a6-4a10-adf3-0a165d019c8d\" href=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/otherCAD.zip\">otherCAD<\/a><a href=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/otherCAD.zip\" class=\"wp-block-file__button\" download aria-describedby=\"wp-block-file--media-8430275e-f0a6-4a10-adf3-0a165d019c8d\">Download<\/a><\/div>\n\n\n\n<h2>Photographs <\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"768\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-1024x768.jpg\" alt=\"\" class=\"wp-image-3220\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-1024x768.jpg 1024w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-300x225.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-768x576.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-1536x1152.jpg 1536w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-2048x1536.jpg 2048w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-973x730.jpg 973w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7961-2-508x381.jpg 508w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Tabletop set with food, plates and other props used during the performance<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-1024x768.jpeg\" alt=\"\" class=\"wp-image-3221\" width=\"620\" height=\"465\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-1024x768.jpeg 1024w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-300x225.jpeg 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-768x576.jpeg 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-1536x1152.jpeg 1536w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-2048x1536.jpeg 2048w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-973x730.jpeg 973w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7960-2-508x381.jpeg 508w\" sizes=\"(max-width: 620px) 100vw, 620px\" \/><figcaption>Fork and Knife that are actuated by automated movements<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"811\" height=\"667\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-1.jpg\" alt=\"\" class=\"wp-image-3226\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-1.jpg 811w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-1-300x247.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-1-768x632.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-1-508x418.jpg 508w\" sizes=\"(max-width: 811px) 100vw, 811px\" \/><figcaption>Chalice being lifted up by the worm gear motor<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" width=\"815\" height=\"665\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1.jpg\" alt=\"\" class=\"wp-image-3225\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1.jpg 815w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-300x245.jpg 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-768x627.jpg 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/image-1-508x415.jpg 508w\" sizes=\"(max-width: 815px) 100vw, 815px\" \/><figcaption>Close up of the Lazy Suzan that can be actuated with a motor or by the performer&#8217;s hand <\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" width=\"1024\" height=\"768\" src=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-1024x768.jpeg\" alt=\"\" class=\"wp-image-3222\" srcset=\"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-1024x768.jpeg 1024w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-300x225.jpeg 300w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-768x576.jpeg 768w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-1536x1152.jpeg 1536w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-2048x1536.jpeg 2048w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-973x730.jpeg 973w, https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-content\/uploads\/2022\/12\/IMG_7959-2-508x381.jpeg 508w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption>Final Set up before the performance<\/figcaption><\/figure>\n\n\n\n<h2>Project Contributions<\/h2>\n\n\n\n<p>Matt: Mechanical design of false table top, design of fork, knife and chalice holders, performance, tuning PID for Webots simulation<\/p>\n\n\n\n<p>Karen: Electrical design, project code, debugging, motor mount designs, design of Webots simulation.<\/p>\n\n\n\n<p>Both: Staging the scene &#8211; food table cloth, etc., developing the narrative and assembly<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Project Narrative Our performance consists of a person who used their knowledge in robotics to create a structure that fills a void from loneliness and their inability to&#8230;<\/p>\n","protected":false},"author":41,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/posts\/3191"}],"collection":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/users\/41"}],"replies":[{"embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/comments?post=3191"}],"version-history":[{"count":9,"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/posts\/3191\/revisions"}],"predecessor-version":[{"id":3236,"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/posts\/3191\/revisions\/3236"}],"wp:attachment":[{"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/media?parent=3191"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/categories?post=3191"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/courses.ideate.cmu.edu\/16-375\/f2022\/wp-json\/wp\/v2\/tags?post=3191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}