Inspiration
We knew from our very first step into Cory Hall that Berkeley was going to be a tough school. Every engineer goes through the same treacherous loop of large assignments, complex projects, impossible exams, and deadlines so tight that it makes it easy for us to neglect our own personal hygiene. We decided that instead of continuing this cycle for CalHacks, we would put an end to it with our own personal hygiene robot. That’s where DEMI was born: Deodorizing Engineering Majors Intelligently. What started as a joke about “building a robot that sprays deodorant when things get rough” quickly turned into a real, sensor-driven robotics project combining hardware, computer vision, and environmental sensing.
What it does
DEMI's goal is to provide its user with a continuous and intelligent application of deodorant as they traverse their environment. DEMI works as an attachment to the user's backpack along with a frontal camera that can be easily clipped onto one's shirt. Using both this frontal camera and the readings from a TVOC (Total Volatile Organic Compounds) sensor, DEMI can accomplish 2 main tasks:
Provide the user with a self-application of deodorant if enough body odor is detected. The TVOC sensor rests close to the user's body as it rests on the robotic arm, and thus has great performance in measuring the count of volatile organic compounds surrounding you. High VOCs correlate to more body odor, and thus, when a certain VOC threshold is met, DEMI will activate its self-application trajectory and apply deodorant to the user.
Ensure the user stays within a sphere of cleanliness as they traverse their environment. A webcam mounted on the user's shirt is constantly scanning for nearby people, while a TVOC sensor mounted on the user's backpack is measuring ambient body odor. When there are nearby people and a significant ambient body odor is detected, DEMI will determine the odor's direction of origin, activate its self-application trajectory, and deploy deodorant in that direction.
How we built it
Deployed on a 6DoF SO-101 robot arm, DEMI is a coordinated blend of several computing paradigms, incorporating features that span computer vision, embedded systems, and robotics.
Computer Vision: A Logitech webcam captures live images of the user’s surroundings in real time. Using OpenCV for image preprocessing and pre-trained convolutional neural networks (CNNs) such as MobileNetV3 for object detection, DEMI identifies and segments people within the camera’s field of view. To add spatial awareness, DEMI integrates depth estimation models such as Intel’s DPT-SwinV2-Tiny-256, which generate per-pixel depth maps from monocular RGB images. Combining these depth maps with bounding box detections allows DEMI to infer the distance and relative position of nearby individuals in 3D space. This 3D localization enables DEMI to direct its deodorant spray intelligently, targeting odor sources based on both proximity and direction, maintaining the user’s “sphere of cleanliness” even in dynamic environments.
Embedded Systems: All sensing and control in DEMI are managed by a Raspberry Pi, which runs multiple asynchronous threads for real-time operation. Dedicated sensor and camera threads handle data acquisition in parallel: the sensor thread reads and processes TVOC measurements, which are calibrated using an affine sensor model and filtered through an n-point moving average low-pass filter (LPF) to reduce noise and stabilize odor detection. Simultaneously, the camera thread captures images from the Logitech webcam for continuous environmental monitoring. A separate communication thread maintains an SSH link with a remote MacBook server, exchanging control flags and data. When a deodorant trajectory is active, both the sensor and camera threads pause automatically, resuming once a “trajectory complete” flag is received. All processed data are serialized into structured JSON packets and sent to the server for real-time logging and analysis, allowing DEMI to operate concurrently and reliably across all sensing and control tasks.
Robotics: DEMI’s actuation system uses a LeRobot S0-101 6DoF robotic arm controlled through LeRobot’s SDK. Using the SDK’s teleoperation interface, we recorded several joint-space trajectories that define the arm’s motion during deodorant application. Each trajectory commands the arm’s joints to move the end effector smoothly into the desired spraying position, where it grasps and actuates the deodorant bottle with precision and repeatability. All robotic control processes are executed on our MacBook SSH server, which receives real-time odor and camera data from the Raspberry Pi’s embedded threads. Based on these incoming signals, the server determines when to trigger specific trajectories, such as initiating a self-application or directional spray, and sends corresponding control commands to the arm. This architecture cleanly separates low-level sensing on the Raspberry Pi from high-level motion execution on the server, enabling responsive, coordinated, and reliable deodorant deployment.
Challenges we ran into
We ran into challenges the moment we stepped into the venue. Both of our Raspberry Pis had just enough power to make us think they were working, but they refused to actually run any of our embedded software. After hours of troubleshooting, re-imaging SD cards, and swapping cables, we finally managed to flash our programs onto a new board and get things moving. That’s when we realized that measuring smell is a lot harder than it sounds. Our sensor data was all over the place, and getting consistent readings took a ton of trial and error. Calibrating the sensors to detect odor accurately ended up taking way longer than we expected. Once the hardware and sensors were working, the next big challenge was bringing everything together. Combining low-level embedded code with computer vision, machine learning models, and robotic motion control felt like trying to fit an entire semester’s worth of projects into one weekend. Each part worked great on its own, but integrating them into a single system meant hours of debugging, testing, and adjusting until everything finally clicked. Our last hurdle came when it was time to mount the deodorant can. The servo we had wasn’t strong enough to press the spray, so we had to improvise. After a few failed attempts, we used tape to hold it in place just right so our robotic arm could squeeze it. It wasn’t the prettiest solution, but it worked, and seeing DEMI actually spray deodorant on its own made every challenge worth it.
Accomplishments that we're proud of
Being able to build and combine so many different systems in just one weekend was a huge and welcome surprise for us, especially considering all the roadblocks we ran into along the way. We’re also proud that we took the concepts and ideas we’ve learned from our coursework and turned them into something far more exciting than a typical Friday night problem set. Most of all, we’re proud that we kept our sense of humor throughout the process. We didn’t take ourselves too seriously, and that made the experience even better. It was awesome spending the weekend working together, laughing through the chaos, and getting inspired by everyone else’s amazing projects
What we learned
We learned how challenging it is to integrate sensing, vision, and robotics into one cohesive system. Calibrating noisy sensors taught us the value of filtering and data smoothing, while working with multithreaded code showed us how to manage timing and synchronization across hardware components. On the robotics side, we learned how precise trajectory recording and actuation need to be for reliable performance. Most importantly, we learned that when we’re having fun, good things come out of it, like DEMI!
What's next for DEMI
While the ultimate dream is to give DEMI a humanoid form factor that follows users around and deodorizes them based on sensor feedback (we’re kidding… mostly), our real next step is to expand DEMI’s capabilities far beyond deodorant application.
We plan to explore reinforcement learning (RL) and policy optimization techniques to enable DEMI’s backpack-mounted robotic platform to perform a broader range of everyday manipulation tasks. By training DEMI to learn from sensor feedback and adapt its control strategies, we aim to help the system assist people with upper-body mobility limitations in real-world environments.
Furthermore, this current prototype still has limitations in its mobility, as we require the robotic arm to have power and a connection to an external computer. Adding a battery to solve for power, and using a web server on the Raspberry Pi that would send the commands to the arm, could resolve these issues and allow DEMI to be truly limitless.
In short, we’re evolving DEMI from Deodorizing Engineering Majors Intelligently to Doing Everyday Manipulation Intelligently, transforming a lighthearted hygiene companion into a general-purpose assistive robot capable of learning, adapting, and improving with experience.
Built With
- agentic-ai
- claude
- computer-vision
- digital-signal-processing
- embedded-software
- huggingface
- i2c
- lerobot
- machine-learning
- multithreading
- numpy
- opencv
- paramiko
- python
- pytorch
- rpi.gpio
- teleoperative-robotics
- torchvision
- trajectory-planning

Log in or sign up for Devpost to join the conversation.