parent
062591411d
commit
d2363b7492
1 changed files with 297 additions and 0 deletions
@ -0,0 +1,297 @@ |
||||
{ |
||||
"cells": [ |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": 1, |
||||
"metadata": {}, |
||||
"outputs": [ |
||||
{ |
||||
"name": "stderr", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"kj/filesystem-disk-unix.c++:1703: warning: PWD environment variable doesn't match current directory; pwd = /mnt/c/Users/camer/AppData/Local/Programs/Microsoft VS Code\n" |
||||
] |
||||
}, |
||||
{ |
||||
"name": "stdout", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"Got 287 segments for platform FORD BRONCO SPORT 1ST GEN\n", |
||||
"Got 137 segments for platform FORD ESCAPE 4TH GEN\n", |
||||
"Got 1041 segments for platform FORD EXPLORER 6TH GEN\n", |
||||
"Got 5 segments for platform FORD F-150 14TH GEN\n", |
||||
"Got 56 segments for platform FORD FOCUS 4TH GEN\n", |
||||
"Got 637 segments for platform FORD MAVERICK 1ST GEN\n", |
||||
"Got 3 segments for platform FORD F-150 LIGHTNING 1ST GEN\n", |
||||
"Got 3 segments for platform FORD MUSTANG MACH-E 1ST GEN\n", |
||||
"Got 2169 segments total\n" |
||||
] |
||||
} |
||||
], |
||||
"source": [ |
||||
"from openpilot.tools.lib.comma_car_segments import get_comma_car_segments_database\n", |
||||
"from openpilot.selfdrive.car.ford.values import CAR\n", |
||||
"\n", |
||||
"database = get_comma_car_segments_database()\n", |
||||
"platforms = [c.value for c in CAR]\n", |
||||
"segments = []\n", |
||||
"\n", |
||||
"for platform in platforms:\n", |
||||
" if platform not in database:\n", |
||||
" print(f'Skipping platform: {platform}, no data available')\n", |
||||
" continue\n", |
||||
"\n", |
||||
" platform_segments = database[platform]\n", |
||||
" print(f'Got {len(platform_segments)} segments for platform {platform}')\n", |
||||
" segments += platform_segments\n", |
||||
"\n", |
||||
"print(f'Got {len(segments)} segments total')" |
||||
] |
||||
}, |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": 2, |
||||
"metadata": {}, |
||||
"outputs": [ |
||||
{ |
||||
"name": "stderr", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"100%|██████████| 2169/2169 [12:52<00:00, 2.81it/s] " |
||||
] |
||||
}, |
||||
{ |
||||
"name": "stdout", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"Got 76 car params to check\n" |
||||
] |
||||
}, |
||||
{ |
||||
"name": "stderr", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"\n" |
||||
] |
||||
} |
||||
], |
||||
"source": [ |
||||
"from multiprocessing import Pool\n", |
||||
"\n", |
||||
"from tqdm import tqdm\n", |
||||
"\n", |
||||
"from openpilot.tools.lib.logreader import LogReader\n", |
||||
"\n", |
||||
"\n", |
||||
"def get_car_params(segment):\n", |
||||
" lr = LogReader(segment)\n", |
||||
" return lr.first('carParams')\n", |
||||
"\n", |
||||
"\n", |
||||
"CAR_FW_TO_CHECK = []\n", |
||||
"VINS = set()\n", |
||||
"\n", |
||||
"with Pool(processes=10) as p:\n", |
||||
" with tqdm(total=len(segments)) as pbar:\n", |
||||
" for CP in p.imap_unordered(get_car_params, segments):\n", |
||||
" pbar.update()\n", |
||||
" if CP is None or CP.carVin in VINS:\n", |
||||
" continue\n", |
||||
" if not CP.carVin.startswith(\"000000\"):\n", |
||||
" VINS.add(CP.carVin)\n", |
||||
" CAR_FW_TO_CHECK.append(CP)\n", |
||||
"\n", |
||||
"print(f'Got {len(CAR_FW_TO_CHECK)} car params to check')" |
||||
] |
||||
}, |
||||
{ |
||||
"cell_type": "code", |
||||
"execution_count": 3, |
||||
"metadata": {}, |
||||
"outputs": [ |
||||
{ |
||||
"name": "stderr", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"/tmp/ipykernel_144036/34027631.py:1: DeprecationWarning: \n", |
||||
"Pyarrow will become a required dependency of pandas in the next major release of pandas (pandas 3.0),\n", |
||||
"(to allow more performant data types, such as the Arrow string type, and better interoperability with other libraries)\n", |
||||
"but was not found to be installed on your system.\n", |
||||
"If this would cause problems for you,\n", |
||||
"please provide us feedback at https://github.com/pandas-dev/pandas/issues/54466\n", |
||||
" \n", |
||||
" import pandas as pd\n" |
||||
] |
||||
}, |
||||
{ |
||||
"name": "stdout", |
||||
"output_type": "stream", |
||||
"text": [ |
||||
"vin='5LM5J7XC1LGXXXXXX' real_fingerprint=FORD EXPLORER 6TH GEN source=fixed determined_fingerprint=mock (exact_match=True)\n", |
||||
" addr=0x7e0 fw={b'LB5A-14C204-AZJ\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
" addr=0x730 fw={b'L1MC-14D003-AJ\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
" addr=0x706 fw={b'LC5T-14F397-AE\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
" addr=0x760 fw={b'L1MC-2D053-AJ\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
" addr=0x764 fw={b'LB5T-14D049-AB\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
"\n", |
||||
"vin='00000000000XXXXXX' real_fingerprint=FORD F-150 14TH GEN source=fixed determined_fingerprint=mock (exact_match=True)\n", |
||||
"\n", |
||||
"vin='00000000000XXXXXX' real_fingerprint=FORD F-150 14TH GEN source=fixed determined_fingerprint=mock (exact_match=True)\n", |
||||
"\n", |
||||
"vin='00000000000XXXXXX' real_fingerprint=FORD F-150 14TH GEN source=fixed determined_fingerprint=mock (exact_match=True)\n", |
||||
"\n", |
||||
"vin='00000000000XXXXXX' real_fingerprint=FORD F-150 14TH GEN source=fixed determined_fingerprint=mock (exact_match=True)\n", |
||||
"\n", |
||||
"vin='00000000000XXXXXX' real_fingerprint=FORD F-150 14TH GEN source=fixed determined_fingerprint=mock (exact_match=True)\n", |
||||
"\n", |
||||
"vin='3FTTW8E3XPRXXXXXX' real_fingerprint=FORD MAVERICK 1ST GEN source=fw determined_fingerprint=mock (exact_match=True)\n", |
||||
" addr=0x7e0 fw={b'PZ6A-14C204-JE\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
" addr=0x730 fw={b'NZ6C-14D003-AL\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
" addr=0x760 fw={b'PZ6C-2D053-ED\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
" addr=0x706 fw={b'NZ6T-14F397-AC\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00'}\n", |
||||
"\n", |
||||
" vin has_radar real_fingerprint real_fuzzy determined_fingerprint determined_fuzzy changed\n", |
||||
"0 3FMCR9B69NRXXXXXX True FORD BRONCO SPORT 1ST GEN False FORD BRONCO SPORT 1ST GEN False False\n", |
||||
"1 00000000000XXXXXX True FORD ESCAPE 4TH GEN False FORD ESCAPE 4TH GEN False False\n", |
||||
"2 00000000000XXXXXX True FORD ESCAPE 4TH GEN False FORD ESCAPE 4TH GEN False False\n", |
||||
"3 00000000000XXXXXX True FORD ESCAPE 4TH GEN False FORD ESCAPE 4TH GEN False False\n", |
||||
"4 1FMCU9J94MUXXXXXX True FORD ESCAPE 4TH GEN False FORD ESCAPE 4TH GEN False False\n", |
||||
"5 1FM5K7LC0MGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"6 5LM5J7XC9LGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"7 1FM5K8GC7LGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"8 1FM5K8GC7NGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"9 1FM5K8HC7MGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"10 5LM5J7XC8MGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"11 5LM5J7XC1LGXXXXXX True FORD EXPLORER 6TH GEN False mock False True\n", |
||||
"12 1FM5K8HC2LGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"13 1FMSK8DHXNGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"14 1FMSK8DH0NGXXXXXX True FORD EXPLORER 6TH GEN False FORD EXPLORER 6TH GEN False False\n", |
||||
"15 00000000000XXXXXX False FORD F-150 14TH GEN False mock False True\n", |
||||
"16 00000000000XXXXXX False FORD F-150 14TH GEN False mock False True\n", |
||||
"17 00000000000XXXXXX False FORD F-150 14TH GEN False mock False True\n", |
||||
"18 00000000000XXXXXX False FORD F-150 14TH GEN False mock False True\n", |
||||
"19 00000000000XXXXXX False FORD F-150 14TH GEN False mock False True\n", |
||||
"20 WF0NXXGCHNJXXXXXX True FORD FOCUS 4TH GEN False FORD FOCUS 4TH GEN False False\n", |
||||
"21 3FTTW8E31PRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"22 3FTTW8E99NRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"23 3FTTW8E33NRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"24 3FTTW8F98NRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"25 3FTTW8E3XPRXXXXXX False FORD MAVERICK 1ST GEN True mock False True\n", |
||||
"26 3FTTW8F97NRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"27 3FTTW8E34PRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"28 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"29 3FTTW8E33PRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"30 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"31 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"32 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"33 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"34 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"35 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"36 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"37 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"38 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"39 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"40 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"41 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"42 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"43 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"44 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"45 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"46 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"47 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"48 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"49 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"50 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"51 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"52 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"53 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"54 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"55 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"56 3FTTW8E36PRXXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"57 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"58 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"59 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"60 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"61 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"62 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"63 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"64 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"65 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"66 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"67 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"68 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"69 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"70 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"71 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"72 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"73 00000000000XXXXXX True FORD MAVERICK 1ST GEN False FORD MAVERICK 1ST GEN False False\n", |
||||
"74 1FTVW1EL4NWXXXXXX True FORD F-150 LIGHTNING 1ST GEN False FORD F-150 LIGHTNING 1ST GEN False False\n", |
||||
"75 3FMTK3SU0MMXXXXXX True FORD MUSTANG MACH-E 1ST GEN False FORD MUSTANG MACH-E 1ST GEN False False\n" |
||||
] |
||||
} |
||||
], |
||||
"source": [ |
||||
"import pandas as pd\n", |
||||
"\n", |
||||
"from openpilot.selfdrive.car.fw_versions import build_fw_dict, match_fw_to_car\n", |
||||
"\n", |
||||
"results = []\n", |
||||
"for CP in CAR_FW_TO_CHECK:\n", |
||||
" vin = CP.carVin\n", |
||||
" real_fingerprint, real_fuzzy, source = CP.carFingerprint, CP.fuzzyFingerprint, CP.fingerprintSource\n", |
||||
" car_fw = CP.carFw\n", |
||||
"\n", |
||||
" exact_match, determined_fingerprint = match_fw_to_car(car_fw, log=False)\n", |
||||
" determined_fuzzy = not exact_match\n", |
||||
"\n", |
||||
" if len(determined_fingerprint) == 1:\n", |
||||
" determined_fingerprint = determined_fingerprint.pop()\n", |
||||
" elif len(determined_fingerprint) == 0:\n", |
||||
" determined_fingerprint = 'mock'\n", |
||||
" else:\n", |
||||
" determined_fingerprint = 'multiple'\n", |
||||
"\n", |
||||
" fw_dict = build_fw_dict(CP.carFw)\n", |
||||
" has_radar = (0x764, None) in fw_dict.keys()\n", |
||||
"\n", |
||||
" changed = (real_fingerprint != determined_fingerprint) or (real_fuzzy != determined_fuzzy)\n", |
||||
" results.append((vin, has_radar,\n", |
||||
" real_fingerprint, real_fuzzy, determined_fingerprint, determined_fuzzy,\n", |
||||
" changed))\n", |
||||
"\n", |
||||
" if changed:\n", |
||||
" print(f'{vin=} {real_fingerprint=:<28} source={source} {determined_fingerprint=:<28} ({exact_match=})')\n", |
||||
" if determined_fingerprint != real_fingerprint:\n", |
||||
" for addr, fw in build_fw_dict(car_fw).items():\n", |
||||
" print(f' addr={hex(addr[0])} {fw=}')\n", |
||||
" print()\n", |
||||
"\n", |
||||
"df = pd.DataFrame(results, columns=['vin', 'has_radar',\n", |
||||
" 'real_fingerprint', 'real_fuzzy', 'determined_fingerprint', 'determined_fuzzy',\n", |
||||
" 'changed'])\n", |
||||
"print(df.to_string())" |
||||
] |
||||
} |
||||
], |
||||
"metadata": { |
||||
"kernelspec": { |
||||
"display_name": ".venv", |
||||
"language": "python", |
||||
"name": "python3" |
||||
}, |
||||
"language_info": { |
||||
"codemirror_mode": { |
||||
"name": "ipython", |
||||
"version": 3 |
||||
}, |
||||
"file_extension": ".py", |
||||
"mimetype": "text/x-python", |
||||
"name": "python", |
||||
"nbconvert_exporter": "python", |
||||
"pygments_lexer": "ipython3", |
||||
"version": "3.11.4" |
||||
} |
||||
}, |
||||
"nbformat": 4, |
||||
"nbformat_minor": 2 |
||||
} |
Loading…
Reference in new issue