February 18, 2026

Issues log

Fall Issues Log

Issue NumberDate FoundDate FixedOwnerOriginDescriptionResolution
1Sep 2026Sep 2026Amily, AtiravSponsor FeedbackA second ankle exoskeleton for a bilateral system had been planned (CAD review, BOM, inventory check, and purchasing list completed), but Prof. Kang questioned whether building more hardware was the right priority, since it would take significant time and add little research contribution compared to improving the controller.Team unanimously decided, with sponsor backing, to stay with a single exoskeleton. Effort split set at 75/25 controller/hardware from September into October, moving to 100% controller from October into November; Jira timeline updated to reflect this.
2Sep 2026Sep 2026AmilyData InfrastructureWhile setting up the Hugging Face dataset for automatic data backup, the repository was accidentally created with the MIT License instead of the intended CC BY 4.0, and the license cannot be changed after creation.Amily is investigating whether the existing dataset can be migrated with the correct license while preserving collected data. Fallback is to create a new dataset repository with CC BY 4.0 and update the upload pipeline.
3Sep 2026Sep 2026Atirav, AmilyMechanical DesignThe original 1/16″ 7×7 braided steel Bowden cable (96 lb working load limit) was undersized for the ~117 lb (523 N) peak cable force, especially given the high-jerk torque profile from the controller, and the cable repeatedly went slack during last semester’s testing.Upgraded to 3/32″ 7×7 aircraft cable (920 lb breaking limit), combined with a planned soft-start motion profile to reduce jerk. Amily also investigating the root cause of slack (cable deformation, crimping, tensioning mechanism, or dynamic loading).
4Sep 2026Sep 2026Narayanan, AtiravSoftware / CalibrationIMU frame calibration fits were unreliable: iterative Euler-angle optimization sometimes converged to a reflection instead of a rotation with a small residual masking the error, and phase alignment using gyro magnitude locked onto a rotation 180° off while appearing confident.Switched to a closed-form Kabsch solution with a determinant check (det R = +1), added an explicit lever-arm term for accelerometers, scored candidate lags by the rotation-fit residual, and averaged fits across all trial pairs with outlier rejection.
5Sep 2026Sep 2026NarayananSensor IntegrationThe ankle encoder has no physical zero: its raw power-on reading clustered near one value in most sessions but was ~90° off in another, indistinguishable from a fault without direct checking.Implemented per-session homing using a quiet-stand median with an IQR-based stillness check, 0/360 wraparound handling, and a startup sanity check. Encoder sign and mechanical ratio fitted with Atirav using waveform correlation and a slow sweep.
6Sep 2026Nov 2026AtiravElectronics DesignThe proto-board header connections used to wire sensors in parallel for power and I2C caused high-frequency noise and NaN values, the connectors could be plugged in reversed, and an AS5600 encoder was damaged by ESD.Atirav designed a sensor connector PCB with ESDS302DBVR ESD protection on SDA/SCL, 47 µF bulk capacitors, and 100 nF bypass capacitors at each sensor, plus a move to shielded twisted-pair cabling. The PCB was delayed (see Issue 17), so an interim hand-built board was used instead.
7Sep 2026Sep 2026Amily, AtiravMechanical Design / ProcurementExisting barrel adjusters could not fit the thicker 3/32″ cable. Drilling them out (suggested by the OpenExo team) would thin the walls and often deformed the part, and the lab lacked a suitable clamp. An M10 adjuster would not fit the CAD envelope without re-machining aluminum parts.Ordered M7 and M8 barrel adjusters with matching nuts to check fit within the existing design envelope; the M8 nut was confirmed to fit.
8Sep 2026Sep 2026Pawan, AmilyElectronics / EmbeddedThe shared I2C bus (two BNO085 IMUs, AS5600 encoder, ADS1115 ADC) was limited by the Jetson’s default 100 kHz clock, falling short of the 100–200 Hz sampling target. The Jetson’s 400 kHz-capable port was broken.Amily found the bus speed could be changed via the Linux device tree; Pawan reconfigured the working port to 400 kHz, reaching a stable 198 Hz full-sensor sweep. Moving the IMUs to SPI was documented as a fallback if more headroom is needed.
9Sep 2026Sep 2026Pawan, AtiravElectronics DesignSensors repeatedly dropped off the I2C bus when the Jetson was powered from a separate wall adapter/DC supply for bench work, requiring 20+ unit checks across connectors, cables, and sensors to isolate.Root cause was no common ground between the Jetson and sensor power domains. Grounds are now explicitly bonded between the Jetson and the sensor buck-boost converter regardless of the Jetson’s power source, and the requirement was added to the bench setup notes.
10Sep 2026Oct 2026GautamDataset MismatchOptimization-based fitting of the GaTech-to-exo IMU transformation frequently converged to local minima, reaching only ~60–70% accuracy, with the lowest accuracy on the most important axes (accelerometer z, gyroscope x). Adding constraints added complexity with little benefit.Team shifted to estimating GaTech IMU placement through simulation (Gautam in Simulink, Amily in MuJoCo using motion capture data) and deriving the transformation from the estimated sensor positions.
11Oct 2026Oct 2026Amily, AtiravSoftware / TestingDuring the sensor rate and read-failure test (Test 1), the data collection process occasionally stalled for ~19–54 ms, causing failures even though the sensors themselves were meeting their rates. The stall was traced to Python’s garbage collector slowing down as the logger buffered ~500,000 rows.Suspended garbage collection during runs and pinned the logger to a single CPU core (real-time scheduling was not available without root access). Test 1 passed on repeated bench runs; walking conditions still pending.
12Oct 2026Oct 2026Amily, AtiravTest DesignFrozen-data test (Test 2) criteria incorrectly flagged healthy sensors: unloaded FSRs naturally stay near-constant, and the encoder holds the same value for ~12–15 samples near swing reversal, exceeding the original 5-sample threshold.Revised the test so each channel is only evaluated while its own input is active, and changed the encoder unchanged-value limit from 5 samples to 50 ms. Bench test then passed and flagged only the intentionally frozen shank gyro (positive control).
13Oct 2026Oct 2026Amily, AtiravSoftware / TimingRead-time skew test (Test 3) met the 10 ms 99th-percentile limit, but 0.13–0.20% of control loops reused a stale IMU reading during ankle motion, exceeding the 0.1% tolerance. Traced to the logger’s catch-up scheduling starting a loop early before a new IMU sample was available.Team plans to switch to a fixed 10 ms loop deadline instead of catch-up scheduling and rerun the test. Amily later found IMU packet intervals vary from ~7–13 ms, so some loops get no new packet and the next gets two; timestamp-based freshness checks are being considered.
14Oct 2026Oct 2026GautamDataset MismatchTransformation matrices between GaTech and exoskeleton IMU locations, derived from a Simulink walking model with mounted virtual IMUs, were not accurate enough to test on the exoskeleton.Team moved to a MuJoCo model driven by GaTech motion capture data (Amily) to fit IMU position and orientation. Gautam’s Simulink results were used to cross-validate, with both placing the shank IMU at ~3/4 shank length.
15Oct 2026Oct 2026PawanSensor IntegrationIMU frame transformation errors are silent: a flipped axis sign or swapped axis produces a believable but wrong signal that would surface later as an apparent controller tuning problem rather than a data problem.Pawan validated every axis against physical references instead of mounting drawings: gravity at standing pose to confirm accelerometer axis and sign, and deliberate dorsiflexion/plantarflexion to confirm gyro signs. Transformed signals were then compared against GaTech channels during standing and walking.
16Oct 2026Oct 2026NarayananSoftware / EvaluationRunning the new waveform metrics package on real data exposed two bugs: CMC saturated at 1.0 with many strides, and peak metrics took the maximum value, missing the negative push-off peak.Rewrote CMC using the Kadaba formula and changed peak detection to follow the signal’s dominant direction, improving per-stride peak ICC from 0.13 to 0.72.
17Oct 2026Nov 2026AtiravProcurementThe custom sensor connector PCB was delayed due to miscommunication with JLCPCB over email for their PCBA service; a reply sent to JLCPCB was never acknowledged.Atirav built an interim board on an MRSD lab protoboard with 2.54 mm JST connectors, bypass and bulk capacitors, silvered copper wiring, and a custom standoff to insulate it from the aluminum frame. ESD protection now comes from the TVS diodes built into the Adafruit sensor breakouts.
18Oct 2026Oct 2026Atirav, PawanElectronics DesignThe off-brand AS5600 encoder breakout failed again (the second one lost) and took the ADS1115 ADC with it. The most likely cause is ESD from the velcro backmount, which generates static on every don/doff.Switched to the Adafruit AS5600 breakout with built-in TVS diodes and I2C pull-ups; Atirav designed a new encoder mount for its hole pattern with larger openings for the JST SH connectors. Distal sensors rewired with fresh JST crimps and grounded to a single point on the frame, and wiring checked to confirm ground is not tied to the wearer.
19Oct 2026Oct 2026Atirav, AmilySoftware / SafetyThe new 3/32″ cable snapped during testing. An error in the CAN exit message structure sent a non-zero “stop” command that was actually a full-torque command, and the torque limit function was scaling applied torque up by 4x due to a pre-scaler.Fixed the CAN exit message in both deployment and testing code and synced the change across all branches. Added global torque thresholds to the actuator driver so no rogue commands can reach the motor. Amily repaired the cable assembly so testing could continue.
20Oct 2026Oct 2026Narayanan, PawanSoftware / ControlsIn the first powered run of the ML controller (85 strides), the torque sent to the motor was the mirror image of the model’s output, so the exoskeleton resisted the wearer. The assistance scale was also set to 0.2 instead of 0.02, so requests reached ~21 N·m and were clipped at the 2 N·m limit, flattening the torque waveform.Corrected the sign convention between controller output and motor driver and restored the intended 0.02 scale. Added a bench check that commands a known low torque and confirms direction at the output before the exoskeleton goes on a person.
21Oct 2026Oct 2026AmilyManufacturing / ToolingCutting and crimping the thicker 3/32″ cable was much harder than expected; the lab’s cutters and crimpers were not adequate for a reliable crimp, even with body weight applied. Since the crimp is in the main force path, a weak crimp could fail even if the cable is strong enough.Cable replacement was completed manually. Team plans to source proper cutting and crimping tools and run a controlled pull test on crimped connections before installing them on the exoskeleton.
22Oct 2026Oct 2026GautamSoftware / PerformanceThe CAN-to-control loop test initially showed very high latency because the TCN model used a large amount of memory. Under full load, the loop averaged 86.87 Hz, short of the 100 Hz target.Parallelized the model code on the Jetson’s GPU and moved the deployment code to NumPy-only data structures, roughly halving latency. The later end-to-end latency test confirmed the full pipeline runs above 100 Hz with each cycle under 10 ms.
23Nov 2026Nov 2026Gautam, AmilyElectronics / EmbeddedIMUs restarted with I2C errors (Errno 121) whenever the motor driver was powered: with the actuator on at 0 N·m, 22 of 33 sensor checks failed, the foot IMU restarted 19 times, and the foot accelerometer missed 86.8% of samples. Failures also occurred on the bench with the motor powered.Gautam isolated the cause with a dropout monitor and a zero-torque CAN sender, pointing to the powered motor driver rather than walking motion. Later 60 s and 180 s runs showed no dropouts or only short gaps (max 67 ms). Amily separated true dropouts from normal 7–13 ms packet timing jitter. Monitoring continues under full walking load.
24Nov 2026Nov 2026GautamSoftware / ControlsTwo problems in the TBE controller: a single heel strike could be recorded twice, corrupting stride counts and times, and FSR reads could fail with an I2C error (Errno 121), likely from motor noise, which stopped the control loop.Heel strikes are now only accepted 0.5 s after the previous one. Each FSR read retries twice with a 3 ms timeout and holds the previous value if missed, with a safe stop after 75 consecutive failures (~0.5 s). Shutdown path restructured so motor torque is always zeroed and buses released on any exit.
25Nov 2026Nov 2026Atirav, AmilyTesting / LogisticsThe scheduled EMG data collection session at the MetaMobility Lab was lost because the exoskeleton could not read valid sensor signals, even though the sensors appeared connected. The session ended before the issue was found.Root cause was a loose ground cable in the sensor wiring; Atirav rewired the connection and data collection was completed a few days later. Team plans to run a sensor and wiring check before every lab session.
26Nov 2026Nov 2026Narayanan, AtiravControls / TuningThe wearer reported poorly timed assistance. Narayanan first trained TCN variants predicting 50–150 ms ahead to compensate for suspected lag, but later feedback showed assistance was actually arriving too early, so predicting further ahead moved timing the wrong way.Added a configurable output delay buffer that holds predictions before sending them to the actuator, clears on swing or when assistance is disabled, and can be set from the dashboard. Delayed trials felt better to the wearer and reduced lateral gastrocnemius EMG versus TBE.
27Nov 2026Nov 2026AtiravMechanical DesignAt higher assistance levels enabled by the thicker cable, the shoe was not rigid enough to transmit torque from the exoskeleton to the foot and visibly deformed under load.Filled the sole of the shoe with hot glue, making the joint much more rigid and giving a firm connection to the exoskeleton.
28Nov 2026Nov 2026PawanMechanical DesignDuring extended lab trials, nuts on the assembly loosened with prolonged use, and the subject found the extruding bolts uncomfortable; both issues could end a session early.Refitted the loosened nuts with locknuts and covered extruding bolts with plastic caps. Team will confirm both fixes hold through a full-length session.

Spring Issues Log

Issue NumberDate FoundDate Fixed OwnerOriginDescriptionResolution
1Jan 2026Jan 2026AtiravSponsor FeedbackDr. Kang requested a design change from insole foot plate to permanently securing a shoe/boot to the exoskeleton, requiring ~30% of the ankle assembly to be redesigned.Atirav redesigned the ankle assembly with the new shoe-mounted approach. Resulted in a 1.5-week schedule backlog and parts re-sourcing.
2Jan 2026Jan 2026Narayanan, PawanDataset MismatchIMU placement on the exoskeleton (lateral ankle) differs from the Georgia Tech EPIC dataset (dorsal midfoot), creating a mismatch for TCN model training.Narayanan is investigating coordinate transformation matrices. Pawan is validating sensor orientation alignment with the model’s expected input format.
3Jan 2026Feb 2026GautamMechanical DesignElectronics enclosure exceeded 500g in initial ABS prototype and was poorly positioned on the lower back, interfering with walking comfort.Gautam relocated the enclosure to the upper back, removed the lid, reduced wall thickness, added triangular cutouts, and integrated truss-like reinforcements, reducing weight to ~220g.
4Jan 2026Jan 2026AmilyDesign Trade-offBalancing weight optimization against structural integrity across the system — excess mass on distal segments directly undermines the exoskeleton’s metabolic cost reduction goal.Amily selectively reinforced high-stress regions while removing material from low-load areas, and prioritized lightweight materials for COTS components.
5Jan 2026Feb 2026Pawan, AtiravProcurementIncorrect dimension magnets were ordered for motor encoders, causing inconsistent quadrature signals during testing.Correct magnets specified after consulting datasheets: diametric magnetization, 6mm diameter, 2.5mm thickness.
6Jan 2026Jan 2026AtiravProcurementBattery initially sourced from Hobbyking could not be purchased due to an unresponsive vendor page.Atirav sourced an alternative battery with similar specifications from Horizon Hobby.
7Feb 2026Feb 2026Atirav, PawanProcurement / LogisticsLi-Po batteries held up in shipping, possibly lost in transit or in the mail room, preventing full mobile power system testing.Team using benchtop power supplies for subsystem validation while coordinating with Chris to locate the shipment.
8Feb 2026Feb 2026GautamElectronics DesignSensors (FSRs, IMUs, encoder) require 3-5A of current, which the Jetson Orin Nano cannot supply through its GPIO pins.Added a second buck-boost converter to the back casing to amplify current signals to the sensors.
9Feb 2026Feb 2026GautamMechanical DesignCasing weight increased again after adding second buck-boost converter; previous 220g design with truss structures was no longer light enough.Reduced wall thickness from 3mm to 2.5mm and switched to hexagonal honeycomb cutouts on all surfaces, reducing weight from 220g to 150g.
10Feb 2026Feb 2026NarayananDataset QualityLevel-ground walking dataset contained faulty ground truth torques due to a defective FSR during data collection, causing poor TCN model performance.Sponsor at Meta Mobility Lab confirmed the issue and recommended switching to treadmill dataset. Model retrained on treadmill data with good torque tracking results.
11Feb 2026Feb 2026AtiravManufacturingWater-jet machined aluminum parts (chassis and shoe mount plate) arrived with missing features/holes.Missing features manually filed and drilled by Atirav. Time-consuming due to manual process and eyeballed dimensions.
12Feb 2026Feb 2026AtiravManufacturingSmall design flaw discovered in 3D-printed chassis parts during assembly.Revised version of 3D-printed parts being reprinted to correct the issue.
13Feb 2026Feb 2026AmilyDesign Trade-offConventional FEA is unreliable for 3D-printed components due to anisotropic material properties and layer-dependent strength.Using conservative design approach based on expected load paths and mechanical intuition. Physical validation tests planned for next semester.
14Feb 2026Feb 2026TeamLab OperationsCommon lab inventory items frequently misplaced, wasting time locating fasteners and components during assembly.Team began maintaining a personal inventory tracker to record locations of regularly used items.
15Feb 2026Feb 2026TBE ControllerGautamActuator producing torque during swing phase (after toe-off) when user ended stance phase earlier than the average stride time.Added a final toe-off detection override that sets torque to zero upon detecting toe-off.
16Feb 2026Feb 2026TCN Training PipelineNarayananSevere I/O bottleneck in PyTorch data generator — __getitem__ read full CSV from disk on every call (~441,600 redundant disk reads over 6 epochs), leaving GPU idle and undertrained model.Pre-loaded all trial CSVs into RAM as NumPy float32 arrays at dataset init; __getitem__ now does O(1) array slicing. Epoch time reduced from ~360s to ~68s (6× speedup).
17Feb 2026Feb 2026TCN Model ArchitectureNarayananWeightNorm on convolutional layers interacted poorly with Adam optimizer on small datasets, destabilizing weight magnitude scale.Replaced WeightNorm with GroupNorm (single group, equivalent to LayerNorm over channels) for stable normalization across subjects.
18Feb 2026Feb 2026TCN GeneralizationNarayananDeeper model (kernel=7, [64,128,128,256]) did not consistently outperform simpler configs — limited training set size (only 5 of 22 subjects) is the bottleneck.Planned: scale to all 22 participants; explore subject-conditioned embeddings, learnable subject embeddings for test-time adaptation, and extended hyperparameter tuning.
19Feb 2026Feb 2026Mechanical (Actuator Pod)Amily3D-printed pulley too small for bearing press-fit; printer resolution limits prevented achieving required tight tolerances even after 0.1–0.2 mm CAD iterations.Partial — CAD adjustments helped slightly; considering higher-resolution printing, tolerance redesign, or COTS components for critical interfaces.
20Feb 2026Feb 2026Lab InventoryAmilyShelf numbering inconsistent and component names in inventory did not match BOM naming; crimps removed from BOM assuming availability but available crimps did not match size requirements.Plan to create cross-referenced inventory sheet with images, standardized naming, and tagged frequently-used components.
21Feb 2026Feb 2026Team ProcessPawan, TeamTeam schedule and priorities diverging due to busy individual workloads; meetings running overtime without clear structure.Held retrospective discussion; restructured meetings to Monday/Thursday with timeboxing (40% Scrum ceremony, 60% technical discussion).
22Feb 2026Feb 2026Battery ProcurementAtiravLi-Po battery order from Horizon Hobby cancelled without explanation by supplier.Contingency: use 6S batteries from battery cabinet (heavier) or two 3S batteries in series until correct battery is re-sourced.
23Feb 2026Feb 2026Supply ChainAtiravCNC-machined sprocket (PCBway, 9+ days) and main axle bearing (Amazon, 3+ weeks) delayed, blocking mechanical assembly and testing timeline.Monitoring delivery timelines; delays may push assembly/testing schedule.
24Feb 2026Feb 2026Actuator HardwareAtiravBorrowed actuator from MetaMobility lab vibrated violently; CAN dump and encoder worked but motor driver/gearbox fault could not be diagnosed without disassembly.Opened a new actuator from ordered stock which worked on first attempt, confirming undiagnosable hardware fault in borrowed unit.
25Feb 2026Feb 2026Actuator Pod AssemblyAtiravBarrel adjuster spline and female socket in casing mated prematurely, preventing proper nut engagement.Reversed the spline cap orientation (placed upside-down) to allow nut mating before spline engagement.
26Feb 2026Feb 2026I2C Sensor BusPawan, AtiravConfiguring two BNO085 IMUs on same I2C bus required careful address assignment; simultaneous reads caused interference.Shorted ADDR pin on one IMU to change address from 0x4A to 0x4B; verified clean initialization and data streaming at 100–200 Hz.
27Feb 2026Feb 2026CAN Bus on JetsonPawan, AtiravCAN interface not recognized on Jetson Orin Nano; frame formatting and bitrate config issues; intermittent dropped frames during early testing.Identified correct candump/ip-link command sequence; traced dropped frames to incorrect termination resistance on CAN bus and corrected.
28Feb 2026Feb 2026Website CoordinationPawan, AmilyCoordinating website content across all members required multiple rounds of follow-up to collect figures, schematics, and descriptions.Established shared folder structure and brief content checklist to streamline contributions.
29Feb 2026Feb 2026PCB DesignAtiravPower distribution board schematic completed but potential thermal issues identified requiring further analysis and revision; PCB fabrication lead time adds schedule uncertainty.Reviewing thermal design, considering layout adjustments, and monitoring fabrication timelines.
30Mar 2026Mar 2026I2C Signal IntegrityAtirav, PawanI2C SDA/SCL cables braided together for strain relief caused crosstalk over ~1m cable runs; all sensor addresses disappeared from bus. Four-way braiding technique (valid for CAN) added excessive capacitance to I2C open-drain lines.Fixed by shielding each I2C signal line (SDA, SCL) with its own dedicated ground wire; plan to switch to CAT-6 shielded cable with RJ45 connectors for modular plug-and-play.
31Mar 2026Mar 2026Sensor FailureAtirav, PawanTwo BNO085 IMU sensors became faulty during I2C debugging, likely damaged by voltage transients or shorts during the crosstalk troubleshooting process.Replaced with spare IMUs; redesigned sensor mounting to be more modular for easier future swaps without disturbing the rest of the wiring harness.
32Mar 2026In ProgressBowden Cable / ActuationAmily, GautamBowden cables snapping off ankle pulley during walking due to improper crimping; cable loses tension and rides out of the pulley groove caused by actuator’s high detent torque (4.7 Nm backdrivability).Re-crimped with proper tools and tightened junction screws; still some slack remains. Investigating deepening pulley groove and adding spring-loaded idler pulleys near the output pulley.
33Mar 2026Mar 2026Supply ChainAtiravCNC-machined sprocket from PCBWay now 35+ days overdue (quoted 14 days). Critical component for cable-driven actuation; prevents load testing of the mechanical system.3D-printed placeholder sprocket used to validate fit and alignment; load testing blocked until metal sprocket arrives.
34Mar 2026Mar 2026TCN Metric BugNarayananRMSE and MAE reported identical values — physically impossible. Root cause: metric computation was passing a single scalar per window instead of the full (C, T) tensor to the RMSE function.Fixed by ensuring full window tensor is passed and RMSE correctly computes sqrt(mean(squared_errors)) over all timesteps and channels.
35Mar 2026Mar 2026TCN Action Horizon BugNarayananAction horizon experiment (predicting H=10 steps ahead) produced incorrect RMSE due to target-output alignment bug — scoring evaluated future torque prediction instead of current torque.Reverted action horizon; conceptual framing was incorrect for AXilles use case where exoskeleton must apply torque at current timestep.
36Mar 2026Mar 2026TCN Subject ConditioningNarayananRaw demographic conditioning (height, weight, gender) hurt generalization by +15% test RMSE. With only 7 training subjects, demographics became a subject lookup key rather than generalizable predictors.Replaced with learnable subject embedding approach which improved test RMSE by 20% over baseline; embedding encodes latent biomechanical style rather than raw anthropometrics.
37Mar 2026Mar 2026TCN ArchitectureNarayananTCN receptive field (249 timesteps) was larger than training window (200 timesteps), causing zero-padding contamination on first 49 predictions of every window — wasted gradient signal.Increased window size from 200 to 300 timesteps (> RF), yielding 8.5% test RMSE improvement.
38Mar 2026Mar 2026Wiring / AssemblyGautam, AtiravDifferent wire gauge dimensions between sensor I2C cables, CAN cables, and jumper cables made soldering tricky during final exoskeleton wiring.Completed soldering with assistance; added 4-pin Molex connector at sensor cable end for modular connection to back-brace electronics casing.
39Mar 2026In ProgressPCB DesignAtiravInitial PCB prototype did not account for EMI/EMC issues; buck converter ICs had insufficient thermal headroom during continuous operation.Revised PCB layout over 4 iterations: separated high-EMI components from signal processing, changed buck converter packages, added bigger heatsinks for MOSFETs, routed signal traces over ground planes.