#!/usr/bin/env python3
import argparse
import concurrent . futures
import os
import random
Live torque (#25456)
* wip torqued
* add basic logic
* setup in manager
* check sanity and publish msg
* add first order filter to outputs
* wire up controlsd, and update gains
* rename intercept to offset
* add cloudlog, live values are not updated
* fix bugs, do not reset points for now
* fix crashes
* rename to main
* fix bugs, works offline
* fix float in cereal bug
* add latacc filter
* randomly choose points, approx for iid
* add variable decay
* local param to capnp instead of dict
* verify works in replay
* use torqued output in controlsd
* use in controlsd; use points from past routes
* controlsd bugfix
* filter before updating gains, needs to be replaced
* save all points to ensure smooth transition across routes, revert friction factor to 1.5
* add filters to prevent noisy low-speed data points; improve fit sanity
* add engaged buffer
* revert lat_acc thresh
* use paramsd realtime process config
* make latacc-to-torque generic, and overrideable
* move freq to 4Hz, avoid storing in np.array, don't publish points in the message
* float instead of np
* remove constant while storing pts
* rename slope, offset to lat_accet_factor, offset
* resolve issues
* use camelcase in all capnp params
* use camelcase everywhere
* reduce latacc threshold or sanity, add car_sane todo, save points properly
* add and check tag
* write param to disk at end of route
* remove args
* rebase op, cereal
* save on exit
* restore default handler
* cpu usage check
* add to process replay
* handle reset better, reduce unnecessary computation
* always publish raw values - useful for debug
* regen routes
* update refs
* checks on cache restore
* check tuning vals too
* clean that up
* reduce cpu usage
* reduce cpu usage by 75%
* cleanup
* optimize further
* handle reset condition better, don't put points in init, use only in corolla
* bump cereal after rebasing
* update refs
* Update common/params.cc
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
* remove unnecessary checks
* Update RELEASES.md
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
old-commit-hash: 4fa62f146426f76c9c1c2867d9729b33ec612b59
3 years ago
import traceback
from tqdm import tqdm
from openpilot . common . prefix import OpenpilotPrefix
from openpilot . selfdrive . test . process_replay . regen import regen_and_save
from openpilot . selfdrive . test . process_replay . test_processes import FAKEDATA , source_segments as segments
from openpilot . tools . lib . route import SegmentName
def regen_job ( segment , upload , disable_tqdm ) :
with OpenpilotPrefix ( ) :
sn = SegmentName ( segment [ 1 ] )
fake_dongle_id = ' regen ' + ' ' . join ( random . choice ( ' 0123456789ABCDEF ' ) for _ in range ( 11 ) )
try :
relr = regen_and_save ( sn . route_name . canonical_name , sn . segment_num , upload = upload ,
outdir = os . path . join ( FAKEDATA , fake_dongle_id ) , disable_tqdm = disable_tqdm , dummy_driver_cam = True )
relr = ' | ' . join ( relr . split ( ' / ' ) [ - 2 : ] )
return f ' ( " { segment [ 0 ] } " , " { relr } " ), '
except Exception as e :
Live torque (#25456)
* wip torqued
* add basic logic
* setup in manager
* check sanity and publish msg
* add first order filter to outputs
* wire up controlsd, and update gains
* rename intercept to offset
* add cloudlog, live values are not updated
* fix bugs, do not reset points for now
* fix crashes
* rename to main
* fix bugs, works offline
* fix float in cereal bug
* add latacc filter
* randomly choose points, approx for iid
* add variable decay
* local param to capnp instead of dict
* verify works in replay
* use torqued output in controlsd
* use in controlsd; use points from past routes
* controlsd bugfix
* filter before updating gains, needs to be replaced
* save all points to ensure smooth transition across routes, revert friction factor to 1.5
* add filters to prevent noisy low-speed data points; improve fit sanity
* add engaged buffer
* revert lat_acc thresh
* use paramsd realtime process config
* make latacc-to-torque generic, and overrideable
* move freq to 4Hz, avoid storing in np.array, don't publish points in the message
* float instead of np
* remove constant while storing pts
* rename slope, offset to lat_accet_factor, offset
* resolve issues
* use camelcase in all capnp params
* use camelcase everywhere
* reduce latacc threshold or sanity, add car_sane todo, save points properly
* add and check tag
* write param to disk at end of route
* remove args
* rebase op, cereal
* save on exit
* restore default handler
* cpu usage check
* add to process replay
* handle reset better, reduce unnecessary computation
* always publish raw values - useful for debug
* regen routes
* update refs
* checks on cache restore
* check tuning vals too
* clean that up
* reduce cpu usage
* reduce cpu usage by 75%
* cleanup
* optimize further
* handle reset condition better, don't put points in init, use only in corolla
* bump cereal after rebasing
* update refs
* Update common/params.cc
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
* remove unnecessary checks
* Update RELEASES.md
Co-authored-by: Adeeb Shihadeh <adeebshihadeh@gmail.com>
old-commit-hash: 4fa62f146426f76c9c1c2867d9729b33ec612b59
3 years ago
err = f " { segment } failed: { str ( e ) } "
err + = traceback . format_exc ( )
err + = " \n \n "
return err
if __name__ == " __main__ " :
all_cars = { car for car , _ in segments }
parser = argparse . ArgumentParser ( description = " Generate new segments from old ones " )
parser . add_argument ( " -j " , " --jobs " , type = int , default = 1 )
parser . add_argument ( " --no-upload " , action = " store_true " )
parser . add_argument ( " --whitelist-cars " , type = str , nargs = " * " , default = all_cars ,
help = " Whitelist given cars from the test (e.g. HONDA) " )
parser . add_argument ( " --blacklist-cars " , type = str , nargs = " * " , default = [ ] ,
help = " Blacklist given cars from the test (e.g. HONDA) " )
args = parser . parse_args ( )
tested_cars = set ( args . whitelist_cars ) - set ( args . blacklist_cars )
tested_cars = { c . upper ( ) for c in tested_cars }
tested_segments = [ ( car , segment ) for car , segment in segments if car in tested_cars ]
with concurrent . futures . ProcessPoolExecutor ( max_workers = args . jobs ) as pool :
p = pool . map ( regen_job , tested_segments , [ not args . no_upload ] * len ( tested_segments ) , [ args . jobs > 1 ] * len ( tested_segments ) )
msg = " Copy these new segments into test_processes.py: "
for seg in tqdm ( p , desc = " Generating segments " , total = len ( tested_segments ) ) :
msg + = " \n " + str ( seg )
print ( )
print ( )
print ( msg )