All projects

Personal project

Lab Scout

MIT's lab assistant robots cost $10K. Why can't a high school student have one of their own? Over the past year, I built one for $600. By August it mapped my workshop on its own while running object detection.

The Lab Scout rover on a wood floor: LiDAR on top, a global-shutter camera below it, stacked boards and wiring, two small wheels on a 3D-printed chassis
LDROBOT LiDAR on top, global-shutter camera under it, ESP32 and Raspberry Pi in the stack, IMU and battery down low.

My inspiration

I wanted the lab assistant I had seen in MIT's lab without the ten-thousand-dollar price tag. I also wanted to learn new sensors and get better at electronics while ending up with something that worked. So I spent the summer creating a CAD model of the most complex robot I have built.

A tower of sensors

I placed a LDROBOT LiDAR on top, with a global-shutter camera just below it. Under those house the ESP32 and the Raspberry Pi for easy access. I mounted the IMU to reduce existing angle defects at the top with and put a LiPo battery under it to provide power through the Matek PDB. Everything is held together with 3d printed parts and a chassis designed on Fusion 360 with two N20 motors and encoders attached to it.

The ESP32 drives the N20s through a Toshiba motor driver board. The Raspberry Pi runs the USB camera and the USB LiDAR. Splitting the work this way keeps motor timing steady while the Pi works through camera frames.

Learning spatial awareness

The camera runs YOLO object detection to pick out tools, people, and other items around the lab.

For the map I used LiDAR SLAM, short for simultaneous localization and mapping: the robot builds a map of the room while working out where it is inside that map. The LiDAR spins and measures the distance to everything around it, and each new scan gets lined up against the map so far. When the walls line up, the robot knows how far it has moved.

To increase accuracy and spatial awareness, I added odometry via encoders on the N20s and the Adafruit IMU Heading. The two allow for efficient curvature path finding as well as the LiDAR to track farther locations.

Occupancy grid built by the scout: black cells are walls, white is free space, grey is unmapped, and the green line is the planned path
This live output actively maps the environment around the robot (the thick red circle). The green dot lining represents real time light response; black indicates established walls saved to memory; red shows boundaries set to avoid collision; purple is untraveled locations; the green plus sign is the path; and the yellow circle is for path finding.

Now for the bigger challenge

Building the robot was the "easier" part. Getting the sensors, the two processors, and YOLO to talk to each other took most of my summer, all of it in VS Code.

Working on the robot at a bench, with an oscilloscope trace on screen while checking the motor driver board
At the bench, checking on the scope that the Toshiba motor driver board was still getting the voltage it should.

Putting it all together

Mapping while driving

The left side of the video shows the rover in a maze. On the right is a screenshare of how the software sees it, with walls filling into the occupancy grid and the path re-drawn as the pose arrow moves.

What's next

YOLO already tracks objects reliably, but nothing acts on what it sees yet. Next I connect detection to driving and put AprilTag and QR labels on the parts bins, so I can ask for a part and the scout takes me to it.