Hello! My name is Keyan Cassis. I'm a fourth year Computer Systems Engineering student at Carleton University who is very passionate about technology and music. On this website you will find engineering projects and music productions I have completed in the past years. Enjoy!
For my fourth year engineering project, my team and I developped a real-time curb detection algorithm for autonomous vehicles using a 3D LiDAR sensor. The project was done in collaboration with BlackBerry QNX who provided us with real Velodyne HDL64 LiDAR data as well as telemetry data collected from their self-driving Lincoln MKZ. To see more and view the project source files, check out the project in the Engineering Projects tab.
Listed below you will find engineering projects I have completed in school or during my free time. The projects are ordered by date. Each one contains a detailed description of the project as well as the source code and relevant images.
For my fourth year engineering project, my team and I developped a real-time curb detection algorithm for autonomous vehicles using a 3D LiDAR sensor. The project was done in collaboration with BlackBerry QNX who provided us with real Velodyne HDL64 LiDAR data as well as telemetry data collected from their self-driving Lincoln MKZ.
A remote controlled car with an ADAS system for lanekeeping and collision avoidance. The car was built using an Arduino, two DC motors, infrared sensors, sonar sensors, and other peripherals.
A security system for users to store documents in an array of safes. A prototype safe was built using cardboard, a keypad, an electromagnetic bolt, magnetic sensors, LEDs, an Arduino, and a Raspberry Pi. A second Raspberry Pi was used for storing credentials, validating user input, and controlling the safe's locking mechanism over the network.
A very accurate simulation of a multi-elevator real-time system. The simulation receives elevator calls from different floors at different times and the scheduler selects the best elevator to fulfill the request. A GUI was developped to view the elevators moving from floor to floor. The system includes a logger and a test suite.
Food Bank is a RESTFul web service written in Java using JAX-RS that allows users to retrieve a list of ingredients available in a food bank.The user can retrieve ingredients based on their name and view the remaining quantity in the food bank. The user can also make API calls to remove items from the bank. The web service is deployed on a GlassFish Server.
A typical login/sign up form for an online shopping website. The form validation, creation of new users and authentication of users loging in are done using Ajax.
The Greenhouse Management System is a real-time embedded system that controls a Motorola M68HC12 microcontroller and its project board. Its goal is to simulate an automated control system for greenhouses. It compromises of a thermostat, a fan, a heater, a water pump, a keypad for system controls, and an LCD display indicating the status of the system's components.
A classic Tic Tac Toe game for two players written with Java's AWT API and Swing library; the GUI displays the Tic Tac Toe board and indicates which player's turn it is. It also keeps track of wins and loses for the players. The game menu allows players to start a new game, reset the score or quit the game.
A text-based chess game for two players that is printed in the console; the row and column indexed chess board is printed with all the chess pieces and the players are prompted to enter coordinates to move their pieces. After a legal move, the board is reprinted in the console and the next player may take his turn. The game also warns players when their oponent has placed them in check.
A ratchet is a mechanical tool used to tighten and loosen bolts. The problem with a standard ratchet is that the user must always change the socket according to the bolt size. As a result, ratchet users often carry a large and heavy box of different sized sockets. My partner and I reverse engineered a ratchet and improved it by designing a universal ratchet that only has one socket. The improved ratchet was designed and 3D printed with Creo Parametric 3.0.
The Home Security System detects intruders across a door or a window. It was designed with an Arduino Uno microcontroller that is connected to LEDs, push-buttons, photoresistors, a piezo, etc. The system works by means of a wide laser pointing into a series of photoresistors; when the photoresistors detect a dramatic change in light (i.e. the laser is cut), the alarm is triggered. The system is connected to a push-button keypad that arms or turns off the alarm.
For my fourth year engineering project, my team and I developped a real-time curb detection algorithm for autonomous vehicles using a 3D LiDAR sensor. The project was done in collaboration with BlackBerry QNX who provided us with real Velodyne HDL64 LiDAR data as well as telemetry data collected from their self-driving Lincoln MKZ.
My part in the project was threefold. First, I investigated de-noising and clustering methods and helped significantly reduce the number of non-curb points in the point cloud. Second, once our single-snapshot curb detection algorithm was completed in Python, I rewrote and optimized the algorithm in C as a real-time algorithm so that we could run it in the self-driving car simulation. I had to optimize the algorithm to run under the 100ms real-time deadline. Implementing this was no easy task as I had to re-implement functions that are provided by python machine learning libraries in C. Thirdly, I developped a novel method of real-time point cloud computation acceleration. I called it the Rear-Envrionment Recall method. In this method, the vehicle keeps track of the last processed point cloud. Rather than processing an entire point cloud of over 100k points each snapshot, the vehicle only computes new points in front of the car. The points behind the car are re-used from the previous LiDAR snapshot all while being adjusted in 3D space for the displacement and rotation of the vehicle between the two snapshots. I achieved very desirable results with this method, even speeding up the algorithm by 138%. You can read more about this method in sections 6.8, 6.8.2, and 6.8.3 of my project's final report below.
Lanugages/Tools used: Python, Numpy, Pandas, C, Linux, QNX OS, Velodyne HDl64 LiDAR
Concepts applied: Real-Time Systems, MSE, Cosine Similarity, DBSCAN and HDBSCAN Clustering, Principle Component Analysis, Confidence Metrics, etc.
Project Final Report: Curb Detection with LiDAR Final Report.pdf
Single Snapshot Python Algorithm source: single-snap-detection-python.zip
Real-Time C Algorithm source: real-time-c-algorithm.zip
Raw LiDAR data vs Detected Left and Right Curbs:
(Single snapshot detection in Python)
Below is the Lincoln MKZ simulation using our real-time algorithm. It is worth noting that, due to time constraints, I was not able to re-implement the complete curb detection algorithm that was implemented in Python. That is why there is still noise present outside of the curbs and there is a gap in the curbs adjacent to the vehicle. In the video, the curbs tend to appear and disappear. This is only due to the computer lagging from the burden of the simulation and screen recording at the same time, not because the algorithm is failing.
In this project, my team and I designed a remote controlled car with an ADAS system for lanekeeping and collision avoidance. This is accomplished through the use of infrared sensors to detect course delimters and sonar sensors to detect nearby objects. The vehicle was tested on an obstacle-course as shown in the video in the Media section. The car was built using:
Languages/Tools used: C/C++, Arduino
Concepts applied: Project Design Lifecycle, Real-Time Systems, ADAS, Interrupts, A/D Conversion, Hardware Drivers
Project source code: project-4805-bittersweet-master.zip
Project presentation: SYSC4805 Presentation.pptx
Project Final Report: SYSC4805 Final Report.docx
The car with labeled sensors:
The car circuit diagram:
Video demonstration:
In this project, my team and I designed a security system for users to store documents in an array of safes. Upon entering the correct credentials on a keypad, the according safe's electromagnetic bolt is retracted to open the safe door. Users are only able to open a safe if they have the credentials for it. A prototype safe was built using cardboard and:
Tools used: C/C++, Python, UDP, Arduino, Raspberry Pi, Linux
Concepts applied: Real-Time Systems, Networking
Safe Access Security System source files: safe-access-system.zip
Safe Access Security System project Final Report: 3010 Final Report.pdf
The Safe prototype:
Video demonstration:
A very accurate simulation of a multi-elevator real-time system. The simulation receives elevator calls from different floors at different times and the scheduler selects the best elevator to fulfill the request. A GUI was developped to view the elevators moving from floor to floor. The system includes a logger and a test suite.
Tools used: Java, AWT, Sockets, UDP
Concepts applied: Real-Time Systems, Networking, Logging, Testing
elevator-simulator project files: elevator-simulator.zip
The Elevator System Simulator GUI:
Food Bank is a RESTFul web service written in Java using JAX-RS that allows users to retrieve a list of ingredients available in a food bank.The user can retrieve ingredients based on their name and view the remaining quantity in the food bank. The user can also make API calls to remove items from the bank. The web service is deployed on a GlassFish Server.
Tools used: Java, JAX-RS, JSON, XML, GlassFish Server
Concepts applied: REST APIs
Foodbank REST API files: FoodBankRESTService.zip
Food Bank API source code:
A typical login/sign up form for an online shopping website. The form validation, creation of new users and authentication of users loging in are done using Ajax.
Tools/Languages used: HTML, CSS, JavaScript, Ajax, JSON
HttpRequest Module: HttpRequest.js
The Greenhouse Management System is a real-time embedded system that controls a Motorola M68HC12 microcontroller and its project board. Its goal is to simulate an automated control system for greenhouses. It consists of:
Concepts applied: Real time interrupts (RTIs), interrupt service routines (ISRs), pulse width modulation (PWM), pulse accumulation, A/D conversion algorithms
Project specifications document: GMS specifications.pdf
Greenhouse Managment System .c file: GMS.c
Greenhouse Managment System vector table for interrupts and ISRs: GMSvectors.c
The M68HC12 Motorola microcontroller and its project board containing the thermostat, fan, heater, stepper motor, DC motor, keypad, and LCD:
A classic Tic Tac Toe game for two players written with Java's AWT API and Swing library; the GUI displays the Tic Tac Toe board, a scoreboard, and indicates which player's turn it is. The game menu allows players to start a new game, reset the score or, quit the game.
Tools used: Java AWT API and Swing library for the GUI
Concepts applied: Java Event Model (event listeners and handlers)
Tic Tac Toe files: Tic Tac Toe.zip
Tic Tac Toe files: Tic Tac Toe.jar
The Tic Tac Toe GUI with a scoreboard and a turn indicator:
The same GUI with the game menu:
A text-based chess game for two players that is printed in the console; the row and column indexed chess board is printed with all the chess pieces and the players are prompted to enter coordinates to move their pieces. After a legal move, the board is reprinted in the console and the next player may take his turn. The game also warns players when their oponent has placed them in check.
Concepts applied: Inheritance, Abstraction, Interfacing, UML notations.
Chess Game files: Chess Game.zip
Chess Game files: Chess Game.jar
The Chess Game board printed in the console:
The Chess Game classes in BlueJ IDE:
The Chess Game UML class diagram:
A ratchet is a mechanical tool used to tighten and loosen bolts. The problem with a standard ratchet is that the user must always change the socket according to the bolt size. As a result, ratchet users often carry a large and heavy box of different sized sockets. My partner and I reverse engineered a ratchet and improved it by designing a universal ratchet that only has one socket. The improved ratchet was designed and 3D printed with Creo Parametric 3.0.
The universal ratchet works by means of small retractable metal beams in the ratchet's socket that fit around the bolt once pushed against it. With a solid metal used for the retractable beams, the ratchet's socket tightly grips around any bolt size thus allowing the user to tighten/loosen it.
Design Improvements: To improve our design, the number of rectractable beams in the socket is to be increased to fit a wider range of bolt sizes. The design was intended to have many more beams however we were limited by the accuracy of the 3D plastic printer.
Universal Ratchet Project Report: Universal Ratchet - Reverse Engineering Project Report.docx
Intellicad orthographic drawing of the universal ratchet:
3D rendered solid model of the universal ratchet:
The Home Security System detects intruders across a door or a window. It was designed with an Arduino Uno microcontroller that is connected to LEDs, push-buttons, photoresistors, a piezo, etc. The system works by means of a wide laser pointing into a series of photoresistors; when the photoresistors detect a sudden dramatic change in light, the alarm is triggered. The system is connected to two push-button keypads; one that arms or turns off the alarm and one that acts as a keypad lock on the door of the house which opens the door after the right combination is entered. The keypads also allow the user to set and change the lock and alarm combinations. They are combined with LEDs and a piezo which react depending on whether the proper combination was inputted or not.
Note: The system was built in 2 modules as I only had one Arduino UNO which did not have enough ports for all the peripherals. Unfortunately, my hard drive broke in 2015 and I was not able to recover all the files on my hard drive including the source code and images of the second module consisting of the laser pointing into photoresistors and activating the alarm if intercepted. Lesson learnt: always back up your files!
Concepts applied: Interrupts, interrupt service routines (ISRs), pulse width modulation (PWM), A/D conversion, circuit analysis.
Arduino Keypad Lock code: Alarm_System_Keypad_Lock.ino
The Keypad Lock for the security system with the 0-9 enumerated push-buttons, the LEDs, the piezo, and the stepper motor that opens the door after the right combination is entered. (The alarm keypad is exactly the same minus the stepper motor for opening the door):
Listed below you will find music productions I have completed on my free time. The productions are ordered by date.
Java, C, Python, Javascript, SQL
HTML, CSS
Linux, Git, REST APIs, CMake, bash, Mockito, Swing, AWT, jQuery, Ajax, Eclipse, Jira, Arduino
In 12th grade, I took a computer course in which I learned the basics of programming and digital electronics. I quickly developed a passion for programming and the science behind it. In order to pursue this passion, I decided to enroll at Carleton University in Computer Systems Engineering.
I am a hardworking and ambitious student with a sound understanding of good software design methodologies. I am always driven to learn new things and improve my work. I hope to one day pursue a master's degree in artificial intelligence or quantum computing.