Embedded Systems & Robotics Engineering
Bridge software and physical reality. Learn how bits turn into voltage, how memory-mapped registers manipulate silicon, how Real-Time OS kernels prevent race conditions, and how autonomous robots navigate using sensor fusion.
Bare-Metal C & Silicon Microcontroller Architecture
Registers, Linker Scripts, Memory-Mapped I/O, and Vector Interrupt Tables on ARM Cortex-M.
What you're experiencing: "Registers & Memory Mapped I/O"
There is no operating system, no stdout, and no safety net. Your program crashed and the microcontroller is in HardFault. You feel blind without a console.
You are stripping away decades of high-level OS abstractions. For the first time, you understand what a CPU really does: fetch, decode, and execute instructions against physical memory addresses.
- Forgetting to enable the peripheral clock before accessing register addresses, triggering an immediate BusFault.
- Not using the `volatile` keyword for hardware registers, leading compiler optimization passes to optimize away hardware poll loops.
Low-Level C: Pointer Arithmetic & Volatile Memory
Struct bitfields, volatile keywords, memory alignment, and casting raw addresses to pointer structs.
ARM Cortex-M Architecture & NVIC Interrupt Controller
Startup code, reset handlers, linker scripts, stack pointers (MSP vs PSP), and priority interrupts.
Capstone: Bare-Metal UART Driver & Shell from Zero Libraries
Write a complete bare-metal serial boot shell on an STM32 or RP2040 without using vendor HAL or standard C library. Configure PLL clock tree to 72MHz, enable USART transmitter/receiver with circular ring buffer interrupts, and implement interactive commands.
Real-Time Operating Systems (RTOS) & Concurrency
Preemptive schedulers, semaphores, mutex priority inheritance, and deterministic thread communication.
What you're experiencing: "FreeRTOS & Deadlocks"
Your single `while(1)` super-loop was becoming unmaintainable with delay timers. Moving to RTOS tasks with independent priorities feels like an incredible leap in power.
You are mastering deterministic concurrency. You understand that real-time does not mean "fast" — it means guaranteed execution deadlines.
- Calling non-ISR-safe FreeRTOS functions inside an Interrupt Service Routine instead of `FromISR` variants.
- Under-allocating task stack size, leading to silent memory corruption when an interrupt pushes context to the stack.
FreeRTOS Architecture & Task Scheduling
Preemptive priority scheduling, task control blocks (TCB), context switching, and tick timers.
Capstone: Multi-Sensor Telemetry Logger with FreeRTOS & Queue Routing
Architect an RTOS telemetry logger. A high-priority sensor task samples an accelerometer via SPI at 200Hz, pushes samples to a thread-safe message queue, and a worker task logs records to an SD card with zero missed deadlines.
Autonomous Robotics, ROS2 & Sensor Fusion
Robot Operating System 2, URDF kinematic chains, Extended Kalman Filtering, and autonomous navigation.
What you're experiencing: "ROS2 & Kinematic Control"
You watch a simulated differential-drive robot navigate a virtual room, avoid obstacles, and build an occupancy grid map in RViz. You are designing autonomous machines.
You have combined control theory, embedded firmware, distributed networking, and computer vision into an integrated robotic system.
- Misaligning coordinate frames in the TF2 transformation tree (e.g. `base_link` vs `odom` vs `map`).
- Relying purely on wheel odometry without IMU sensor fusion, leading to rapid wheel-slip drift.
ROS2 Architecture: Nodes, Topics, Services & Actions
DDS distributed middleware, publish-subscribe topology, lifecycle nodes, and QoS profiles.
Capstone: Autonomous SLAM Navigation Robot with ROS2 & Nav2
Build an autonomous differential drive robot in ROS2 simulation (Gazebo). Implement an Extended Kalman Filter (robot_localization) fusing wheel encoders and IMU, generate a 2D occupancy grid with SLAM Toolbox, and autonomous waypoint navigation with Nav2.