Skip to content

Pedro Librado Uribe Reyes

Robotics, AI & Software Engineer

Monterrey, Nuevo León, México

Experience index

Vanttec year
25-Now
USV Perception Lead
SMALC year
26
SMALC
Robotics Education Volunteer
Botbusters year
25
Botbusters
FTC Robotics Mentor
UC San Diego year
23
Research Assistant
Innobotics year
22—24
Software Lead & Captain
Mexicali Robotics year
16-22
Mexicali Robotics
Software Lead & Captain
Skills Python, C++, Java, ROS 2, YOLO, TensorRT, LiDAR, OpenCV, Embedded Systems, IoT, Edge AI, Computer Vision, DevOps, Docker, Linux, NVIDIA Jetson, STM32, Full-Stack Development

[TODO: replace circular tagline with your own line.]

About

Selfie at home

Background — I grew up in Mexicali, Mexico, and I've been building things for as long as I can remember. Robotics competitions introduced me to engineering early on and shaped the way I work today: learn by building, break things, fix them, and keep improving.

Focus — I enjoy designing systems where hardware, software, and people come together to solve real problems. I work across robotics, AI, embedded systems, and software, with a strong focus on efficiency and on building things that can actually be used to improve everyday life.

Concerns — I believe technology should make things simpler and more efficient, not add complexity for its own sake. I care about building things that go beyond a prototype and become genuinely useful.

Approach — I'm a very social person and I genuinely enjoy working with people. That's also why I've naturally gravitated toward leadership. I like bringing people together, listening to different ideas, helping others grow, and creating an environment where we push each other to do better. At the end of the day, I enjoy building great things, but I enjoy even more building them with great people.

Sitting on the snow with a snowboard

About Me

When I'm not building something, I really enjoy being around people. Spending time with my friends and my girlfriend, going out, watching sports together, or just having a good conversation is a big part of who I am.

Sports are also a huge part of my life. I'm a Barça, Kansas City Chiefs, and Dodgers fan, and I love playing flag football whenever I get the chance. I'm pretty competitive, so I definitely get more invested in games than I probably should.

I've also been playing video games for as long as I can remember, especially Minecraft. I've been playing since version 1.7 and somehow never really stopped, which is also where the inspiration for this website came from.

And there's almost always music playing in the background. I listen to a lot of reggaeton, with Rauw Alejandro being my favorite artist. Overall, I just enjoy having fun, being around the people I care about, trying new things, and making good memories along the way.

Projects

Rebuilt an autonomous surface vehicle’s ROS 2 perception stack after its stereo camera failed, trained its YOLO buoy dataset, and set up onboard serial telemetry, CAN networking, and remote terminal access.

A multi-tenant AI platform that turns customer chats across WhatsApp, Instagram, and Messenger into qualified leads, quotes, and appointments—with a human handoff when needed.

A team-built predictive-maintenance system that learns each HVAC unit’s normal behavior and spots early signs of trouble using edge AI.

A real-time geometric shape classifier built at UC San Diego that pairs a linear SVM with 4-bit quantized weights designed with hardware implementation in mind.

Led robot software, autonomous routines, and PID and feedforward control for FRC Team 6694 across three seasons in Mexicali, Monterrey, and Hermosillo.

A HackMTY 2026 Banorte Challenge project that turns small-business banking and invoice data into grounded insights, generative dashboards, and useful next steps.

Playground

FPGA Controller — FPGA, UART, Digital Systems

A custom hardware controller built on an FPGA to control the simulator through real-time UART communication.

JohnDeereSim pixel-art farming game screenshot

John Deere Simulator — Unity, C#

A 2D farming simulator built in Unity to recreate and visualize tractor operation.

VantTec USV Perception — Perception stack for RoboBoat — 25—Now

VantTec student robotics team, Tecnológico de Monterrey — RoboBoat 2026 season

VantTec builds an autonomous surface vehicle for RoboBoat. The boat must find buoys, markers and docks on open water with no driver. I joined as Perception Lead, owning everything the boat sees and how far away it thinks things are.

Group selfie of students in black team shirts and event lanyards gathered around a small white twin-hull robot boat on a stand, one student holding an RC transmitter, with wiring and electronics visible inside the open hull and a work tent behind them

The task

RoboBoat runs student boats through maritime tasks fully autonomously. The course is set with red and green gate buoys, markers and a dock, and the boat must detect each one, judge distances and navigate between them. Our season goal was a perception stack reliable enough to attempt every task, not just the easy ones.

What I built

I rebuilt the vision pipeline after the boat lost its ZED stereo camera. The new design pairs a Velodyne VLP-16 LiDAR with a USB webcam. YOLO finds buoys and markers as 2D boxes, and my ROS 2 node, lidar_bbox_range_node.py, projects LiDAR points into each box and takes a median range with MAD outlier rejection, publishing 3D positions downstream.

I also trained the YOLO buoy dataset the detector runs on, compiled the TensorRT engine for our hardware, and validated the whole loop in Gazebo Harmonic plus recorded boat data before trusting it near water. On the boat itself I set up the unglamorous plumbing that makes field tests possible: udev rules pinning every serial device, SocketCAN networking, a remote terminal over Holybro radios, and XBee telemetry nodes that republish topics to shore.

Wide view of a lake course with alternating red post buoys and green post buoys floating in lines on dark blue water, a small white robot boat at the left edge, and a red bridge spanning the far shore under a clear sky
Glare, reflections, drifting buoys. This is why the design trusts LiDAR over appearances.

In the water, under pressure

Testing happened in an indoor pool at home and on open lakes at events. The lake means glare, reflections, drifting buoys and a boat that never sits still, which is exactly why the design leans on LiDAR range instead of trusting appearances. When the old depth-camera pipeline silently stopped publishing objects during a task, the logs showed hundreds of detections going in and zero objects coming out. That failure is what the rebuild replaced.

Results

In simulation the new node reported a buoy at about 6.2 meters against a roughly 7 meter ground truth, while throwing out a mirrored false box. On recorded boat data it measured real dock structures at 2 to 5 meters and distant markers out to about 18 meters. We brought this stack to RoboBoat 2026.

Five students standing around the white USV mounted on a wheeled cart on grass, with VANTTEC and Tecnológico de Monterrey branding on the hull and a RoboBoat feather flag beside them
The white twin-hull robot boat floating in a lane of a large indoor swimming pool with Tec Borregos banners on the far wall

My role

As Perception Lead I owned the camera-to-distance path end to end: dataset, detector, ranging node, calibration tooling and the boat-side comms that let us test. I learned that the boring parts decide competitions, since a perfect detector means nothing if its output never reaches the boat. I worked with the wider VantTec student team across software, electrical and mechanical subgroups.

Stack: ROS 2 Humble, Python, C++, OpenCV, NumPy, TensorRT, ONNX, YOLO, Velodyne VLP-16, Gazebo Harmonic, rosbag2, Docker, NVIDIA Jetson, SocketCAN, XBee telemetry, systemd, Git

Team: USV Perception Lead, working with the VantTec student robotics team.

Uribot — AI automation for small businesses — 25—Now

From the first customer message to the next business action

Uribot is an AI automation platform for small businesses. It started with a real automotive workshop and grew into a multi-tenant system for answering customer questions, qualifying leads, preparing quotes, and booking appointments across messaging channels.

Uribot answering an oil-change price question with exact peso prices, then offering to book an appointment
Quote first, booking second. Exact prices from the price list, not from the model's imagination. Personal details removed.

From conversation to action

Uribot does more than draft replies. The AI identifies what the customer needs, then calls a business tool for information or an action. For an automotive shop, it can collect the vehicle and service details, use cotizador_global() to retrieve a quote, call mas_info_servicio() for follow-up questions, and use agendar_cita() to offer a booking. If a person should take over, esperando_asesor() routes the conversation to a human in Chatwoot.

The model manages intent and conversation; configured tools handle prices, schedules, and business rules so the assistant has a reliable source for its answers.

One platform, each business’s own rules

Uribot keeps each tenant’s prompts, services, pricing, schedules, enabled tools, and conversations separate. The same platform can therefore support different customer workflows without spinning up a one-off bot and backend for every business.

Uribot architecture: messaging channels reach Chatwoot webhooks, a Flask app ingests and batches messages, an LLM orchestrator with function calling drives business tools, calendar and event logging, backed by database and queue storage
The full path in one diagram, from channel to tool call to reply. Open it for a full-size view.

Reliable conversations, not one-message-at-a-time replies

Customers often send details across several short messages. Uribot uses Redis to batch message bursts by account and conversation, then responds with the combined context instead of reacting separately to every fragment. Conversations, messages, quotations, appointments, and tool activity are persisted so the business can follow what happened.

Chatwoot brings WhatsApp, Instagram, Messenger, and other channels into one inbox. When automation reaches its limit, the handoff keeps the conversation available to a human advisor instead of trapping the customer in a bot loop.

The booking is the metric that matters

A quote request for a 2013 Escape turns into a scheduled morning appointment: branch options, shop hours, all pulled from business data, without a human typing a word. Every conversation, quote, appointment and handoff is persisted, so the shop can see exactly what the automation did.

Built for real businesses

The first use case came from the repetitive questions and service quotations at an automotive workshop. I shaped Uribot beyond that single workflow into a configurable platform for SMBs. Other industries such as restaurants, clinics, retail or real estate remain platform concepts until they run on Uribot.

My role

As founder, I designed and built Uribot across product and software engineering: the multi-tenant architecture, conversation engine, AI tool system, channel integrations, data layer, and deployment infrastructure. I also shaped the product experience and the workflows that let automation hand off to a person when needed.

Uribot has generated approximately US$1,500 to date.

Self-managed production infrastructure

Uribot runs on a containerized stack managed with Coolify. Traefik routes traffic to the API and Chatwoot, while PostgreSQL stores business and conversation data, Redis handles message coordination, and MinIO provides object storage. Keeping the services together makes the platform’s deployments and operations manageable end to end.

Stack: Python, Flask, OpenAI, PostgreSQL, Redis, Chatwoot, MinIO, Docker, Coolify, Traefik

Role: Founder · Product & Software Engineering

Visit uribot.chat ↗

SentinelBox — Catching HVAC failures before they happen — 26

Predictive maintenance, right at the edge

SentinelBox helps catch HVAC problems before they become breakdowns. The team built a retrofit prototype that learns each unit’s normal behavior from operating data, then flags unusual changes locally—without depending on the cloud.

SentinelBox gateway mounted inside a rooftop HVAC unit, with the HVAC control board visible beside it
The install goal: one gateway living inside each rooftop unit.

The problem

Most maintenance starts after performance has already dropped. Fixed thresholds can also be a poor fit across units: what is normal for one fan may look like a fault on another. Early clues are present in operating signals, but they are rarely used to anticipate failure.

Start with a practical MVP

I helped shape the MVP around three non-negotiables: build on signals available from the HVAC equipment, keep installation plug-and-play, and make the health decision without requiring internet access. The design pairs current and temperature readings with vibration sensing, adding a gateway that can process data on site.

SentinelBox electronics prototype on a workbench, with ESP32 boards, sensor wiring, and a test fan

From sensor readings to an early warning

The HVAC nodes send their readings to the ESP32 gateway over UART. The gateway adds vibration measurements, compares each unit against its own learned baseline, and runs a compact neural network on-device. It then sends readings to a local dashboard, where the team could inspect equipment health, trends, and likely causes. Keeping inference on the gateway means the system can make its decision without a cloud round trip.

Instead of assuming every fan behaves the same, SentinelBox learns a baseline for each unit. After roughly 90 seconds of learning, it can watch for meaningful deviations and surface a maintenance state.

Edge-computing pipeline: HVAC sensor readings and gateway vibration data feed a learned baseline and on-device neural network, which produces health alerts for the local dashboard
SentinelBox processes the sensor data at the edge. Open the diagram for a full-size view.

A building view for maintenance teams

The local dashboard turns model output into a view of the building: staff can select a unit, see its current health, and inspect which sensor is driving a warning. I created the first draft of the 3D building view as part of the server and dashboard integration.

SentinelBox dashboard showing the 3D building view, two monitored HVAC units, health scores, and a vibration warning
Staff pick a unit, see its health, and find which sensor is complaining.
3D digital twin showing a building with two rooftop HVAC units and their health states

My contributions

I designed and built the electronics, and worked with a teammate on the UART communication that connected the HVAC nodes to the gateway. I also connected ESP32 readings to the server, created the first draft of the 3D building view, and contributed to developing the model. Across the project, I helped translate the MVP idea into a working system alongside the rest of the team.

SentinelBox project team and mentors holding the first-place hackathon award
First place, Carrier Keep It Cool 2026.

Prototype results

SentinelBox won 1st place at Carrier’s 2026 Keep It Cool Hackathon. In the project’s controlled prototype validation, the team reported a 6-second average detection time, a 90-second baseline-learning period, and a 0% false-alarm rate. These are prototype test results, not a claim of long-term field performance.

Built by a team

SentinelBox was developed collaboratively by Eduardo Pérez, Pedro Uribe, Alejandro Chio, Emiliano Méndez, and Miguelangel Rodríguez.

Stack: ESP32, C/C++, UART, MPU6500, INA219, MAX6675, embedded neural network, Next.js, SQLite

Explore the SentinelBox repository ↗

High-performance processor design for artificial intelligence — UCSD ENLACE — 23

High-performance processor design for artificial intelligence — UCSD ENLACE, summer 2023

ShapeDetectionAI is a real-time shape classifier I built as a research intern at UC San Diego: a linear SVM that recognizes circles, squares, triangles, and stars from tiny 16×16 images, then runs live from a webcam. The twist is hardware thinking — the learned weights are quantized down to 4-bit integers so the same dot-product decision could map efficiently onto silicon.

Closing conference slide: High-performance processor design for artificial intelligence, presented at UC San Diego
Final talk of the summer, presented with Omar Dario Martinez Blackaller.

The research setting

June–August 2023, ENLACE Summer Research Program in the Vertically-integrated VLSI Information Processing Lab with Prof. Mingu Kang and mentors Chang Eun Song, Zihan Xia, and Ashkan Moradi, alongside Omar Dario Martinez Blackaller. The lab studies how machine-learning models can run on efficient custom hardware, so every software choice had a hardware cost in mind.

I joined a multicultural team of researchers and PhDs from different backgrounds, shared findings with the academic community, and stayed hands-on from data prep through live demo and final talk.

Xilinx ZYNQ development board used during high-performance AI processor research
Why the weights had to shrink to 4-bit integers. This board charges for every multiply-add.

How the classifier works

The notebook pipeline is deliberately small enough to reason about in hardware: load PNGs per shape class, resize to 16×16 with OpenCV, convert to grayscale, flatten to a 256-dimensional vector. Training uses a one-vs-all split — pick a target_shape (circle, square, triangle, or star), binarize labels to 1 / 0, and fit SVC(kernel='linear') from scikit-learn.

Inference is a single decision: dot(w, pixels) + b > 0. For webcam frames the image is resized the same way, thresholded at 100 into a binary image, and passed through that same dot product — “this image is a square :)” or not.

Quantized for hardware, without losing accuracy

Float weights are cheap in Colab and expensive on chip. I scaled the learned coefficients by 50, rounded to integers, then clipped to a 4-bit range of −8 to 7 — the range called out directly in the notebook. Re-running the 3,000-image test split with only integer w_int / b_int held 98%+ accuracy, showing the model survives aggressive quantization and stays a cheap integer dot product.

Research team of four posing together in the UCSD lab

Live from the webcam

The Colab demo captures a photo through the browser with JavaScript, decodes it from base64 to photo.jpg, then runs the exact training-time preprocessing before the quantized decision. No server round trip for the math itself — capture, resize, binarize, dot product, answer.

Presented twice

First at the ENLACE closing conference at UC San Diego, presenting our contributions and experience to the program. Then as an invited speaker at the UCSD-ENLACE-México Symposium at Instituto Tecnológico de Tijuana in September 2023, presenting the research topic to an audience of upper- and middle-higher-level students and teachers to promote science and technology.

With Olivia Graeve, holding the UC San Diego ENLACE 2023 certificate of participation
With Olivia Graeve at the ENLACE closing ceremony. Summer research, 26 June to 11 August 2023, La Jolla.

My role

As researcher I built the SVM training and quantization flow in the notebook, ran the webcam classification loop, and contributed to the hardware-oriented analysis. Just as important was the teamwork: collaborating across backgrounds, communicating findings clearly, and carrying the work through two public presentations.

Stack: Python, OpenCV, scikit-learn, NumPy, Matplotlib, Google Colab, Xilinx ZYNQ

Team: UCSD ENLACE Summer Research 2023 · Vertically-integrated VLSI Information Processing Lab · Prof. Mingu Kang · Mentors Chang Eun Song, Zihan Xia, Ashkan Moradi · with Omar Dario Martinez Blackaller

Explore the ShapeDetectionAI repository ↗

Innobotics FRC 6694 — Competition robotics software and leadership — 22—25

FRC Team 6694 Innobotics. Mexicali, Monterrey and Hermosillo, 2022 to 2025

Three seasons of FIRST Robotics Competition as Software Lead and Captain. I owned the robot code, the subsystems, the autonomous routines, and the PID and feedforward tuning, and I helped lead a student-run team through build season, regionals and playoffs in Monterrey and Hermosillo.

FRC Team 6694 robot on the CRESCENDO field, lined up at the speaker

My path: wrenches first, code second

I did not start in software. My first two seasons were in mechanics, cutting, drilling and assembling, learning every tool in the workshop, because I wanted to understand the whole robot before picking a specialty. That decision paid off. In my second year the team trusted me as captain, leading people through jobs I had done myself.

Then in my third year I moved to what I had always wanted: programming, as Software Lead. Knowing the machine from the inside changed how I wrote code. Every setpoint I tuned, I could picture the gearbox behind it and the pit crew who would have to fix it if I got it wrong.

What I built

The 2024 robot code is Java on WPILib, organized the way WPILib wants: subsystems for the drivetrain, intake, launcher, shooter, arm and both climbers, plus small command classes, all wired together in RobotContainer. My main job was making the mechanisms behave the same way every time, with PID plus feedforward tuning and NetworkTables telemetry so we could debug from the driver station.

My favorite detail is a small rule with a big effect. The robot will not shoot until the shooter wheels are truly up to speed. Pressing X runs a check on atSetpoint(). If the wheels are there, the feeder fires a note into them. If not, nothing happens. No hopeful shots and no jammed notes. Underneath, the shooter is a PIDSubsystem with a feedforward model, measured by an encoder with a set tolerance, and it streams Shooter Rate and At Setpoint to SmartDashboard. Those were the numbers we stared at between matches.

The rest of the machine plays from one Xbox controller. Right bumper spins the shooter up, left bumper stops it, B grabs a note, A spits one back out, and the D-pad walks the arm through tuned positions. The repo even keeps our homework: SysId characterization routines and DataLog configs, because we measured the real motors instead of guessing constants.

Innobotics team celebrating on the field with the team flag while a teammate reviews code on a laptop

Operating under match pressure

At the driver station there is no pause button. You read the telemetry, trust the autonomous routine you tested in the pit, and talk to your crew. I spent matches behind the glass with the team, calling plays and watching mechanisms we had tuned for weeks do their job in seconds.

Drive team member in a 6694 jersey at the alliance station glass with match telemetry on a laptop

Results that stuck

Hermosillo 2024 brought a 3rd place regional finish plus the Spirit Award. Monterrey 2023 brought a 5th place finish plus the Imagery Award. The Spirit Award means the most to me. It goes to the team with the heart, and we were loud, united and proud of the machine we built together.

None of it came fast. Build season is long nights in the shop doing work that takes hours and cannot be rushed, and those nights teach you dedication and patience whether you planned to learn them or not.

2024 Team Spirit Award plaque and trophy from Regional Hermosillo held in front of 6694 jerseys
Innobotics pit crew posing with the 6694 robot in the team pit
Where the long hours happened: workshop tools, wiring fixes and code deploys between matches.
Full Innobotics team holding a 6694 banner outside the Regional Hermosillo CRESCENDO venue

My role

As Software Lead and Captain I owned the robot code and the controls tuning, ran the software side of match preparation, and helped lead the team on and off the field. That meant everything from running workshop tools during build season to coordinating the drive crew at regionals.

Stack: Java, WPILib, PID + feedforward control, NetworkTables, Gradle

Team: FRC Team 6694 Innobotics · Software Lead & Captain · Feb 2022 – Jan 2025

Explore the RobotCode2024_6694 repository ↗

MiNorte — An AI financial team for small businesses — 26

A financial team inside your Banorte account

MiNorte helps small businesses understand their numbers and decide what to do next. It brings banking and invoice data together, calculates the financial facts deterministically, then uses AI to explain them in plain language and shape a useful interface around each insight.

MiNorte logo on a light background
Built for the Banorte Challenge at HackMTY 2026.

The Banorte Challenge at HackMTY 2026

The brief called for AI agents that generate interfaces in real time, an open use case in financial services, and required MCP. MiNorte brought those constraints together around a concrete small-business need: turning financial activity into understandable, evidence-backed guidance.

The engine calculates. The AI explains.

Financial answers are only useful when the numbers can be trusted. MiNorte’s deterministic engine handles calculations such as cash flow, profitability, tax estimates, reconciliation, and receivables. AI agents use MCP tools to retrieve that verified information, explain what it means, and help owners explore decisions—without making up financial figures.

MiNorte architecture: FastAPI financial engine, AI agents and MCP tools connect through validated UI schemas to a Next.js workspace and Supabase Postgres
Math lives in the engine, words live in the agents. Open the diagram for a full-size view.

Interfaces generated from real needs

An Analyst finds and ranks insights with supporting evidence. A UI Designer turns those insights into cards from a validated component catalog, so the workspace can adapt its visual explanation while staying within a predictable interface system.

The weekly view brings together key financial indicators, recommended actions, and discoveries. In chat, owners can ask follow-up questions, compare scenarios such as a hire or loan, and inspect the evidence behind an answer.

MiNorte weekly financial workspace with prioritized actions, discoveries, and financial visualizations

From insight to action

MiNorte connects analysis to everyday operations: it can surface overdue receivables and support collection follow-ups, while a receipt-to-invoice workflow helps move a purchase toward CFDI issuance. The Playwright browser flow pauses for human confirmation before irreversible steps.

My contributions, alongside the team

I spent most of my time building the systems behind MiNorte—the financial logic, backend, MCP tools, and AI workflows that turn business data into useful insights and dashboard cards. I also helped shape the product and sketched the first interface. My teammates brought the frontend to life and built the Playwright ticket-automation flow, based on an idea I contributed. We built the project together.

MiNorte was a collaborative HackMTY project, with the team bringing the financial workflows, interface, AI, and browser automation together.

Built for the Banorte challenge

MiNorte demonstrates one way to make real-time AI interfaces useful in financial services: let reliable systems own the math, give agents structured tools through MCP, and make the result legible and actionable for the person running the business.

Stack: Python, FastAPI, Next.js 14, TypeScript, Supabase/Postgres, OpenAI, MCP, Playwright

Team: A collaborative HackMTY 2026 project: I focused on product logic and backend systems, while teammates implemented the frontend and Playwright ticket-automation flow.

Explore the MiNorte repository ↗