Ven Ranganathan
GitHub
&
LinkedIn
🤖 🚀 🌎 🇺🇸
Here are some projects I’ve completed as an Electrical Engineering student:
Table of Contents:
- AI/ML Autonomous RC car operated using NVIDIA Jetson Orin Nano
- Texas Instruments Summer ‘23 intern, Industrial Networking EtherCAT Project: TI AM62x (microprocessor, RT-Linux), TI AM243x (microcontroller, RTOS)
- Metal Detection System using Colpitts Oscillator & FPGA
- Synthesizing a Guitar Signal w/ MATLAB - Signals & Systems
- Analog-to-Digital Converter
- Minesweeper
- Pololu 3pi IR reflectance sensor repair
- FPGA Calculator
AI/ML Autonomous RC car operated using NVIDIA Jetson Orin Nano
05/04/25, Project Complete
ECD 407 completed our senior design project and accomplished our required and stretch goals of operating a modified RC car autonomously on a track with variable throttle, and the ability to detect and avoid objects.
Summary of my contribution:
• Led team of four to implement object detection and object avoidance on autonomous RC car running Linux on NVIDIA Jetson Orin Nano.
• Debugged Python errors to get functional RC car. Trained road following and object detection models.
• Configured steering gain, steering bias, offset, min/max/cruise speed, turn/straight speed variability to maximize performance of car on track. Made local news.
• Installed PyTorch, Torch2trt, torchvision, JetCam, JetRacer, Jetson-inference, IMU (inertial measurement unit) driver.
• Configured Jupyter Lab Server to auto-launch on boot, assign itself IP address, and broadcast on local network.
• Upgraded stability and speed of model training by installing NVMe drive and setting up 4GB swap partition to expand total available memory to 12GB from 8GB.
• Evaluated power requirement to select battery pack to power NVIDIA device.
Project experience video:
Object detection using Jetson-inference with mobilenet-ssdv2 model:
11/17/23, New video shows car operating on track & ML GUI at the same time
10/31/23, Minor update: team improved the model to operate faster and with less wobbliness by increasing min/max speed and reducing steering gain. Changed track to add a chicane (s-shaped turn)
10/31/23
Project is in-progress
Senior Design year-long project: Machine learning based autonomous RC car
Team members (major): myself (EE), Justin Anderson (CoE), Jack Bonfiglio (CoE), Kyle Duran (CoE)
Tools used: Linux, Jupyter Notebook, PyTorch, Torch2RT, OpenCV
Current status: Have car operating autonomously around track. Stays on track, takes basic turns, has variable throttle for straights/turns. Using NVIDIA JetRacer GitHub. Camera connected via CSI to Jetson Nano. Camera is activated from PyTorch, images used to train inference model. LaTrax Rally RC car has IMU (inertial measurement unit) to capture position in space, velocity, & acceleration. RC car components controlled by Jetson Nano via GPIO
Next steps: implement object detection > object avoidance > lane keeping
Texas Instruments Summer ‘23 intern, Industrial Networking EtherCAT Project: TI AM62x (microprocessor, RT-Linux), TI AM243x (microcontroller, RTOS)
I spent my Summer as an Applications Engineer intern with Sitara Embedded Linux Applications at Texas Instruments in Dallas, TX.
My intern project demonstrates that a TI AM62x microprocessor running RT-Linux (Yocto) on its ARM A53 cores can function as an EtherCAT MainDevice to control test LEDs on multiple TI AM243x microcontroller SubDevices running RTOS on its ARM R5F cores simultaneously. In factory automation, the test LEDs can be replaced with motors, servos, robotic arms, etc.
I wrote customer-facing Texas Instruments documentation for the end-user to get an EtherCAT TI Main/SubDevice system set up and running and be able to manipulate test LEDs on multiple SubDevices simultaneously connected via standard Ethernet
Speaking broadly, I did the following to get my system up-and-running:
To setup the TI AM62x-EVM MainDevice:
- Loaded Yocto (Arago) RT-Linux onto AM62x-EVM
- Connected to AM62x via UART using screen
- Used Linux command-line tools (screen, dmesg, grep, ifconfig, ip link, ip addr, tcpdump, htop) to set up and debug the network connection to the AM62x from Linux & Windows
- Connected remotely to AM62x from PowerShell on Windows PC using SSH
- Corporate environment blocked USB storage devices from connecting to corporate computers, to move files over Ethernet:
- Set IP address of Ethernet port on AM62x to be on same subnet as the Ethernet port connected to Windows PC (ip link, ip addr add/del) (connected to Windows PC so AM62x can be detected by CODESYS software that is only available on Windows)
- Used scp and set encryption to transfer CODESYS .deb files from computer to the AM62x Linux root directory (files needed to setup AM62x as an EtherCAT MainDevice)
- Installed files on AM62x using opkg
- Confirmed CODESYS MainDevice configuration ran on the AM62x
To setup TI AM64x/243x-EVM (GP, General purpose), TI AM243x-LP (HSFS, high-security field-securable), TI AM243x-EVM (HSFS):
- Built EtherCAT demo project using TI Code Composer Studio (IDE to program and debug real-time cores)
- Modified build configuration
- Debugged build errors
- Filed JIRA ticket with debug information, steps to recreate, and solution (if known)
- Manually connected to and loaded application onto AM243x R5F core over JTAG
- Monitored AM243x terminal output over JTAG (XDS110)
- Flashed (via UART) modified configuration to automatically load built application onto AM243x R5F RT core after power cycle
- AM243x boards set to boot OSPI to load flashed instructions
To get system working:
- Built project on CODESYS Devolopment System. Detected SubDevices connected to MainDevice
- Located physical addresses of test LEDs on SubDevices, assigned to variables
- Built GUI to manually change state of LEDs on all boards, on the fly, simultaneously
- Debugged hardware, software issues: detected fault in boards, SDK documentation missing/incorrect, examples not building or running
To edit video:
- Got feedback from colleagues & fellow interns that it was difficult to know where to look
- Added arrow image to show device being changed
- Added zoomed in picture-in-picture to clearly see LED states changing
Metal Detection System using Colpitts Oscillator & FPGA
Junior Design final project: create metal detection system using off-the-shelf parts. Team consists of two Electrical Engineers (Muhaned Abdelmoniem, Ven Ranganathan (myself)) and three Computer Engineers (Arvind Balajee, Kyle Duran, Christopher Shortt).
Electrical Engineers: System consists of three circuits, each having a Colpitts oscillator, high-pass filter, half-wave rectifier, low-pass filter, and voltage divider. Each circuit connected to magnetic coil that detects presence of metal using principles of electromagnetic induction and Lenz’s law. Output signal from each coil fed to analog-to-digital converters of FPGA board.
Computer Engineers: Design implemented using embedded MicroBlaze soft processor on FPGA. Microprocessor system uses GPIO peripherals for inputs/outputs. Main loop running at 1ms period using alarm timer custom IP enabled controlled timing of FSMs (finite state machines) and increased accuracy of peak values in Peak Finder IP, since code allows for multiple periods to run through the IP before clearing its value. Major FSM used in design is Metal Detect Debounce. LED strength meter logic implemented into function using bit shifting to turn on correct amount of LEDs based on how close or far metal is from coil. Register value comparisons and Seven Segment logic was done in main loop, displayed number of times metal was detected in each region.
Team result: System correctly detected 15/15 conductive objects in various combinations of position and distance from magnetic coils during demonstration.
Synthesizing a Guitar Signal w/ MATLAB
Signals & Systems final project.
Team members: Ven Ranganathan (myself) & Benjamin Telfer.
Imported 30 msec guitar note sample into MATLAB and generated synthesized guitar signal that was modified to replicate two additional notes by changing only the fundemental frequency, f0, of the signal.
Original signal extracted, listened to, and visualized using concepts of Fourier Series, its coefficients, and Fourier Transforms. Concept of Discrete Fourier Transform used to generate synthesized guitar signal from manually recorded FS coefficients. Concepts of stopband, transition band, and passband used to create FIR and IIR (recursive) filters to modify the sound profile of the synthesized signals. Transfer Function used to find poles and zeroes of plot, those values used to create peaks or nulls in signal to change its sound.
Result: Original guitar signal sounded best. Synthesized signal impressive given small amount of data points they were generated from. Ability to amplifiy or nullify desired and undeseried aspects of signal, respectively, shows promise for creating copies of original sound while using only a fraction of data.
Formulas set using LaTeX
Analog-to-Digital Converter
Used LM741CN op-amps as comparators to convert an analog voltage signal ranging from 0 to 7 volts (including decimal values in between) into an equivalent digital, discrete signal (positive and negative whole numbers) output through LEDs. With a 7V reference voltage, the LEDs are connected to the op-amp from top-to-bottom, 7V to 1V (any decimal value between 0V and less than 1V will not turn on the last LED), the last op amp will use a 1V reference voltage, the second last, 2V, etc., up to the top-most op amp using a 7V reference voltage–all integer values because we’re converting real-world, continuous signals into digital, discrete signals that can be read by a digital device, such as an Arduino ( due to time constraints, and because I worked on this project alone, I chose seven LEDs as being representative of a 3-bit output [000 would be no LEDs on, 001 1 LED, 010 2 LEDs, 011 3 LEDs, 100 4 LEDs, 101 5 LEDs, 110 6 LEDs, 111 7 LEDs]). Designed and verified circuit in LTSpice, then built physical circuit. Added additional strobe light effect by swapping DC input voltage with function generator using triangle wave with frequency and phase adjustment (professor helped with this last part)
In the YouTube videos, I mistakenly said that each op-amp represents a 0.5V drop, instead of a 1V drop. It was finals time and my brain was fried 🧠⚡
Minesweeper
Programmed Pololu 3pi Robot to navigate a 36x48” black-lined grid and find user defined number of 1x1” white “mines”. Directly programmed hardware. Defined motors as output, light sensors as input, buttons as input, LCD display as output, and piezo (speaker) as output. Created functions to self-correct movement to stay on grid by using current state of light sensors and adjusting left/right motor power using PWM; 360-spin when mine found, play music when mine found, separately handle three/four-way intersections and corners. Worked with teammate. Used AVR-GCC to compile C code
Pololu 3pi IR reflectance sensor repair
I broke off one of the 3pi’s IR reflectance sensors by repeatedly crashing it into a concrete wall at high speeds by accident while learning how to adjust the left/right motor speeds. Since the five IR reflectance sensors are connected in series, when one doesn’t work, all of them stop working.
Since the sensor broke off cleanly, I first tried to match up the orientation of the sensor to the sensor contact points on the 3pi and super glued it back on, but that didn’t work.
I cleaned off as much of the super glue I could using acetone (nail polish remover) and a qtip/tweezer, then I used a soldering iron with a fine tip, heated up the contact points of the sensor and added a drop of solder to restore the metal-to-metal contact between the sensor and the board. This got the IR relfectance sensors working normally again
FPGA Calculator
Used logic gates, adders, and multiplexers to design and implement a calculator that can add, subtract, multiply, and divide using toggle switches on the BASYS 3 Artix-7 and output results on the seven-segment display. Programmed in Verilog. Synthesized and implemented in Vivado.