| Domain | Focus & Technologies |
|---|---|
| Languages | C · C++17 · Python · Verilog RTL · Shell |
| Hardware & Firmware | STM32 (Bare-metal) · FPGA (PCIe DMA / BAR0) · Motor PID · IMU / Kalman |
| Edge Compute & Systems | RK3568 / ARM64 Linux · RKNN NPU · Zero-copy Ring Buffer · IPC (Shared Memory) |
| Robotics & Autonomy | ROS 2 Jazzy · Nav2 · Gazebo · SLAM / AMCL · RGB-D / Semantic Costmaps |
| Tools & Vision | CMake · Qt5 / PyQt6 · OpenCV · Git · USB3 Vision |
FPGA + RK3568 PCIe heterogeneous intelligent traffic perception system
- System architecture — A three-thread Qt5 concurrent pipeline (capture / inference / UI) driven by a producer–consumer queue that drops frames on overflow.
- High-speed interconnect — A zero-copy ring buffer built on FPGA PCIe DMA with a BAR0 register protocol.
- Edge deployment — End-to-end YOLOv5 + LPRNet licence-plate recognition on the RKNN NPU, with NEON acceleration and optimised NMS post-processing.
Verilog C++ Qt5 PCIe DMA RKNN ARM64
Vision-language-navigation (VLN) autonomous logistics robot
- ROS 2 architecture — Six-package workspace with a hand-written modular Nav2 launch, switching seamlessly between SLAM mapping and AMCL localisation.
- Chassis control — STM32F407 mecanum-wheel firmware with four-wheel velocity-loop PID and wheel-odometry + IMU fused localisation.
- Simulation & hardware — Gazebo physics modelling validated on a real chassis.
ROS 2 Jazzy Nav2 SLAM STM32 Gazebo Sensor Fusion
RoboMaster power-rune auto-aim and vision solver
- Driver & communication — Self-written C++17 USB3 Vision driver node for a Hikrobot industrial camera (3072×2048 @ 120Hz), with a 0.60px reprojection calibration error.
- Target tracking — A rule state machine combined with a sinusoidal velocity predictor, giving high-precision feed-forward on the rotating rune.
C++17 ROS 2 USB3 Vision OpenCV State Machine
Full-stack host software for a Gowin FPGA multi-protocol debugger
- High-speed streaming — A PyQt6 + PyQtGraph oscilloscope reading a 25 Msps ADC, with time-domain waveforms and a live FFT spectrum.
- Low-level transport — A high-performance C++ Winsock UDP receiver forwarding data over shared memory (IPC).
- Protocol decoding — Hardware-level UART / I²C / SPI / PWM / CAN bus timing decode.
PyQt6 C++ Winsock UDP Shared Memory FFT
✅ Core Capabilities
- Bare-metal firmware — STM32 multi-loop velocity PID, Kalman attitude estimation, fused wheel-odometry + IMU localisation
- Concurrency & data paths — overflow-dropping producer–consumer queues, zero-copy ring buffers, PCIe DMA / BAR0 register interaction
- Host tooling & instrumentation — PyQt6 + PyQtGraph oscilloscope (time domain / FFT), high-speed C++ UDP receiver, shared-memory IPC
- ROS 2 navigation stack — modular hand-written Nav2 launch, SLAM / AMCL dual-mode switching, six-package workspace architecture
🚧 Exploring & Building
- Edge AI acceleration — the full ONNX → RKNN deployment path, NEON optimisation of YOLOv5 / LPRNet on the RK3568 NPU
- Autonomous exploration — coverage path planning with incremental replanning, frontier exploration, 45° slope point-cloud filtering on a real chassis
- Semantic mapping — YOLOv8 + RGB-D fusion into 2.5D semantic costmaps
💡 "From STM32 PWM waveforms all the way up to a ROS 2 navigation stack — the most fascinating moment is when register states, timing constraints and neural-network inference finally line up on the same board."