AI Vehicle Fault Diagnostics via OBD-II Data

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1 servicesAll 1566 services
AI Vehicle Fault Diagnostics via OBD-II Data
Medium
~2-4 weeks
FAQ
AI Development Areas
AI Solution Development Stages
Latest works
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1161
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1041
  • image_logo-advance_0.png
    B2B Advance company logo design
    561
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    823
  • image_logo-aider_0.jpg
    AIDER company logo development
    762
  • image_crm_chasseurs_493_0.webp
    CRM development for Chasseurs
    848

AI-диагностика неисправностей автомобилей по OBD-II данным

OBD-II — стандарт бортовой диагностики, обязательный для всех автомобилей с 1996 года. Порт под рулём — точка доступа к более чем 200 параметрам двигателя и трансмиссии. ML-система превращает поток DTC-кодов и live-данных в точный диагноз с рекомендацией по ремонту.

OBD-II протоколы и данные

Протоколы:

  • CAN bus (ISO 15765-4): современные автомобили с 2008
  • ISO 9141-2, KWP2000: более старые
  • J1850 PWM/VPW: Ford и GM старых годов

Типы данных:

obd_data_types = {
    # DTC (Diagnostic Trouble Codes)
    'current_dtcs': 'активные неисправности — MIL горит',
    'pending_dtcs': 'ожидающие — условие повторялось, но ещё не постоянное',
    'permanent_dtcs': 'постоянные — не сбрасываются кнопкой',

    # PID (Parameter Identifier) - живые данные
    'pid_live': {
        '0x05': 'coolant_temperature_c',
        '0x0C': 'engine_rpm',
        '0x11': 'throttle_position_pct',
        '0x06': 'short_term_fuel_trim_pct',
        '0x07': 'long_term_fuel_trim_pct',
        '0x43': 'absolute_load_pct',
        '0x5C': 'engine_oil_temperature_c'
    },

    # Freeze frame: снимок параметров в момент фиксации DTC
    'freeze_frame': 'conditions when DTC was set'
}

OEM Extended PIDs: За пределами стандартного OBD-II каждый производитель добавляет собственные PID: данные трансмиссии, ABS, подушек безопасности, систем помощи. Доступны через расширенные диагностические протоколы (UDS, ISO 14229).

ML-классификация диагнозов

Задача: DTC код + freeze frame + история DTC → конкретная причина неисправности

Один DTC код может иметь десятки причин. P0300 (Random Misfire) — свечи, катушки, форсунки, утечки впускного коллектора, низкая компрессия. ML сужает до наиболее вероятной:

def diagnose_fault(dtc_code, freeze_frame, live_data_history, vehicle_profile):
    """
    Мультиклассовая классификация: причина неисправности
    Обучение: исторические RO (Repair Orders) из автосервисов
    """
    features = {
        'dtc_primary': dtc_code,
        'related_dtcs': related_dtcs,  # сопутствующие коды

        # Freeze frame
        'rpm_at_fault': freeze_frame['engine_rpm'],
        'load_at_fault': freeze_frame['engine_load'],
        'coolant_temp_at_fault': freeze_frame['coolant_temp'],

        # Паттерны live данных
        'fuel_trim_short_avg': live_data_history['short_fuel_trim'].mean(),
        'fuel_trim_long_avg': live_data_history['long_fuel_trim'].mean(),
        'rpm_instability': live_data_history['rpm'].std(),

        # Профиль автомобиля
        'make': vehicle_profile['make'],
        'model': vehicle_profile['model'],
        'year': vehicle_profile['year'],
        'engine': vehicle_profile['engine_code'],
        'mileage': vehicle_profile['odometer']
    }

    probabilities = fault_classifier.predict_proba([features])[0]
    top3_causes = [(causes[i], probabilities[i])
                   for i in probabilities.argsort()[-3:][::-1]]
    return top3_causes

Обучающие данные: Ключевой источник — исторические записи ремонтов из DMS (Dealer Management System). DTC код + симптомы → фактически выполненные работы и заменённые детали. Базы данных: Mitchell1, ALLDATA, Identifix содержат миллионы таких записей.

Диагностика по симптомам

NLP-парсинг описания симптомов:

# Клиент: "двигатель троит на холодном, пропадает при прогреве"
# NLP → structured features
symptom_features = {
    'condition': 'cold_engine',
    'symptom': 'misfire_rough_idle',
    'trend': 'disappears_when_warm',
    'frequency': 'every_cold_start'
}

# Обогащение DTC данными → диагноз
# P0300 cold-only misfire → coolant temperature sensor или wax thermostat (не прогревается)
# vs. P0300 persistent → ignition coil failure

Vibration pattern analysis: Для подключённых датчиков вибрации (или смартфон на приборной панели):

  • FFT анализ: характерные частоты → диагностика (50 Hz = дисбаланс, 200 Hz = неровная шина)
  • MFCC features → CNN классификатор типа неисправности

Прогнозирование вторичных неисправностей

Cascading Failures: Некоторые неисправности вызывают другие при несвоевременном устранении:

failure_cascade_rules = {
    'P0171_lean_mixture': {
        'if_untreated_for': 30,  # дней
        'increases_risk_of': ['P0420_catalyst', 'P0300_misfire'],
        'because': 'lean_combustion → overheating → O2_sensor, catalyst'
    },
    'overheating': {
        'immediate_risk': ['head_gasket_failure', 'warped_head'],
        'early_warning': 'coolant_temp > 105°C even once'
    }
}

Recommend Preventive Actions: На основе модели cascading failures — рекомендации по устранению secondary risks при первичном ремонте.

Оценка стоимости ремонта

Labor Time Estimation:

# Нормы времени по ATA/ATSG (автоматические трансмиссии) базам
def estimate_labor_hours(diagnosis, vehicle_profile):
    base_labor = labor_time_database.get(
        repair_operation=diagnosis['repair'],
        make=vehicle_profile['make'],
        model=vehicle_profile['model'],
        year=vehicle_profile['year']
    )

    # ML-коррекция: реальное время с учётом состояния крепёжных элементов
    # Старые автомобили с коррозией → +20-30% к норме
    corrosion_factor = 1.0 + max(0, (vehicle_profile['age_years'] - 7) * 0.03)
    return base_labor * corrosion_factor

Parts Pricing: Интеграция с TecDoc, LKQ, Autodoc API → актуальные цены OEM и aftermarket аналогов. Рекомендация: OEM vs. quality aftermarket в зависимости от возраста автомобиля.

Применения

Workshop Tablet App: Механик сканирует OBD-II → ML выдаёт топ-3 причины с вероятностями → recommended test procedure → estimate.

Fleet Monitoring Portal: Для корпоративных парков: агрегированные fault reports по всем автомобилям, риск-матрица, планирование ТО.

Consumer App: Водитель подключает ELM327 Bluetooth dongle → мобильное приложение интерпретирует ошибки на понятном языке: "Ваш катализатор, вероятно, изношен. Рекомендуем диагностику в ближайшем СТО."

Сроки: OBD-II коннектор + DTC декодирование + базовая классификация причин — 3-4 недели. ML-диагностика на исторических RO данных + симптом NLP + cost estimation + мобильное приложение — 2-3 месяца.