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