<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kushagra Katiyar</title>
    <description>The latest articles on DEV Community by Kushagra Katiyar (@kushagrakatiyar06).</description>
    <link>https://dev.to/kushagrakatiyar06</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4191907%2F6c3e7ae9-a396-48d2-ba2b-9ee2acafc44a.jpg</url>
      <title>DEV Community: Kushagra Katiyar</title>
      <link>https://dev.to/kushagrakatiyar06</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kushagrakatiyar06"/>
    <language>en</language>
    <item>
      <title>Combining Roblox and Robotics. Playing videogames by controlling the physical world.</title>
      <dc:creator>Kushagra Katiyar</dc:creator>
      <pubDate>Sun, 18 Oct 2026 11:31:41 +0000</pubDate>
      <link>https://dev.to/kushagrakatiyar06/combining-roblox-and-robotics-playing-videogames-by-controlling-the-physical-world-50nk</link>
      <guid>https://dev.to/kushagrakatiyar06/combining-roblox-and-robotics-playing-videogames-by-controlling-the-physical-world-50nk</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/mlh-hackathon"&gt;MLH x DEV Writing Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What We Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Roblotix&lt;/strong&gt; is a set of Roblox games played by two people at once: a &lt;strong&gt;player&lt;/strong&gt; at the Roblox screen and a &lt;strong&gt;robot operator&lt;/strong&gt; at a real &lt;strong&gt;SO-101 robot arm&lt;/strong&gt;. The blocks the operator moves on a real table become platforms, bridges and targets in the game. The game can also reach back and shake, slow or flip the real arm.&lt;/p&gt;

&lt;p&gt;We built three games on one shared core (roles, a game registry and a bridge to the arm):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Robo-Obby: Smart Warehouse Escape.&lt;/strong&gt; The player is stuck in a warehouse of hazards they can't clear alone, and the operator builds the way through with real cubes: a closing saw wall, a gap in the floor, a laser floor and a dark room.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern Match.&lt;/strong&gt; A ticket-shift game. The player sees a target pattern the operator can't see, and calls out moves by voice while the operator rebuilds it on the real grid.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dragon Escape.&lt;/strong&gt; ** The robot arm controls a dragon with fire breath. Players have to survive the timer and can use powerups to slow down the robot arm in real life.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The idea came from a realization: robot arms and roblox have never met. We wanted the arm to be a &lt;em&gt;teammate&lt;/em&gt; inside the game, not a controller for it.&lt;/p&gt;

&lt;p&gt;The detail I'm proudest of is one number. With the mat scale $s = \frac{8\ \text{studs}}{57.15\ \text{mm}}$ and a $48\ \text{mm}$ cube, one real cube becomes&lt;/p&gt;

&lt;p&gt;$$48 \times s \approx 6.72\ \text{studs}$$&lt;/p&gt;

&lt;p&gt;A player can climb one cube but not a stack of two ($13.44$ studs), so the physical world sets the difficulty. If the operator doesn't stack cubes, the lever gate never opens.&lt;/p&gt;

&lt;p&gt;What We learned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Keep the physical and the virtual on one coordinate system.&lt;/strong&gt; It's easier to build around real constraints than to patch the game later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design for noisy input.&lt;/strong&gt; Hold times, debouncing and forgiving tolerances matter more than clever vision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask a vision model only when the answer can have changed.&lt;/strong&gt; Our first approach tracked blocks frame by frame, which took hundreds of lines and broke whenever the arm carried or hid a block. We replaced it with one vision read two seconds after the gripper opens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build a fake version of every dependency.&lt;/strong&gt; A mock bridge and a solo mode let three people work at once without the hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;[&lt;a href="https://youtu.be/l9G8ekAVupE" rel="noopener noreferrer"&gt;https://youtu.be/l9G8ekAVupE&lt;/a&gt;]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffsrj0qb3nkkjyy1dczpa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffsrj0qb3nkkjyy1dczpa.png" alt="Our Robot" width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4r1y7swb753zun2wlqg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fx4r1y7swb753zun2wlqg.png" alt="Start" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsts49zplx540rvo0van7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fsts49zplx540rvo0van7.png" alt="Escape Game" width="800" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv90hn6856hl6ep1kgrng.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv90hn6856hl6ep1kgrng.png" alt="Icon" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code: &lt;strong&gt;&lt;a href="https://github.com/abhay-dronavalli/LeBot-Games" rel="noopener noreferrer"&gt;https://github.com/abhay-dronavalli/LeBot-Games&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Partner Technologies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Google Gemini API.&lt;/strong&gt; Gemini names block colours in our perception pipeline. We send the overhead frame with each detected cube outlined and numbered, and ask for a JSON reply mapping each number to a colour name. We use it to teach our colour recognizer at the start of a session or when a block looks unfamiliar, so everyday recognition stays local and fast.&lt;/p&gt;

&lt;p&gt;What worked well:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The prompt fits in a few lines, and it followed "ignore glare, shadows and printed patterns" better than the classical colour thresholds we started with.&lt;/li&gt;
&lt;li&gt;Asking for JSON only gave us replies we could parse without retries.&lt;/li&gt;
&lt;li&gt;Choosing the newest "flash" model automatically saved us from model-name churn mid-weekend.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What I'd improve: a clearer quota signal. Our rig looked healthy while blocks stopped updating after the credits ran out, so we added a visible warning banner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hackathon Experience
&lt;/h2&gt;

&lt;p&gt;I built this at &lt;strong&gt;SwampHacks XII&lt;/strong&gt; at the University of Florida. It was me (Kushagra Katiyar) Abhay Dronavali, Taher Akalawala. It was very fun I drove to walmart to get children's toys and my carts never seemed that way &lt;br&gt;
in the last 6 years. &lt;/p&gt;

&lt;p&gt;Hardware hacks are different from software ones. A software bug waits for you; a servo bus that drops out 40 seconds into motion does not. The part I'll remember is when we saw roblox reflect the movement of the robot for the first time. It felt surreal two people playing the game, one physicall and the other in the game. &lt;/p&gt;

</description>
      <category>mlhacks</category>
      <category>devchallenge</category>
      <category>hackathon</category>
    </item>
  </channel>
</rss>
