Introduction:
Throughout his career, Pedro has maintained an active interest in algorithmic development and experimentation, exploring simulations, automated system control, and computer vision techniques well before they entered mainstream discourse.
His approach is hands-on: he builds to understand, grounding each concept in real-world behavior before translating it into a rendered or interactive output.
The projects in this section span two distinct phases — an earlier period built in MATLAB, and a more recent phase developed in C++ and Python with open-source repositories on GitHub. The toolset includes Qt/QML, PyTorch, and MATLAB, across C++, Python, and MATLAB.
Home Studio
[Developed around the middle of 2026]
This project was developed to explore Qt’s QML declarative language, building on prior experience with native Qt application development. The goal was to design and implement a 3D scene setup interface with an integrated renderer, including project configuration management (load/save).
Number and Shape Detection
[Developed around the start of 2026]
This project was developed to explore PyTorch by designing and implementing a convolutional neural network for digit recognition (0–9). The network supports training on custom datasets across configurable numbers of epochs. It builds on an earlier project of similar architecture that used classical image-processing techniques for simple shape detection — a non-neural baseline that informed the CNN design. A CI/CD pipeline was integrated to validate model performance against a defined accuracy threshold on every push.
Cloth Simulation
[Developed around the end of 2021]
This project implemented a particle-based cloth simulation using a mesh of points connected by damped spring constraints. The particles are free in 3D space and respond to gravity, producing a physically plausible cloth behaviour. The simulation was extended with sphere collision detection to demonstrate interaction with a simple rigid body.
Box Collision
[Developed around the end of 2021]
This project implemented a 2D Newtonian physics engine in MATLAB, covering the full simulation pipeline from force integration to collision response. A friction model was required to bring objects to rest, as purely elastic interactions would otherwise produce indefinite sliding. The implementation is computationally straightforward but not optimised for real-time performance, prioritising physical accuracy over execution speed.
Robotic Arm Simulation
[Developed around the end of 2018]
This project implemented a 9-DOF controllable robotic manipulator to demonstrate how a redundant configuration maintains end-effector tracking under simultaneous multi-point structural disturbances. A null-space projection was added to enforce a preferred rest configuration, ensuring the redundant joints converge toward a stable posture even as the end-effector continues to track its target.
Differential Robot Simulation
[Developed around the end of 2018]
This project implemented autonomous navigation for a differential-drive robot in an unknown environment using a combination of SLAM and artificial potential fields. An occupancy grid was built from distance data provided by three sensors via SLAM. Occupied cells generate a repulsive force while the target exerts an attractive force; the robot follows the resultant force gradient to navigate toward the goal.
3D Reconstruction from stereo pair
[Developed around the start of 2022]
This project implemented a stereo vision pipeline that reconstructs 3D geometry from a calibrated pair of cameras using only matched pixel correspondences. The implementation covers the full stereoscopic reconstruction process — from feature detection and matching across both views to triangulation of 3D points — serving as both a working system and a technical explanation of how stereoscopy produces depth from 2D imagery.
Circle and Line detection
[Developed around the end of 2018]
This project implemented the Hough Transform for detecting circles and lines in 2D images. For circles, a 3D accumulator space (x, y, r) was used — each edge vote accumulates in the space defined by the circle’s centre and radius, and the peak cell identifies the detected circle. For lines, the problem reduces to a 2D accumulator space (θ, ρ), voting on orientation and normal offset, with the peak indicating the detected line.










