ludvig fellstrom

bobot firmware validation system

Bobot began as an IBM watsonx challenge: give an AI assistant a way to observe and interact with physical Power systems. Working with the firmware validation team turned that idea into a broader lab problem. Four technicians were manually checking system states across roughly 30 servers, then recording test outcomes for engineering review. I worked on the physical test system and the software that made its results useful to the wider Power engineering team.

firmware

I built the actuation and control layer for hardware-in-the-loop Power firmware testing. Raspberry Pi relay control, robotic actuators, cameras, and sensors let the system operate and observe the server panel. Watchdogs, timeouts, interlocks, and safe sequencing kept physical test actions controlled and repeatable.

I performed root-cause analysis of firmware and hardware failures using camera evidence, oscilloscopes, logic analyzers, telemetry, and Linux logs to identify regressions and verify recovery.

Robotic hardware prototype with a camera and linear positioning mechanism
Robotic actuation hardware
KiCad schematic connecting Raspberry Pi GPIO to a relay and 12-volt actuator circuit
Raspberry Pi relay actuation schematic

software

The Python test orchestrator coordinated physical actions with Power system telemetry and firmware fault injection over SSH, Selenium and Telnet. I built a Model Context Protocol (MCP) interface for watsonx Bob agent tool calling, exposing system status, available tests, test execution, and results. Test evidence flowed into IBM Engineering Test Management (ETM) on Jazz.

To keep developers informed, I deployed a DevOps notification system built from three Java/Quarkus microservices. REST APIs, message queues, and PostgreSQL moved development updates and HIL/SIL test results through the services to Slack and email. Web dashboards and ETM gave engineering teams visibility into product progress and test outcomes.

  1. notification sourcemicroservice collecting engineering events and test updates.
  2. business logicmicroservice processing and routing events through the queue.
  3. notification deliverymicroservice sending updates to Slack and email.
Architecture diagram showing notification sources, services, message queues, databases, and Slack and email delivery
Quarkus microservice architecture

computer vision

I trained RTMPose to localize panel landmarks and used ArUco markers to anchor the camera view as the rig or camera position changed. Those locations defined the LED regions to inspect. CNN classifiers then determined whether each indicator was on or off from its image crop, turning a visual check into structured evidence for the firmware test.

I tuned training hyperparameters for reliable classification under changing camera and lab lighting conditions. For edge inference, I built a static INT8 post-training quantization pipeline for RTMPose using NCNN, with KL calibration and 8-bit weights/activations (W8A8).

Power system front panel with labeled regions for green and yellow indicator LEDs
Mapped LED regions for on/off detection
Power system panel with four predicted corner points connected by a yellow outline
RTMPose panel landmark predictions