← Back home

nicole@portfolio:~/projects/construction-robot$ cat README.md

Autonomous Construction Robot

Built a mechanical chassis with 3D-printed mounts and created a Python library for controlling motor servos via RS485 serial communication.

Python · Onshape · Raspberry Pi

Overview

The purpose of this project was to build an autonomous mobile robot designed as a platform for future construction and material-handling tasks. All development was completed as part of my undergraduate research at the Napp Lab within Cornell University's Computer Systems Laboratory.

Mechanical

The physical robot consists of a custom chassis built using a combination of 3D-printed components and existing hardware. For the main frame, I joined four aluminum double T-slot rails, cut to size using a miter saw, with corner brackets. Open-source STEP files for mounting DDSM115 motors were available from Waveshare and were modified slightly in Onshape to fit M3 screws. These were printed on a Prusa MK4S using generic PLA filament.

Electrical

For the initial prototype, I mounted a terminal strip to the main frame that distributes power in parallel from a five-cell LiPo battery to all electrical components, since the motors run on 18V DC. A solderless breadboard was also used as a temporary wiring harness for the RS485 communication bus. A USB-to-RS485 adapter enables the main Raspberry Pi 5 controller to send commands to and receive feedback from all servo motors.

Software

The software stack centers around a custom Python library I developed to communicate with the DDSM115 servo motors over an RS485 serial bus. The library separates serial transport, packet formatting, and motor commands into modules. Following the available Waveshare communication protocol documentation, it allows the user to set motor IDs, switch between velocity, current, and position modes, send drive commands, brake, and query feedback from individual motors. I also added support for coordinating multiple motors through a shared controller interface, which simplifies testing and provides a reusable foundation for higher-level autonomous control.

Video 1. Individual motor and shared controller demo