{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"### introduction\n\nI was trying to figure out how to use imu, but it was more difficult than I imagined and did not lead to an improvement in my score.\n\nI implemented an extended Kalman filter using imu, and I hope this will be helpful.\n\nOriginally, I wanted to use angular velocity and acceleration, but I could not align the axes for acceleration, so I only used angular velocity in the y-direction.\n![image.png](attachment:cf76fb59-2813-452c-a7ab-2a6e34219ce5.png)\n\nimuの活用方法を考えていましたが，想像以上に難しくスコアの改善に繋がりませんでした．\n\nimuを用いて拡張カルマンフィルタを実装したので，参考になれば幸いです．\n\n本来は角速度と加速度を使いたかったのですが，加速度に関して軸合わせが出来ていないため，y方向の角速度を使うのみとなっています．","metadata":{},"attachments":{"cf76fb59-2813-452c-a7ab-2a6e34219ce5.png":{"image/png":"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"}}},{"cell_type":"code","source":"!pip install simdkalman\n!pip install pymap3d","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2022-07-06T05:55:17.967763Z","iopub.execute_input":"2022-07-06T05:55:17.968201Z","iopub.status.idle":"2022-07-06T05:55:43.931078Z","shell.execute_reply.started":"2022-07-06T05:55:17.96811Z","shell.execute_reply":"2022-07-06T05:55:43.929335Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pykalman\nimport simdkalman\nfrom tqdm.notebook import tqdm\nfrom dataclasses import dataclass\nfrom scipy.interpolate import InterpolatedUnivariateSpline\nimport glob\nfrom joblib import Parallel, delayed\nimport random\nfrom functools import partial\nimport numpy as np\nimport pandas as pd\nfrom scipy.interpolate import InterpolatedUnivariateSpline\nfrom scipy.signal import savgol_filter\npd.set_option('display.max_columns', 50)\n\nimport warnings\nwarnings.filterwarnings('ignore')\nfrom pykalman import KalmanFilter,AdditiveUnscentedKalmanFilter,UnscentedKalmanFilter\nimport pymap3d as pm\nimport matplotlib.pyplot as plt\nimport seaborn as sns\n\nfrom scipy.spatial import distance\nINPUT_PATH = '../input/smartphone-decimeter-2022'\n\nWGS84_SEMI_MAJOR_AXIS = 6378137.0\nWGS84_SEMI_MINOR_AXIS = 6356752.314245\nWGS84_SQUARED_FIRST_ECCENTRICITY  = 6.69437999013e-3\nWGS84_SQUARED_SECOND_ECCENTRICITY = 6.73949674226e-3\n\nHAVERSINE_RADIUS = 6_371_000\n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nimport plotly.express as px\nimport warnings\nwarnings.simplefilter('ignore')\nimport pymap3d.vincenty as pmv","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:43.935303Z","iopub.execute_input":"2022-07-06T05:55:43.935696Z","iopub.status.idle":"2022-07-06T05:55:47.305196Z","shell.execute_reply.started":"2022-07-06T05:55:43.935661Z","shell.execute_reply":"2022-07-06T05:55:47.30434Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def visualize_trafic(df,col, name_=\"velocity\",zoom=9):\n    fig = px.scatter_mapbox(df,\n                            \n                            # Here, plotly gets, (x,y) coordinates\n                            lat=\"LatitudeDegrees\",\n                            lon=\"LongitudeDegrees\",\n                            \n                            #Here, plotly detects color of series\n                            color=name_,\n                            labels=name_,\n                            hover_data = col ,\n                            zoom=zoom,\n                            height=600,\n                            width=800)\n    fig.update_layout(mapbox_style='stamen-terrain')\n    fig.update_layout(margin={\"r\": 0, \"t\": 0, \"l\": 0, \"b\": 0})\n    fig.update_layout(title_text=\"GPS trafic\")\n    fig.show()","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:47.306264Z","iopub.execute_input":"2022-07-06T05:55:47.307332Z","iopub.status.idle":"2022-07-06T05:55:47.315391Z","shell.execute_reply.started":"2022-07-06T05:55:47.307296Z","shell.execute_reply":"2022-07-06T05:55:47.313958Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_path = \"../input/smartphone-decimeter-2022/train/\"\ntripId = \"2020-05-15-US-MTV-1/GooglePixel4XL\"\ndf_train = pd.read_csv(\"../input/gsdc2-baseline-sub/baseline_train.csv\")\ndf_train = df_train[df_train.tripId == tripId]\ndf_train.head(3)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:47.318311Z","iopub.execute_input":"2022-07-06T05:55:47.318676Z","iopub.status.idle":"2022-07-06T05:55:48.421639Z","shell.execute_reply.started":"2022-07-06T05:55:47.318636Z","shell.execute_reply":"2022-07-06T05:55:48.420838Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Merge imu data  \nnote:Magnetic sensors are not used due to their high noise","metadata":{"execution":{"iopub.status.busy":"2022-07-01T05:57:59.77752Z","iopub.execute_input":"2022-07-01T05:57:59.777844Z","iopub.status.idle":"2022-07-01T05:57:59.786432Z","shell.execute_reply.started":"2022-07-01T05:57:59.777815Z","shell.execute_reply":"2022-07-01T05:57:59.784762Z"}}},{"cell_type":"code","source":"imu = pd.read_csv(base_path + tripId +\"/device_imu.csv\")\nacc = imu.query(f\"MessageType=='UncalAccel'\").reset_index(drop = True)\ngyr = imu.query(f\"MessageType=='UncalGyro'\").reset_index(drop = True)\nmag = imu.query(f\"MessageType=='UncalMag'\").reset_index(drop = True)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:48.423066Z","iopub.execute_input":"2022-07-06T05:55:48.423949Z","iopub.status.idle":"2022-07-06T05:55:49.919453Z","shell.execute_reply.started":"2022-07-06T05:55:48.423884Z","shell.execute_reply":"2022-07-06T05:55:49.917826Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp = pd.merge_asof(\n    df_train.sort_values('UnixTimeMillis'), \n    acc.sort_values('utcTimeMillis'), \n    left_on=['UnixTimeMillis'], \n    right_on=['utcTimeMillis'], \n    direction='nearest',\n    suffixes = (\"\",\"_acc\"), \n    tolerance=1000\n    )\ndisplay(df_temp.head(3))\ndf_temp.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:49.921018Z","iopub.execute_input":"2022-07-06T05:55:49.921446Z","iopub.status.idle":"2022-07-06T05:55:49.982451Z","shell.execute_reply.started":"2022-07-06T05:55:49.921404Z","shell.execute_reply":"2022-07-06T05:55:49.981529Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp = pd.merge_asof(\n    df_temp.sort_values('UnixTimeMillis'), \n    gyr.sort_values('utcTimeMillis'), \n    left_on=['UnixTimeMillis'], \n    right_on=['utcTimeMillis'], \n    direction='nearest',\n    suffixes = (\"\",\"_gyr\"), \n    tolerance=1000)\ndisplay(df_temp.head(3))\ndf_temp.isnull().sum()","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:49.983737Z","iopub.execute_input":"2022-07-06T05:55:49.984115Z","iopub.status.idle":"2022-07-06T05:55:50.039293Z","shell.execute_reply.started":"2022-07-06T05:55:49.984083Z","shell.execute_reply":"2022-07-06T05:55:50.038103Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Calibrate gravity","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.040654Z","iopub.execute_input":"2022-07-06T05:55:50.041148Z","iopub.status.idle":"2022-07-06T05:55:50.045586Z","shell.execute_reply.started":"2022-07-06T05:55:50.041113Z","shell.execute_reply":"2022-07-06T05:55:50.044415Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp.head(2)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.046949Z","iopub.execute_input":"2022-07-06T05:55:50.047365Z","iopub.status.idle":"2022-07-06T05:55:50.08058Z","shell.execute_reply.started":"2022-07-06T05:55:50.047321Z","shell.execute_reply":"2022-07-06T05:55:50.079349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#with a stop state up to 100\ndef rotation_R(df):\n    mean_ = df[:100].mean()\n    ax = - mean_.MeasurementZ\n    ay = - mean_.MeasurementX\n    az =   mean_.MeasurementY\n    roll = (np.arctan2(ay,az))\n    pitch = (-np.arctan2(ax,np.sqrt(ay ** 2 + az ** 2)))\n    yaw = 0\n    c_roll = np.array([[1,             0,             0], \n                       [0,  np.cos(roll), -np.sin(roll)],\n                       [0,  np.sin(roll),  np.cos(roll)]\n                      ])\n\n    c_pitch = np.array([[ np.cos(pitch), 0,  np.sin(pitch)], \n                        [ 0,             1,              0],\n                        [-np.sin(pitch), 0,  np.cos(pitch)]\n                       ])\n\n    c_yaw = np.array([[ np.cos(yaw),-np.sin(yaw),      0], \n                      [ np.sin(yaw), np.cos(yaw),      0],\n                      [ 0,             0,              1]\n                     ])\n    R = c_yaw @ c_pitch @ c_roll\n    return R\n\ndef calib(df_temp,R):\n    df_temp[[\"MeasurementZ_gyr_\"]] = - df_temp[[\"MeasurementZ_gyr\"]]\n    df_temp[[\"MeasurementX_gyr_\"]] = - df_temp[[\"MeasurementX_gyr\"]]\n    w_data = df_temp[[\"MeasurementZ_gyr_\",\"MeasurementX_gyr_\",\"MeasurementY_gyr\"]].to_numpy()\n    \n    df_temp[[\"MeasurementZ_\"]] = - df_temp[[\"MeasurementZ\"]]\n    df_temp[[\"MeasurementX_\"]] = - df_temp[[\"MeasurementX\"]]\n    acc_data = df_temp[[\"MeasurementZ_\",\"MeasurementX_\",\"MeasurementY\"]].to_numpy()\n\n    acc_data_ = acc_data.copy()\n    for i in range(len(w_data)):\n        acc_data_[i] = R @ acc_data[i]\n    \n    w_data_ = w_data.copy()\n    for i in range(len(w_data)):\n        w_data_[i] = R @ w_data[i]\n    \n    df_temp[[\"acc_x\",\"acc_y\",\"acc_z\"]] = acc_data_\n    df_temp[[\"w_x\",\"w_y\",\"w_z\"]] = w_data_\n    \n    return df_temp\n\n \nR = rotation_R(df_temp)\ndf_temp = calib(df_temp,R)\ndf_temp.head()","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.084463Z","iopub.execute_input":"2022-07-06T05:55:50.084804Z","iopub.status.idle":"2022-07-06T05:55:50.175586Z","shell.execute_reply.started":"2022-07-06T05:55:50.084775Z","shell.execute_reply":"2022-07-06T05:55:50.174395Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp[[\"MeasurementY_gyr\",\"w_z\"]].plot()","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.177357Z","iopub.execute_input":"2022-07-06T05:55:50.178167Z","iopub.status.idle":"2022-07-06T05:55:50.43913Z","shell.execute_reply.started":"2022-07-06T05:55:50.178115Z","shell.execute_reply":"2022-07-06T05:55:50.437989Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp[[\"MeasurementZ_\",\"acc_x\"]].plot()","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.44076Z","iopub.execute_input":"2022-07-06T05:55:50.441117Z","iopub.status.idle":"2022-07-06T05:55:50.676626Z","shell.execute_reply.started":"2022-07-06T05:55:50.441086Z","shell.execute_reply":"2022-07-06T05:55:50.675486Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\"\"\"\nx -> roll\ny -> pitch\nz -> yaw\n\"\"\"","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.678709Z","iopub.execute_input":"2022-07-06T05:55:50.679614Z","iopub.status.idle":"2022-07-06T05:55:50.68811Z","shell.execute_reply.started":"2022-07-06T05:55:50.679564Z","shell.execute_reply":"2022-07-06T05:55:50.686337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#https://www.kaggle.com/code/junkoda/wls-velocity-estimation-from-doppler-shift","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.689585Z","iopub.execute_input":"2022-07-06T05:55:50.689937Z","iopub.status.idle":"2022-07-06T05:55:50.698346Z","shell.execute_reply.started":"2022-07-06T05:55:50.689893Z","shell.execute_reply":"2022-07-06T05:55:50.697178Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"%matplotlib inline\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport math\nimport glob\nimport scipy.optimize\nfrom tqdm.auto import tqdm\n\nc = 299_792_458  # speed of light in vaccum [m/s]\nomega = 7.292115e-5  # angular velocity [rad/s] in ECEF coordinate WGS 84","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.699734Z","iopub.execute_input":"2022-07-06T05:55:50.70019Z","iopub.status.idle":"2022-07-06T05:55:50.7157Z","shell.execute_reply.started":"2022-07-06T05:55:50.700159Z","shell.execute_reply":"2022-07-06T05:55:50.714677Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"base_path","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.717051Z","iopub.execute_input":"2022-07-06T05:55:50.717483Z","iopub.status.idle":"2022-07-06T05:55:50.728072Z","shell.execute_reply.started":"2022-07-06T05:55:50.717443Z","shell.execute_reply":"2022-07-06T05:55:50.726816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"gnss = pd.read_csv(f'{base_path}{tripId}/device_gnss.csv', dtype={'SignalType': str})\ntruth = pd.read_csv(f'{base_path}{tripId}/ground_truth.csv')","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:50.729201Z","iopub.execute_input":"2022-07-06T05:55:50.729718Z","iopub.status.idle":"2022-07-06T05:55:52.241184Z","shell.execute_reply.started":"2022-07-06T05:55:50.729664Z","shell.execute_reply":"2022-07-06T05:55:52.2402Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"m = len(truth)  # Number of timesteps\ny_wls = np.zeros((m, 3))  # Receiver positions estimated here\nv_wls = np.zeros((m, 3))  # Receiver velocities estimated in ECEF frame\n\nfor i, (t_nano, df1) in enumerate(tqdm(gnss.groupby('TimeNanos'), total=m)):\n    #\n    # 1. Position estimation\n    #\n    \n    # Corrected pseudo range ρ [m]\n    rho = (df1['RawPseudorangeMeters'] + df1['SvClockBiasMeters'] - df1['IsrbMeters']\n           - df1['IonosphericDelayMeters'] - df1['TroposphericDelayMeters']).values\n\n    # Satellite positions at emmision time t_i in ECEF(t_i)\n    x_sat = df1[['SvPositionXEcefMeters', 'SvPositionYEcefMeters', 'SvPositionZEcefMeters']].values\n\n    # Inverse uncertainty weight\n    w = 1 / df1['RawPseudorangeUncertaintyMeters'].values\n\n    def f(y):\n        \"\"\"\n        Compute error for trial receiver position y\n\n        y (y1, y2, y3, b):\n          y: recerver position at receiving time\n          b: receiver clock bias in meters\n        \"\"\"\n        b = y[3]\n        r = rho - b  # distance to each satellite [m]\n        tau = r / c  # signal flight time\n\n        # Rotate satellite positions at emission to present ECEF coordinate\n        x = np.empty_like(x_sat)\n        cosO = np.cos(omega * tau)\n        sinO = np.sin(omega * tau)\n        x[:, 0] =  cosO * x_sat[:, 0] + sinO * x_sat[:, 1]\n        x[:, 1] = -sinO * x_sat[:, 0] + cosO * x_sat[:, 1]\n        x[:, 2] = x_sat[:, 2]\n\n        return w * (np.sqrt(np.sum((x - y[:3])**2, axis=1)) - r)\n\n    \n    # Fit receiver position y and clock bias b\n    x0 = np.zeros(4)  # initial guess\n    opt = scipy.optimize.least_squares(f, x0)\n    y = opt.x[:3]\n    b = opt.x[3]\n    \n    #\n    # 2. Velocity estimation\n    #\n    \n    # Use estimated position\n    r = rho - b  # distance to each satellite [m]\n    tau = r / c\n    \n    # Satellite positions at emission in present (signal arrival time) ECEF coordinate\n    x = np.empty_like(x_sat)\n    cosO = np.cos(omega * tau)\n    sinO = np.sin(omega * tau)\n    x[:, 0] =  cosO * x_sat[:, 0] + sinO * x_sat[:, 1]\n    x[:, 1] = -sinO * x_sat[:, 0] + cosO * x_sat[:, 1]\n    x[:, 2] = x_sat[:, 2]\n\n    v_sat_ecef = df1[['SvVelocityXEcefMetersPerSecond',\n                      'SvVelocityYEcefMetersPerSecond',\n                      'SvVelocityZEcefMetersPerSecond']].values\n        \n    # Velocity in inertial frame (matching ECEF at signal emission time)\n    v_sate = np.empty_like(v_sat_ecef)\n    v_sate[:, 0] = v_sat_ecef[:, 0] - omega * x_sat[:, 1]\n    v_sate[:, 1] = v_sat_ecef[:, 1] + omega * x_sat[:, 0]\n    v_sate[:, 2] = v_sat_ecef[:, 2]\n\n    # Rotate the velocity to another inertial frame matching ECEF at signal arrival time\n    v_sat = np.empty_like(v_sat_ecef)\n    v_sat[:, 0] =  cosO * v_sate[:, 0] + sinO * v_sate[:, 1]\n    v_sat[:, 1] = -sinO * v_sate[:, 0] + cosO * v_sate[:, 1]\n    v_sat[:, 2] = v_sate[:, 2]\n\n    # Direction from receiver to sattelites\n    r_vec = x - y.reshape(1, 3)\n    r_hat = r_vec / np.linalg.norm(r_vec, axis=1).reshape(-1, 1)  # unit vector\n    \n    # Line-of-sight velocity from doppler shift data\n    v_los = df1['PseudorangeRateMetersPerSecond'].values  \n\n    # Inverse uncertainty in v_los for weights\n    w_vel = 1 / df1['PseudorangeRateUncertaintyMetersPerSecond'].values\n    \n    def f_vel(v):\n        \"\"\"\n        Return weighted error for velocity estimate v\n\n        v (v1, v2, v3, v_b): Receiver velocity and velocity bias\n        \"\"\"    \n        # Line-of-sight relative velocity for fitting parameter v\n        v_rel = np.sum((v_sat - v[:3].reshape(1, 3)) * r_hat, axis=1)  # dot product to r_hat\n\n        err = w_vel * (v_rel - v_los + v[3])\n\n        return err\n    \n    v0 = np.zeros(4)  # initial guess\n    opt = scipy.optimize.least_squares(f_vel, v0)\n    v = opt.x[:3]\n    vb = opt.x[3]\n    \n    # Receiver velocity in ECEF frame\n    v_ecef = np.zeros(3)\n    v_ecef[0] = v[0] + omega * y[1]\n    v_ecef[1] = v[1] - omega * y[0]\n    v_ecef[2] = v[2]\n\n    # Save result\n    y_wls[i, :] = y\n    v_wls[i, :] = v_ecef","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:55:52.242545Z","iopub.execute_input":"2022-07-06T05:55:52.242862Z","iopub.status.idle":"2022-07-06T05:57:27.248106Z","shell.execute_reply.started":"2022-07-06T05:55:52.242833Z","shell.execute_reply":"2022-07-06T05:57:27.246811Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# reference position\nlat0 = df_temp[\"LatitudeDegrees\"][0]\nlon0 = df_temp[\"LongitudeDegrees\"][0]\nh0 = df_temp[\"higth\"][0]","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:27.249733Z","iopub.execute_input":"2022-07-06T05:57:27.25072Z","iopub.status.idle":"2022-07-06T05:57:27.258204Z","shell.execute_reply.started":"2022-07-06T05:57:27.250673Z","shell.execute_reply":"2022-07-06T05:57:27.256931Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#doppler velocity -> yaw\nv_enu = np.array(pm.ecef2enuv(v_wls[:, 0], v_wls[:, 1], v_wls[:, 2], lat0, lon0, h0)).T\nyaw_doppler = np.rad2deg(np.arctan2(v_enu[:, 1],v_enu[:,0]))\ndf_temp[\"yaw_doppler\"] = yaw_doppler\ndf_temp.loc[df_temp['yaw_doppler'] > 360, 'yaw_doppler'] = df_temp.loc[df_temp['yaw_doppler'] > 360, 'yaw_doppler'] - 360\ndf_temp.loc[df_temp['yaw_doppler'] < 0, 'yaw_doppler'] = df_temp.loc[df_temp['yaw_doppler'] < 0, 'yaw_doppler'] + 360","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:27.259661Z","iopub.execute_input":"2022-07-06T05:57:27.26057Z","iopub.status.idle":"2022-07-06T05:57:27.277932Z","shell.execute_reply.started":"2022-07-06T05:57:27.260524Z","shell.execute_reply":"2022-07-06T05:57:27.276601Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# vis yaw\nvisualize_trafic(df_temp,[\"yaw_doppler\"],name_ = \"yaw_doppler\")","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:27.279503Z","iopub.execute_input":"2022-07-06T05:57:27.279852Z","iopub.status.idle":"2022-07-06T05:57:28.369887Z","shell.execute_reply.started":"2022-07-06T05:57:27.279822Z","shell.execute_reply":"2022-07-06T05:57:28.368985Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### Kalman filter for gnss only","metadata":{}},{"cell_type":"code","source":"def vincenty_distance(llh1, llh2):\n    \"\"\"\n    Args:\n        llh1 : [latitude,longitude] (deg)\n        llh2 : [latitude,longitude] (deg)\n    Returns:\n        d : distance between llh1 and llh2 (m)\n    \"\"\"\n    d, az = np.array(pmv.vdist(llh1[:, 0], llh1[:, 1], llh2[:, 0], llh2[:, 1]))\n\n    return d\n\n\n# Compute score\ndef calc_score(llh, llh_gt):\n    \"\"\"\n    Args:\n        llh : [latitude,longitude] (deg)\n        llh_gt : [latitude,longitude] (deg)\n    Returns:\n        score : (m)\n    \"\"\"\n    d = vincenty_distance(llh, llh_gt)\n    score = np.mean([np.quantile(d, 0.50), np.quantile(d, 0.95)])\n\n    return score","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:28.371086Z","iopub.execute_input":"2022-07-06T05:57:28.371535Z","iopub.status.idle":"2022-07-06T05:57:28.379679Z","shell.execute_reply.started":"2022-07-06T05:57:28.371505Z","shell.execute_reply":"2022-07-06T05:57:28.378836Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Kalman filter\ndef Kalman_filter(zs, us):\n    # Parameters\n    sigma_v = 0.6\n    sigma_x = 5.0  # position SD m\n    sigma_mahalanobis = 30.0 # Mahalanobis distance for rejecting innovation\n    \n    n, dim_x = zs.shape\n    F = np.eye(3)  # Transition matrix\n    Q = sigma_v**2 * np.eye(3)  # Process noise\n\n    H = np.eye(3)  # Measurement function\n    R = sigma_x**2 * np.eye(3)  # Measurement noise\n\n    # Initial state and covariance\n    x = zs[0, :3].T  # State\n    P = sigma_x**2 * np.eye(3)  # State covariance\n    I = np.eye(dim_x)\n\n    x_kf = np.zeros([n, dim_x])\n    P_kf = np.zeros([n, dim_x, dim_x])\n\n    # Kalman filtering\n    for i, (u, z) in enumerate(zip(us, zs)):\n        # First step\n        if i == 0:\n            x_kf[i] = x.T\n            P_kf[i] = P\n            continue\n\n        # Prediction step\n        x = F @ x + u.T\n        P = (F @ P) @ F.T + Q\n\n        # Check outliers for observation\n        d = distance.mahalanobis(z, H @ x, np.linalg.pinv(P))\n\n        # Update step\n        if d < sigma_mahalanobis:\n            y = z.T - H @ x\n            S = (H @ P) @ H.T + R\n            K = (P @ H.T) @ np.linalg.inv(S)\n            x = x + K @ y\n            P = (I - (K @ H)) @ P\n        else:\n            # If no observation update is available, increase covariance\n            P += 10**2*Q\n\n        x_kf[i] = x.T\n        P_kf[i] = P\n\n    return x_kf, P_kf\n\n\n# Forward + backward Kalman filter and smoothing\ndef Kalman_smoothing(x_wls, v_wls):\n    n, dim_x = x_wls.shape\n\n    # Forward\n    v = np.vstack([np.zeros([1, 3]), (v_wls[:-1, :] + v_wls[1:, :])/2])\n    x_f, P_f = Kalman_filter(x_wls, v)\n\n    # Backward\n    v = -np.flipud(v_wls)\n    v = np.vstack([np.zeros([1, 3]), (v[:-1, :] + v[1:, :])/2])\n    x_b, P_b = Kalman_filter(np.flipud(x_wls), v)\n\n    # Smoothing\n    x_fb = np.zeros_like(x_f)\n    P_fb = np.zeros_like(P_f)\n    for (f, b) in zip(range(n), range(n-1, -1, -1)):\n        P_fi = np.linalg.inv(P_f[f])\n        P_bi = np.linalg.inv(P_b[b])\n\n        P_fb[f] = np.linalg.inv(P_fi + P_bi)\n        x_fb[f] = P_fb[f] @ (P_fi @ x_f[f] + P_bi @ x_b[b])\n\n    return x_fb, x_f, np.flipud(x_b)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:28.381503Z","iopub.execute_input":"2022-07-06T05:57:28.382286Z","iopub.status.idle":"2022-07-06T05:57:28.402107Z","shell.execute_reply.started":"2022-07-06T05:57:28.382248Z","shell.execute_reply":"2022-07-06T05:57:28.400955Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x_wls = df_temp[[\"WlsPositionXEcefMeters\",\"WlsPositionYEcefMeters\",\"WlsPositionZEcefMeters\"]].to_numpy()\nx_kf, x_f, x_b = Kalman_smoothing(x_wls, v_wls)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:28.40418Z","iopub.execute_input":"2022-07-06T05:57:28.404799Z","iopub.status.idle":"2022-07-06T05:57:30.071616Z","shell.execute_reply.started":"2022-07-06T05:57:28.404761Z","shell.execute_reply":"2022-07-06T05:57:30.069788Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"llh_kf_ = np.array(pm.ecef2geodetic(x_b[:, 0], x_b[:, 1], x_b[:, 2])).T\nllh = np.array(pm.ecef2geodetic(x_wls[:, 0], x_wls[:, 1], x_wls[:, 2])).T\nllh_gt = truth[['LatitudeDegrees', 'LongitudeDegrees']].to_numpy()","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:30.080016Z","iopub.execute_input":"2022-07-06T05:57:30.080611Z","iopub.status.idle":"2022-07-06T05:57:30.096187Z","shell.execute_reply.started":"2022-07-06T05:57:30.080559Z","shell.execute_reply":"2022-07-06T05:57:30.094812Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"score_kf = calc_score(llh_kf_[:-1, :], llh_gt[:-1, :])\nscore = calc_score(llh, llh_gt)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:30.098475Z","iopub.execute_input":"2022-07-06T05:57:30.099821Z","iopub.status.idle":"2022-07-06T05:57:30.134946Z","shell.execute_reply.started":"2022-07-06T05:57:30.099762Z","shell.execute_reply":"2022-07-06T05:57:30.133343Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(f'Score KF(GNSS only)         {score_kf:.4f} [m]')\nprint(f'Score base         {score:.4f} [m]')","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:30.13693Z","iopub.execute_input":"2022-07-06T05:57:30.137444Z","iopub.status.idle":"2022-07-06T05:57:30.14651Z","shell.execute_reply.started":"2022-07-06T05:57:30.137397Z","shell.execute_reply":"2022-07-06T05:57:30.145088Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"temp = df_temp.copy()\ntemp[\"LatitudeDegrees\"] = llh_kf_[:,0]\ntemp[\"LongitudeDegrees\"] = llh_kf_[:,1]\nvisualize_trafic(temp.reset_index(),[\"index\"],name_ = \"index\")","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:30.148679Z","iopub.execute_input":"2022-07-06T05:57:30.149764Z","iopub.status.idle":"2022-07-06T05:57:30.245687Z","shell.execute_reply.started":"2022-07-06T05:57:30.14954Z","shell.execute_reply":"2022-07-06T05:57:30.244459Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"### ecef -> enu transform\n Transforms the coordinate system to use the gyro sensor values of imu","metadata":{}},{"cell_type":"code","source":"for i in range(len(df_temp)):\n    x = df_temp.at[i,\"WlsPositionXEcefMeters\"]\n    y = df_temp.at[i,\"WlsPositionYEcefMeters\"]\n    z = df_temp.at[i,\"WlsPositionZEcefMeters\"]\n    e,n,u = pm.ecef2enu(x,y,z,lat0,lon0,h0)\n    df_temp.at[i,\"e\"] = e\n    df_temp.at[i,\"n\"] = n\n    df_temp.at[i,\"u\"] = u","metadata":{"execution":{"iopub.status.busy":"2022-07-06T05:57:30.247334Z","iopub.execute_input":"2022-07-06T05:57:30.247668Z","iopub.status.idle":"2022-07-06T05:57:30.636361Z","shell.execute_reply.started":"2022-07-06T05:57:30.247635Z","shell.execute_reply":"2022-07-06T05:57:30.635169Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp[\"yaw_doppler_rad\"] = np.deg2rad(df_temp[\"yaw_doppler\"])\ndf_temp[\"yaw_doppler_rad_diff\"] = df_temp[\"yaw_doppler_rad\"].diff().fillna(0)\ndf_temp[\"vel\"] = np.sqrt(v_enu[:, 0] ** 2 + v_enu[:, 1] ** 2)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T06:10:16.216339Z","iopub.execute_input":"2022-07-06T06:10:16.217059Z","iopub.status.idle":"2022-07-06T06:10:16.226358Z","shell.execute_reply.started":"2022-07-06T06:10:16.217005Z","shell.execute_reply":"2022-07-06T06:10:16.225265Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp[\"vel_en\"] = np.sqrt(df_temp.e.diff() ** 2 + df_temp.n.diff() ** 2).fillna(0)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T06:16:21.29775Z","iopub.execute_input":"2022-07-06T06:16:21.298475Z","iopub.status.idle":"2022-07-06T06:16:21.306239Z","shell.execute_reply.started":"2022-07-06T06:16:21.29843Z","shell.execute_reply":"2022-07-06T06:16:21.305282Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp[[\"vel_en\",\"vel\"]].plot()#概ね一致している","metadata":{"execution":{"iopub.status.busy":"2022-07-06T06:16:21.853852Z","iopub.execute_input":"2022-07-06T06:16:21.854338Z","iopub.status.idle":"2022-07-06T06:16:22.088628Z","shell.execute_reply.started":"2022-07-06T06:16:21.8543Z","shell.execute_reply":"2022-07-06T06:16:22.087434Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from scipy import signal\ndef lowpass(x, samplerate, fp, fs, gpass, gstop):\n    fn = samplerate / 2  \n    wp = fp / fn  \n    ws = fs / fn  \n    N, Wn = signal.buttord(wp, ws, gpass, gstop)  \n    b, a = signal.butter(N, Wn, \"low\")            \n    y = signal.filtfilt(b, a, x)                  \n    return y  \n\nfp = 1000 \nfs = 2000 \ngpass = 3 \ngstop = 40 \nsamplerate = 25600\n# low path \n\ndf_temp[\"w_z_f\"] = lowpass(df_temp[\"w_z\"], samplerate, fp, fs, gpass, gstop)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T06:16:22.724444Z","iopub.execute_input":"2022-07-06T06:16:22.724849Z","iopub.status.idle":"2022-07-06T06:16:22.734761Z","shell.execute_reply.started":"2022-07-06T06:16:22.724815Z","shell.execute_reply":"2022-07-06T06:16:22.733888Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# def fx(x,u):\n#     #x[e,n,yaw,vel]\n#     #u[Angle velocity,acceleration]\n#     res = np.zeros(4)\n#     res[0] = x[0] + (x[3])*np.cos(x[2])#x\n#     res[1] = x[1] + (x[3])*np.sin(x[2])#y\n    \n#     if x[3] <= 20:\n#         th = 360\n#     elif x[3] <= 30:\n#         th = 40\n#     else:\n#         th = 10\n    \n#     if np.rad2deg(u[0]) > th:\n#         u[0] = np.deg2rad(th)\n#     if np.rad2deg(u[0]) < - th:\n#         u[0] = np.deg2rad(- th)\n#     res[2] = x[2] + u[0]\n#     res[3] = x[3] + u[1]\n#     return res","metadata":{"execution":{"iopub.status.busy":"2022-07-06T06:16:23.482557Z","iopub.execute_input":"2022-07-06T06:16:23.483029Z","iopub.status.idle":"2022-07-06T06:16:23.488828Z","shell.execute_reply.started":"2022-07-06T06:16:23.482993Z","shell.execute_reply":"2022-07-06T06:16:23.487584Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def fx(x,u):\n    #x[e,n,yaw]\n    #u[velocity、Angle velocity]\n    res = np.zeros(3)\n    res[0] = x[0] + (u[0])*np.cos(x[2])#x\n    res[1] = x[1] + (u[0])*np.sin(x[2])#y\n    \n    if u[0] <= 20:\n        th = 360\n    elif u[0] <= 30:\n        th = 40\n    else:\n        th = 10\n    \n    if np.rad2deg(u[1]) > th:\n        u[1] = np.deg2rad(th)\n    if np.rad2deg(u[1]) < - th:\n        u[1] = np.deg2rad(- th)\n    res[2] = x[2] + u[1]\n        \n    return res","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:08:52.406489Z","iopub.execute_input":"2022-07-06T07:08:52.407804Z","iopub.status.idle":"2022-07-06T07:08:52.417354Z","shell.execute_reply.started":"2022-07-06T07:08:52.407749Z","shell.execute_reply":"2022-07-06T07:08:52.4165Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#check fx\ndf_temp_ = df_temp.reset_index()\nus = df_temp_[[\"vel_en\",\"yaw_doppler_rad_diff\"]].to_numpy()\nx = df_temp_[[\"e\",\"n\",\"yaw_doppler_rad\"]].loc[0].to_numpy()\ns = []\nfor i, u in enumerate(us):\n    s.append(x)\n    x = fx(x,u)\n    \nplt.plot(np.array(s)[:, 0],np.array(s)[:, 1],c = \"m\")\nplt.plot(df_temp_[:].e,df_temp_[:].n,c = \"b\")","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:09:41.345375Z","iopub.execute_input":"2022-07-06T07:09:41.34619Z","iopub.status.idle":"2022-07-06T07:09:41.602345Z","shell.execute_reply.started":"2022-07-06T07:09:41.34615Z","shell.execute_reply":"2022-07-06T07:09:41.600922Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def jacobian_fx(x,u):\n    v = u[0]\n    gry = u[1]#角速度\n    theta = x[2]\n    return np.array ([[1, 0, -v*np.sin(theta)],\n                      [0, 1, v*np.cos(theta)],\n                      [0, 0, 1]\n                     ])","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:13.458171Z","iopub.execute_input":"2022-07-06T07:25:13.458939Z","iopub.status.idle":"2022-07-06T07:25:13.464485Z","shell.execute_reply.started":"2022-07-06T07:25:13.458885Z","shell.execute_reply":"2022-07-06T07:25:13.463706Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def jacobian_fu(x,u):\n    v = u[0]\n    gry = u[1]#角速度\n    theta = x[2]\n    return np.array ([[np.cos(theta),0],\n                      [np.sin(theta),0],\n                      [0, 1]\n                     ])","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:14.239307Z","iopub.execute_input":"2022-07-06T07:25:14.24Z","iopub.status.idle":"2022-07-06T07:25:14.245355Z","shell.execute_reply.started":"2022-07-06T07:25:14.23996Z","shell.execute_reply":"2022-07-06T07:25:14.244337Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#check jacobian\ndf_temp_ = df_temp.reset_index()\nus = df_temp_[[\"vel_en\",\"yaw_doppler_rad_diff\"]].to_numpy()\nx = df_temp_[[\"e\",\"n\",\"yaw_doppler_rad\"]].loc[0].to_numpy()\ns = []\nfor i, u in enumerate(us):\n    s.append(x)\n    F = jacobian_fx(x,u)\n    G = jacobian_fu(x,u)\n    x = F @ x + G @ u\n    \nplt.plot(np.array(s)[:, 0],np.array(s)[:, 1],c = \"m\")\nplt.plot(df_temp_[:].e,df_temp_[:].n,c = \"b\")\n#","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:14.864968Z","iopub.execute_input":"2022-07-06T07:25:14.865344Z","iopub.status.idle":"2022-07-06T07:25:15.15802Z","shell.execute_reply.started":"2022-07-06T07:25:14.865313Z","shell.execute_reply":"2022-07-06T07:25:15.157088Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Kalman filter\ndef Kalman_filter(zs, us):\n    # Parameters\n    sigma_v = 0.6\n    sigma_x = 5 # position SD m\n    sigma_mahalanobis = 30.0 # Mahalanobis distance for rejecting innovation\n    \n    n, dim_x = zs.shape\n    Q = sigma_v**2 * np.eye(2)  # Process noise\n\n    H = np.eye(3)  # Measurement function\n    R = sigma_x**2 * np.eye(3)  # Measurement noise\n\n    # Initial state and covariance\n    x = zs[0, :3].T  # State\n    P = sigma_x**2 * np.eye(3)  # State covariance\n    I = np.eye(dim_x)\n\n    x_kf = np.zeros([n, dim_x])\n    P_kf = np.zeros([n, dim_x, dim_x])\n\n    # Kalman filtering\n    for i, (u, z) in enumerate(zip(us, zs)):\n        # First step\n        if i == 0:\n            x_kf[i] = x.T\n            P_kf[i] = P\n            continue\n\n        # Prediction step\n        # add non linear\n        \n        F = jacobian_fx(x,u)\n#         print(F.shape,P.shape)\n        G = jacobian_fu(x,u)\n        temp1 = (G @ Q)\n        temp = (G @ Q) @ G.T\n        P = (F @ P) @ F.T + (G @ Q) @ G.T\n    \n        x = fx(x,u)\n        # Check outliers for observation\n        d = distance.mahalanobis(z, H @ x, np.linalg.pinv(P))\n        \n        # Update step\n        if d < sigma_mahalanobis:\n            y = z.T - H @ x\n            S = (H @ P) @ H.T + R\n            K = (P @ H.T) @ np.linalg.inv(S)\n            x = x + K @ y\n            P = (I - (K @ H)) @ P\n        else:\n            print()\n            # If no observation update is available, increase covariance\n            P += 10**2*((G @ Q) @ G.T)\n\n        x_kf[i] = x.T\n        P_kf[i] = P\n\n    return x_kf, P_kf\n\n\n# Forward + backward Kalman filter and smoothing\ndef Kalman_smoothing(en, u):\n    n, dim_x = en.shape\n\n    # Forward\n    u_f = np.vstack([np.zeros([1, 2]), (u[:-1, :] + u[1:, :])/2])\n    x_f, P_f = Kalman_filter(en, u_f)\n    # Backward\n    u = -np.flipud(u)\n    u = np.vstack([np.zeros([1, 2]), (u[:-1, :] + u[1:, :])/2])\n    x_b, P_b = Kalman_filter(np.flipud(en), u)\n\n    # Smoothing\n    x_fb = np.zeros_like(x_f)\n    P_fb = np.zeros_like(P_f)\n    for (f, b) in zip(range(n), range(n-1, -1, -1)):\n        P_fi = np.linalg.inv(P_f[f])\n        P_bi = np.linalg.inv(P_b[b])\n\n        P_fb[f] = np.linalg.inv(P_fi + P_bi)\n        x_fb[f] = P_fb[f] @ (P_fi @ x_f[f] + P_bi @ x_b[b])\n\n    return x_fb, x_f, np.flipud(x_b)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:16.208003Z","iopub.execute_input":"2022-07-06T07:25:16.208683Z","iopub.status.idle":"2022-07-06T07:25:16.231023Z","shell.execute_reply.started":"2022-07-06T07:25:16.208643Z","shell.execute_reply":"2022-07-06T07:25:16.229629Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_temp[\"yaw_doppler_rad_diff\"] = df_temp[\"yaw_doppler_rad_diff\"].fillna(0)\nen = df_temp[[\"e\",\"n\",\"yaw_doppler_rad\"]].to_numpy()\nu = df_temp[[\"vel\",\"yaw_doppler_rad_diff\"]].to_numpy()\nx_kf, x_f, _ = Kalman_smoothing(en, u)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:40.681585Z","iopub.execute_input":"2022-07-06T07:25:40.68199Z","iopub.status.idle":"2022-07-06T07:25:43.077582Z","shell.execute_reply.started":"2022-07-06T07:25:40.681958Z","shell.execute_reply":"2022-07-06T07:25:43.075935Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# check ekf score(gnss only)\nllh_kf = np.array(pm.enu2geodetic(x_f[:, 0], x_f[:, 1], df_temp[\"u\"],lat0,lon0,h0)).T\nscore_kf = calc_score(llh_kf[:-1, :], llh_gt[:-1, :])\nprint(f'Score KF         {score_kf:.4f} [m]')\nprint(f'Score base         {score:.4f} [m]')","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:43.080269Z","iopub.execute_input":"2022-07-06T07:25:43.080837Z","iopub.status.idle":"2022-07-06T07:25:43.119867Z","shell.execute_reply.started":"2022-07-06T07:25:43.080786Z","shell.execute_reply":"2022-07-06T07:25:43.118408Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"note: The use of approximate formulas has reduced accuracy.","metadata":{"execution":{"iopub.status.busy":"2022-07-01T08:16:49.309457Z","iopub.execute_input":"2022-07-01T08:16:49.309877Z","iopub.status.idle":"2022-07-01T08:16:49.319004Z","shell.execute_reply.started":"2022-07-01T08:16:49.309845Z","shell.execute_reply":"2022-07-01T08:16:49.316851Z"}}},{"cell_type":"code","source":"temp = df_temp.copy()\ntemp[\"LatitudeDegrees\"] = llh_kf[:,0]\ntemp[\"LongitudeDegrees\"] = llh_kf[:,1]\nvisualize_trafic(temp.reset_index(),[\"index\",\"vel\"],name_ = \"vel\")","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:51.009525Z","iopub.execute_input":"2022-07-06T07:25:51.010526Z","iopub.status.idle":"2022-07-06T07:25:51.090095Z","shell.execute_reply.started":"2022-07-06T07:25:51.010471Z","shell.execute_reply":"2022-07-06T07:25:51.088909Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# add imu","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:25:53.224163Z","iopub.execute_input":"2022-07-06T07:25:53.224586Z","iopub.status.idle":"2022-07-06T07:25:53.228598Z","shell.execute_reply.started":"2022-07-06T07:25:53.22455Z","shell.execute_reply":"2022-07-06T07:25:53.227816Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"en = df_temp[[\"e\",\"n\",\"yaw_doppler_rad\"]].to_numpy()\nu = df_temp[[\"vel\",\"w_z_f\"]].to_numpy()\nx_kf, x_f, x_b = Kalman_smoothing(en, u)","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:27:04.166133Z","iopub.execute_input":"2022-07-06T07:27:04.166889Z","iopub.status.idle":"2022-07-06T07:27:06.50856Z","shell.execute_reply.started":"2022-07-06T07:27:04.166847Z","shell.execute_reply":"2022-07-06T07:27:06.507124Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nllh_kf_b = np.array(pm.enu2geodetic(x_kf[:, 0], x_kf[:, 1], df_temp[\"u\"],lat0,lon0,h0)).T\nscore_kf = calc_score(llh_kf_b[:-1, :], llh_gt[:-1, :])\nprint(f'Score KF         {score_kf:.4f} [m]')\nprint(f'Score base         {score:.4f} [m]')","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:27:06.51122Z","iopub.execute_input":"2022-07-06T07:27:06.512099Z","iopub.status.idle":"2022-07-06T07:27:06.543287Z","shell.execute_reply.started":"2022-07-06T07:27:06.512042Z","shell.execute_reply":"2022-07-06T07:27:06.541996Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"temp = df_temp.copy()\ntemp[\"LatitudeDegrees\"] = llh_kf_b[:,0]\ntemp[\"LongitudeDegrees\"] = llh_kf_b[:,1]\nvisualize_trafic(temp.reset_index(),[\"index\",\"vel\"],name_ = \"vel\")","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:27:07.442389Z","iopub.execute_input":"2022-07-06T07:27:07.442766Z","iopub.status.idle":"2022-07-06T07:27:07.520398Z","shell.execute_reply.started":"2022-07-06T07:27:07.442736Z","shell.execute_reply":"2022-07-06T07:27:07.519084Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"llh_kf_f = np.array(pm.enu2geodetic(x_f[:, 0], x_f[:, 1], df_temp[\"u\"],lat0,lon0,h0)).T\nscore_kf = calc_score(llh_kf_f[:-1, :], llh_gt[:-1, :])\nprint(f'Score KF         {score_kf:.4f} [m]')\nprint(f'Score base         {score:.4f} [m]')\ntemp = df_temp.copy()\ntemp[\"LatitudeDegrees\"] = llh_kf_f[:,0]\ntemp[\"LongitudeDegrees\"] = llh_kf_f[:,1]","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:27:08.689944Z","iopub.execute_input":"2022-07-06T07:27:08.690667Z","iopub.status.idle":"2022-07-06T07:27:08.710957Z","shell.execute_reply.started":"2022-07-06T07:27:08.690627Z","shell.execute_reply":"2022-07-06T07:27:08.709637Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"visualize_trafic(temp.reset_index(),[\"index\",\"yaw_doppler\"],name_ = \"yaw_doppler\")","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:27:09.75936Z","iopub.execute_input":"2022-07-06T07:27:09.75978Z","iopub.status.idle":"2022-07-06T07:27:09.841376Z","shell.execute_reply.started":"2022-07-06T07:27:09.759744Z","shell.execute_reply":"2022-07-06T07:27:09.840112Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"llh_kf = np.array(pm.enu2geodetic(x_b[:, 0], x_b[:, 1], df_temp[\"u\"],lat0,lon0,h0)).T\nscore_kf = calc_score(llh_kf[:-1, :], llh_gt[:-1, :])\nprint(f'Score KF         {score_kf:.4f} [m]')\nprint(f'Score base         {score:.4f} [m]')\ntemp = df_temp.copy()\ntemp[\"LatitudeDegrees\"] = llh_kf[:,0]\ntemp[\"LongitudeDegrees\"] = llh_kf[:,1]","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:27:10.744002Z","iopub.execute_input":"2022-07-06T07:27:10.744963Z","iopub.status.idle":"2022-07-06T07:27:10.763825Z","shell.execute_reply.started":"2022-07-06T07:27:10.744923Z","shell.execute_reply":"2022-07-06T07:27:10.762929Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"visualize_trafic(temp.reset_index(),[\"index\",\"yaw_doppler\"],name_ = \"yaw_doppler\")","metadata":{"execution":{"iopub.status.busy":"2022-07-06T07:27:12.396115Z","iopub.execute_input":"2022-07-06T07:27:12.397399Z","iopub.status.idle":"2022-07-06T07:27:12.474272Z","shell.execute_reply.started":"2022-07-06T07:27:12.397353Z","shell.execute_reply":"2022-07-06T07:27:12.473315Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"I worked on utilizing the extended Kalman filter and imu, but did not see any improvement in scores.\nAs I posted in the discussion, in the future I will try to see if I can use high period data to interpolate between GNSS","metadata":{}},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}