I'm a robotics software engineer focused on autonomous navigation, perception and ROS.
This site collects the projects I have worked on, from university research
to autonomous robots in industry.
Today you can go through the whole process of building a robot from home: the
Robot Operating System (ROS) gives you the libraries and tools
to build the application, Gazebo lets you design and test your own robots (or reuse existing models),
and Arduino, with its huge amount of tutorials and code, lets you build them physically.
A differential-drive autonomous mobile robot (AMR) navigating a warehouse.
Global localisation based on StarTracker.
Navigation with ROS move_base and the TEB local planner, using three Intel
RealSense D435 cameras to perceive the environment.
3D obstacle mapping with a Spatio-Temporal Voxel Layer built from the
RealSense point clouds (PointCloud2).
Navigation with move_base and the TEB local plannerSpatio-Temporal Voxel Layer from a RealSense D435
From trolley to autonomous robot
Differential drive
StarTracker
Differential motor controller
Path following
Conversion of a trolley into a differential AMR
Conversion of an ordinary trolley into a differential-drive autonomous mobile robot.
Global localisation with StarTracker.
Drive: a differential motor controller was added to the trolley.
Minimal hardware: with no cameras, no other sensors and no obstacle avoidance,
the robot follows a planned route with very high precision.
Industrial AGV
Industry · Full software lifecycle
ROS
TEB local planner
Intel RealSense D435i
StarTracker
RTK GPS / NTRIP
Modbus RS485
Arduino · rosserial
The most complex project I have worked on: making an AGV (Automated Guided Vehicle) navigate
autonomously in an industrial environment, both indoors and outdoors.
Local navigation with the TEB local planner, handling static and dynamic
obstacles (moving at constant velocity). Obstacles were detected with four Intel RealSense
D435i cameras.
Indoor global localisation with StarTracker, accurate to around 1 mm.
Outdoor global localisation with RTK GPS at centimetre precision, using a
base–rover setup over radio or an NTRIP caster. The AGV switched automatically between
StarTracker and GPS when moving between indoors and outdoors, including when reversing.
Drive system: tricycle kinematic model with a 48 V TZ09 brushless DC
motor and two encoders (one on the motor and a more accurate one on the steering wheel),
read over Modbus RS485.
Actuators without a hardware interface were connected through an L298N
H-bridge to an Arduino, which talked to ROS on an Intel NUC via rosserial_arduino, switching
them on and off depending on the AGV's position.
Simulation & computer vision
NVIDIA Isaac Sim · Omniverse
NVIDIA Isaac Sim
Omniverse
Instance segmentation
Isaac Sim is an NVIDIA Omniverse application for photorealistic simulation. Its graphics engine
simulates realistic textures and lighting, which makes it possible to train and test navigation and
perception systems in an environment that is as close to reality as possible.
Photorealistic warehouse in NVIDIA OmniverseComparing computer vision algorithms in a simulated environmentInstance segmentation in Isaac Sim
Person tracking with a robotic camera
Computer vision · Robotic camera control
MMPose
YOLOX
OpenMMLab
Pose estimation
Multi-person tracking
Robotic camera
Person tracking
A real-time person tracking system built with neural networks from the OpenMMLab ecosystem, which
also moves a robotic camera to follow the tracked person automatically.
Person detection with YOLOX, which finds every person in the camera image and
draws a bounding box around them.
Pose estimation with MMPose, which estimates the body keypoints of each
person (head, shoulders, arms, hips and legs) to build their skeleton.
Multi-person tracking: each person receives a unique identifier that is kept
from frame to frame, so the system can tell different people apart and keep following the
right one.
Robotic camera control: the position of the tracked person in the image is
turned into movement commands for a robotic camera, which turns to point in their direction
and follows them as they move around the set.
Valkyrie humanoid: motion detection
University research project
Point Cloud Library
OpenCV
Segmentation
Object tracking
Research project in my final year at university, supervised by Dr Manuel Ocaña, in collaboration
with the University of Edinburgh, who provided videos of the Valkyrie robot performing different
behaviours.
The goal was to detect and identify the robot's movements using the
Point Cloud Library (PCL). I compared several of the
library's segmentation algorithms to find which one suited this task best.
I also used OpenCV for object tracking. The same library can
recognise faces, and even tell apart different people in the same scene.
Robotic arm for automated testing
Industry
HAN'S ROBOT arm
Motion programming
ROS · MoveIt
I used a HAN'S ROBOT arm to automate testing the behaviour of devices over long periods of time.
The arm comes with its own interface to program, record and replay movements automatically.
It can also be controlled from ROS, where MoveIt is a very
useful package.
amigoBot
University
Sensor fusion
Ultrasonic · Laser
Vector Field Histogram
My first contact with a real robot: the amigoBot, a mobile robot used for education and research.
It was very useful to learn sensor fusion with ultrasonic and laser sensors.
Vector Field Histogram (VFH) was one of the first motion planning algorithms I tested. It is a fast
and robust algorithm that builds a histogram grid, a statistical representation of the obstacles
collected from the sensor readings, to decide where the robot can move.
Contact
If you want to talk about robots, a project or an opportunity, send me a message on LinkedIn.