Project Silent Willow started off as a side-project that was intented to be a basic introduction to C++ and Arduino for me but ended up becoming one of my biggest projects to date. A short TL;DR: it's a mechanum-wheeled vehicle, that integrated basic Arduino logic for drive control with an Nvidia Jetson Nano for image recognition. The vehicle was designed to include a LiDAR unit mounted atop, however I was unable to figure out how to extract data from the points it plots, so I ended the project up to the image recognition addition. Alongside the hardware/firmware, I developed a custom controller app that has been lost in the void somewhere.
Technology Used
Before the development of tau-w, I used an Arduino Mega 2560 with a few DRV 8825 stepper motor drivers. As it was my first ever "physical" prototype of the concept, the wiring was all over the place and the code I developed was also a mess (I'd give myself credit, though, as I was only 12 when I started working on this project.) As I continued working on it, I developed my own microcontroller purely out of the neccessity to have specific features available to me that were hidden by most boards out there in the market. I also found out about TMC2209 drivers and integrated those to make the vehicle truly "silent" (ironic that it was originally loud!)
Firmware/Software
Onboard firmware - Written in C++ using VSCode and Arduino IDE
Jetson Nano firmware - Written in Python, using Jupyter Notebooks as the interfacing GUI/manager (alongside several Python packages developed by the Nvidia DLI)
Android app - Written in Kotlin using Android Studio
Communication protocol - I chose BLE as itw as the most light-weight and is the most common protocol for applications like this where there was minimal data being transferred between the vehicle and phone
Overall, this project was quite fun to make. Despite only being 12 at the time, it allowed me to explore several key areas of embedded development: communication protocols, wireless protocols, and data processing (albeit at very basic levels). Obviously with any large project, there will be many issues, and so here are the ones I faced (some are quite silly):
Wrong baud rate - When I first started implementing BLE, I set the baud rate to 115200 instead of 9600 (the appropriate baud rate for the wireless module I was using) which set me back an embarrasing 2 months of debugging nothing!
False positives/negatives - This was more related to how I trained the model for image recognition, but sometimes the model wasn't able to differentiate between QR codes that looked similar to each other meaning the vehicle sometimes went forwards even though the backwards QR code was up.
LiDAR - As stated at the start, I was unable to get the raw data from the LiDAR unit, so it ended up just sitting at the top with no added functions to the system besides displaying a map of the room the vehicle was in
UART cross-communications - When initially connecting the Jetson to the main control microcontroller, I was unable to get the data to transmit quickly enough (due to not havign developed-enough knowledge of communication protocols at that time), which caused the vehicle to sometimes have considerable delays between stopping/starting
If I were to re-do this project, I would certainly develop a plan of exactly what systems I'd want running in the vehicle and create a more robust image recognition system alognside many more hardware-specific changes such as integrating ALL functionality within one PCB.