Smart Cart - EV2 Aircraft and Droid Health Maintenance Check Failure Troubleshooting
This alarm is covered by this guide. Background
Section titled “Background”Smart cart health checks run a wrapper test around the aircraft or droid to run threshold-based checks on a shortlist of health checks that determine whether the asset is functioning nominally. It makes use of existing alarms that FlightSystems triggers as well as value-based thresholds on what certain hardware components should read between. When these tests fail, older failures have a corresponding error code and others do not.
The error codes need to be updated, so instead, use this page to understand what to do when a test phase fails in the health check. If you encounter a failure that the table below doesn’t address, reach out to the owner to add to the Troubleshooting Guide.
Maintenance Health Checks should be used when triaging a specific concern that needs more data that only health checks can provide.
How to Use the Tables Below
Section titled “How to Use the Tables Below”- In test history, i.e. https://hardware-test-dashboard.data.flyzipline.com/mfg/framework2/f4a0e765-b561-48dd-83b9-b9269973fc97
- Scroll through and find any red and yellow test phase results. Search through the relevant table for next steps.
On Aircraft, take note that there are the same tests done on each compute side A and B as well as distro A and distro B, so check which side the test phase is to take action accordingly.
Health Maintenance Checks
Section titled “Health Maintenance Checks”graph TD
select-health-maintenance-check-section["<small><b>Step 1</b></small><br/>Action: Select the section you wish to follow."]
aircraft-health-maintenance-check["<small><b>Step 2</b></small><br/>Action: Aircraft Zip_Health_Maintenance_Chec..."]
droid-maintenance-test["<small><b>Step 3</b></small><br/>Action: Droid Droid_Maintenance_Testdroid_m..."]
select-health-maintenance-check-section -->|Aircraft Zip_Health_Mainte...| aircraft-health-maintenance-check
select-health-maintenance-check-section -->|Droid Droid_Maintenance_Test| droid-maintenance-test
style select-health-maintenance-check-section fill:#dcfce7,stroke:#22c55e,color:#14532d
style aircraft-health-maintenance-check fill:#dcfce7,stroke:#22c55e,color:#14532d
style droid-maintenance-test fill:#dcfce7,stroke:#22c55e,color:#14532d Hover or focus a block to preview it. Select the block to keep the preview open.
Aircraft (Zip_Health_Maintenance_Check)
| zip_health_maintenance_check | Test Phase Description | Failure Troubleshooting |
|---|---|---|
p2_zip_eol.asset_id.validate_asset_id | Ensures that the asset_id input by the user is a valid format. | The test rejected the asset_id input. Review the input and try again. Format should be p2-zip-xxx. |
p2_zip_eol.compute.configure_message_forwarding | Ensures that the test can read the vehicle's messages. | Ensure that the zip is on a released software manifest. Power cycle the zip and try again. Escalate to @manufacturing-test-software-on-call if the issue persists. |
p2_zip_eol.asset_id.check_asset_id | Checks the asset id input by the user and the asset id saved in the vehicle. | If asset IDs do not match, review the user input. If the user input is correct and the vehicle asset id is wrong, run zip provisioning to update it. |
p2_zip_eol.powertrain.enable_motors | Ensures that the test was able to run all-on to turn on motors for testing. | Ensure that the zip is on a released software manifest. Power cycle and retry. Escalate to @manufacturing-test-software-on-call. |
p2_zip_eol.network.find_hosts | Ensures that the zip was able to find all hosts. | Run all-on, then ping_devices manually. If a host is missing, power cycle and retry. If the host never returns, check physical connections and consider swapping the LRU then the harness. |
p2_zip_eol.compute.start_services_a / start_flight_target_a / disable_motor_services_a / disable_executive_service_a / kill_wpa_supplicant_a | Ensures compute A starts FlightSystems services and disables interfering services. | Ensure the zip is on a released software manifest. Power cycle. Escalate to @manufacturing-test-software-on-call. |
p2_zip_eol.compute.check_polaris_creds_a | Checks RTK base station credentials. | Run zip provisioning to update polaris credentials. |
p2_zip_eol.compute.check_hw_config_a | Checks that the hardware config file exists. | Run zip provisioning to update hardware config, or run a zip-apps OTA. |
p2_zip_eol.compute.check_message_injection_file_a | Ensures there is no message injection enabling file. | No criteria. A popup asks if you want to delete it. Delete it if this is a commercial zip. |
p2_zip_eol.versions.get_firmware_versions_hil / get_compute_zip_versions_sha_a | Reports asset software version. | No criteria. If it fails, escalate to @manufacturing-test-software-on-call. |
p2_zip_eol.compute.start_services_b / start_flight_target_b / kill_wpa_supplicant_b / check_polaris_creds_b / check_message_injection_file_b | Same as side A but for compute B. | Same remediation. |
p2_zip_eol.hover_motors.read_hover_config | Reads hover node calibrations. If fixed-wing capable, must have a valid r0 calibration. | Run recalibrate_hover_motors on this asset. |
p2_zip_eol.powertrain.get_parachute_state | Depending on the user input: dual_stage should be NO_FAILURE, single_stage should be DISABLED. | If the mismatch is real, run set_paraland_type. If the user input was wrong, rerun the test. |
p2_zip_eol.powertrain.idle_time | n/a | n/a |
p2_zip_eol.powertrain.check_swapped_motors | CW/CCW motor locations are checked for improper installation. | Check PNs on each motor and correct. If motors are correct, escalate to @manufacturing-test-software-on-call as a false failure. |
p2_zip_eol.lights.check_nav_lights_a/b, check_anti_collision_lights_a/b | Prompts the user to check lights. | Wingtip lights are incompatible due to a message renaming. Run Preflight without Motors. Visually check the flashing lights instead. If the lights do not turn on, inspect connections, and on retry swap the wing or compute as indicated. |
p2_zip_eol.compute.disable_motor_services_a/b | Same as start_services. | Same remediation. |
p2_zip_eol.powertrain.enable_motors | Runs all-on. | Same remediation. |
p2_zip_eol.servo_check.find_servos | Attempts to ping each servo. | Inspect connections to missing servos; use Basic Smart Cart Commands to ping them directly. Swap harness and/or LRU if needed. |
p2_zip_eol.servo_check.set_zero_pos | Reads servo calibrations for zero position. | Run Basic Smart Cart Commands to set zero offset, or run preflight without motors. |
p2_zip_eol.servo_check.read_servo_config | Same as above. | Same remediation. |
p2_zip_eol.servo_check.disable_servo | n/a | n/a |
p2_zip_eol.servo_check.roll_call_servos | Ensures servos still respond. | Same as find_servos. |
p2_zip_eol.servo_check.roll_tilt_cal | AMA goes through a roll tilt range movement. | NOT COMPATIBLE WITH 2026.03 and beyond - Run Preflight without Motors. If preflight passes, health check had a false failure. If preflight also fails, range is out of threshold. Swap the wing or tail. |
p2_zip_eol.servo_check.home_all_control_srf | Wings and tails go through range movement. | NOT COMPATIBLE WITH 2026.03 and beyond - Run Preflight without Motors. If preflight fails, wing did not know zero. Set zero offset with Basic Smart Cart Commands. |
p2_zip_eol.powertrain.avionics_power_only / end_manual_session | Stop/restore powertrain. | Same as start_services. |
validators.p2_zip_servos.servo_post_processor.validate_servo_data_tail_stbd_fwd / tail_port_fwd / wing_port_fwd / wing_stbd_fwd | Validators on servo torque, power, and temperature during the test. | NOT COMPATIBLE WITH 2026.03 and beyond - Run Preflight without Motors. If preflight fails, swap the wing or tail. |
validators.p2_zip_powertrain.motor_post_processor.validate_motor_telemetry_port_aft / port_fwd / stbd_aft / stbd_fwd / mixed | Ensures no alarms/offnominals on motors during test. | NOT COMPATIBLE WITH 2026.03 and beyond - Run Preflight without Motors. Review any alarms/offnominals and look up their troubleshooting guides. |
validators.p2_zip_powertrain.motor_post_processor.validate_motor_telemetry_winch | Ensures no alarms/offnominals on winch during test. | Same as above. |
validators.p2_zip_powertrain.distroboard_post_processor.validate_distro_board_telemetry / validate_distro_ls_power_telemetry / validate_mcu_rtmp_telemetry | Distro board-level voltage, current, temperature, ring-alarm thresholds. | Review previous discrepancies; escalate to powertrain-on-call. |
validators.p2_zip_powertrain.distroboard_post_processor.validate_ethernet_metrics | Ethernet ring link health. | Degradation predicts PORT_A_LINK / PORT_B_LINK / PORT_RING_LINK comms status alarms. See those guides. |
validators.p2_zip_powertrain.battery_post_processor.validate_zip_battery | Battery voltage, current, temperature thresholds. | Review previous discrepancies. If there are no alarms, escalate to powertrain-on-call. Otherwise, follow alarm guides. |
validators.p2_zip_powertrain.distroboard_post_processor.validate_safety_and_squib | Battery level voltage, resistance, and temperature; common failure is mismatched paraland type causing squib_reef_cutter_resistance failures. | Confirm paraland type. If user input was correct and paraland failures persist, run set_paraland_type. |
validators.p2_zip_powertrain.distroboard_post_processor.validate_distro_status_distro_a/b | Distro states and alarms during test. | Same as above. |
validators.p2_zip_compute.full_zip.som_blower_status_a/b | Blower RPM, voltage, and current. | Review previous discrepancies. Escalate to avionics-on-call. If blower is not working, swap the compute. |
validators.p2_zip_compute.full_zip.power_monitor_status_a/b | Compute voltage/current/temperature. | Review previous discrepancies. Escalate to avionics-on-call or follow alarm guides. |
validators.p2_zip_compute.full_zip.compute_hardware_metrics_a/b | Compute temperature and rail voltages. | Same as above. |
validators.p2_zip_compute.adsb.adsb_status_a/b | ADSB stats without thresholds. | If ADSB is not ready, power cycle and retry. It may fail if no aircraft are in the area. Swap compute if persistent. |
validators.p2_zip_compute.full_zip.fusion_engine_version_a/b | Third-party GNSS firmware version. | Not field-updatable. Swap the compute. Escalate to avionics-on-call. |
validators.p2_zip_compute.cell.cell_modem_status_a/b | SIM carrier and state. | Commercial requires both ATT and T-Mobile redundancy. Power cycle and retry. If persistent, check connections and swap compute or cell antenna. |
validators.p2_zip_compute.full_zip.deserializer_status_a/b | No thresholds. | Ignore if this is the only issue. |
validators.p2_zip_compute.full_zip.cloud_comms_status_a | On-board cloud comms agent. | Could be FlightSystems, provisioning, or cell. Ensure released manifest. If the zip is offline in FleetWrangler, see the Zip/Dock Offline guide. |
validators.p2_zip_compute.wifi.raw_80211_status_a/b | Basic wifi chip data check. | Check connection, power cycle, retry. Swap compute if persistent; escalate to avionics-on-call. |
validators.p2_zip_compute.gnss.gnss_status_a/b | Basic GNSS data; threshold is 8+ satellites. | Move to a better sky view. If still failing and other zips see more satellites, swap GNSS antenna. |
validators.p2_zip_airdata.airdata_post_processor.validate_airdata_a / get_airdata_offsets_a | Air data offsets and values. | Retry. If values fail threshold, swap the air data. |
validators.angle_of_attack.vane.validate_aoa_data_b | AOA offsets and data. | Retry. If values fail threshold, swap the AOA. |
Droid (Droid_Maintenance_Test)
| droid_maintenance_test | Test Phase Description | Failure Troubleshooting |
|---|---|---|
p2_droid_eol.main.check_barcode_revision_against_input | Checks the revision of the droid against what the droid thinks it is. | All droids are currently EV2. If you did not put EV2 in parameters, update and retry. If you did, escalate. |
p2_droid_eol.power.turn_on_power_supply | Asks the technician to turn on the power supply if not already on. | Droids accept power passively on a smart cart. There is no load switch. If the droid will not power on, escalate to @p2droid-autonomy-on-call. |
p2_droid_eol.network.find_hosts | The droid should have 5 hosts: droid_compute, droid_safety, thruster_main, thruster_fwd, thruster_aft. | Run all-on, then ping_devices manually. Swap compute or thruster_fwd if those fail, because those are the only swappable hosts. If harnessing is broken, return the droid to the aviary. |
p2_droid_eol.compute.connect_to_compute | Connects to compute for log fetching. | If find_hosts passed but this failed, it is likely a test failure. Escalate to @manufacturing-test-software-on-call. |
p2_droid_eol.compute.cross_check_asset_id | Asset ID input vs. saved. | Review user input. If user input is correct and the droid has the wrong asset id, run droid provisioning. |
p2_droid_eol.compute.check_hardware_config | Legacy hardware config file for door operation. | Run droid provisioning to add the file. Without it, doors will not operate properly. |
p2_droid_eol.compute.check_fault_injection | Ensures no message injection file. | Popup asks whether to delete. Delete if commercial. |
p2_droid_eol.compute.start_target_maintenance | Connects to compute for log fetching. | Escalate to @manufacturing-test-software-on-call. |
p2_droid_eol.compute.check_sw_versions | No criteria. | Logs droid software. |
p2_droid_eol.firmware.flash_droid | Flashes mfg firmware if Update Firmware = Yes. | |
p2_droid_eol.compute.check_connection / configure_message_forwarding / start_services_for_eol / enable_aux_imu / start_imu_services | Test setup. | Ensure released manifest. Power cycle. Escalate to @manufacturing-test-software-on-call. |
p2_droid_eol.compute.blower_test | skipped | skipped |
p2_droid_eol.powertrain.power_monitor_status_with_power_supply | Board-level voltage, current, temperature thresholds. | -004 Droid battery incompatibility: External Fault Trigger is false on -004 batteries. Waive that failure. Otherwise escalate to @Bryan Hood in #wg-droid-powertrain-dlb-to-25k. |
p2_droid_eol.powertrain.prompt_user_to_open_lid / check_lid_hall_1_open / check_lid_hall_2_open / prompt_user_to_close_lid / check_lid_hall_1_closed / check_lid_hall_2_closed | Lid hall effect sensor check. | Confirm you properly opened/closed the lid. If it fails when you did, go through the DROID_ERROR_LID_OPEN guide. |
p2_droid_eol.leds.test_red_indicator / test_green_indicator / test_blue_indicator | Tech confirms LED colors. | Fails if tech answers negatively. |
p2_droid_eol.powertrain.disable_motor_manager | Test setup. | Same as start_services. |
p2_droid_eol.powertrain.door_spin_direction_test | ||
p2_droid_eol.powertrain.test_door_range_eol_ev1 / ev1_5 | Legacy. Should not run. | |
p2_droid_eol.powertrain.test_door_range_eol_ev2 | Homes and opens/closes droid doors. | If out of spec, inspect lead screw and escalate to SMI. |
p2_droid_eol.powertrain.check_battery_soc_percent_above_70 | Battery >70% SOC before continuing. | |
p2_droid_eol.powertrain.check_amn | ||
p2_droid_eol.power.remove_battery_overrides | ||
p2_droid_eol.power.turn_on_battery | Droid is on battery before testing thrusters. | |
p2_droid_eol.powertrain.test_main_thruster / test_fwd_thruster / test_aft_thruster | Low thruster commands. | Tech reports whether thrusters moved nominally. If not, escalate to @p2-firmware-motors-on-call. |
p2_droid_eol.powertrain.enable_motor_manager / compute.disconnect_message_forwarding / compute.stop_target / power.remove_battery_overrides / power.shut_down_droid | Test breakdown. | |
p2_droid_eol.compute.verify_droid_shutdown | Confirms droid turns off. | If not, battery/AMN may be bad. Escalate to @Bryan Hood. |
p2_droid_eol.compute.disconnect_from_compute | Test breakdown. | |
validators.p2_droid_eol.powertrain.check_battery_heater | No thresholds. | Escalate to @manufacturing-test-software-on-call. |
validators.p2_droid_eol.compute.check_blower_data | Checks blower data. | |
validators.p2_droid_eol.powertrain.check_thruster_data | Thruster validator. | |
validators.p2_droid_eol.imu.imu_status | Verifies IMU data returns. | Power cycle and retry. If still failing, swap the compute. |
validators.p2_droid_eol.compute.som_blower_status / chill_blower_status | Blower data with wide bounds. | Power cycle and retry. Swap compute on persistent failure. |
validators.p2_droid_eol.compute.compute_hardware_metrics | Compute-reported hardware metrics. | Same as above. |
validators.p2_droid_eol.compute.barometer_status | Barometer data. | Same as above. |
validators.p2_droid_eol.gnss.fusion_engine_version | Third-party GNSS firmware version. | Not field-updatable. Swap the compute. Escalate to avionics-on-call. |
validators.p2_droid_eol.gnss.gnss_status | Basic GNSS data; 8+ satellites. | Move for better sky view. Swap GNSS antenna if persistent. |
validators.p2_droid_eol.powertrain.check_droid_safety | Paraland squib resistances. | Out of range. Down the droid. Needs another paraland. |
validators.p2_droid_eol.powertrain.check_motor_main / check_motor_fwd / check_motor_aft / check_motor_door | Simple aliveness check. | Should not fail if thrusters ran OK. If it does, escalate to manufacturing-test-software-on-call. |
Resolution note
This plaintext block is ready to paste into the Resolution Note field on the ZERP issue you're working. The permalink below gives engineering review access to the full step-by-step timeline including any back-navigation; share it if the case needs a deeper look.
Permalink:
Session is too large to fit in a URL. Use Download session JSON to share the timeline out-of-band.
Did this guide help you get unblocked?
Open suggestions
There are no open suggestions.
Open pull requests
There are no open pull requests.