{
  "id": 261959,
  "title": "5th place solution (Saito)",
  "url": "/competitions/google-smartphone-decimeter-challenge/writeups/from-indoor-5th-place-solution-saito",
  "author_name": "",
  "post_date": "2021-08-05T14:28:53.227Z",
  "votes": 52,
  "comment_count": 2,
  "views": 0,
  "content": "<p>Congrats to all the winners, and thanks so much for hosting such an interesting competition! Here, I want to share my part of our team's solution.</p>\n<h1>Improved satellite positioning</h1>\n<p>I spent the first month of the competition learning GNSS and developed my own positioning program. In my program, I tried the following ideas,</p>\n<ul>\n<li>least squares weighting based on satellite elevation</li>\n<li>satellite elevation mask</li>\n<li>outlier removal based on least squares residuals</li>\n<li>isrbM averaging and regularization</li>\n<li>height smoothing and regularization</li>\n<li>carrier smoothing using accumulated delta range</li>\n</ul>\n<p>However, most ideas became ineffective after the subsequent optimization based smoothing. Perhaps the only essential improvement was carrier smoothing based on the accelerated delta range.</p>\n<h1>Use of sensor data</h1>\n<p>Based on acceleration, gyro, and geomagnetic sensors, I estimated vehicle orientation and acceleration, and added acceleration and lateral velocity terms to the cost function of subsequent optimizations. This idea may have had little effect after the introduction of velocity estimates.</p>\n<h1>Velocity estimation using doppler shift</h1>\n<p>The vehicle speed was estimated from the pseudo-range rate by the least squares method and used for subsequent optimization based smoothing. This improved the public LB by about 1 meter.</p>\n<h1>Optimization based smoothing</h1>\n<p>This part is the core of my solution.</p>\n<p>First, the dynamics of the vehicle is expressed by the following state equation.<br>\n<img src=\"https://user-images.githubusercontent.com/309785/128366897-369cc75b-46e9-419b-8f35-d0e884e9ff27.png\" alt=\"state_equation\"><br>\nwhere \\( \\phi \\) and \\( \\psi \\) are latitude and longitude, respectively.</p>\n<p>Then, by vertically arranging the states \\( X \\) and inputs, jerks,  \\( U \\)  at each time, the equality constraints on state transitions can be described as follows,</p>\n<p>[<br>\n A X + B U = 0<br>\n]</p>\n<p>In addition, by determining the observation matrix \\( C \\) according to the observation time based on Hermitian interpolation, the vector \\( Y \\), which is a vertical sequence of latitude and longitude at each observation time, can be written as follows,</p>\n<p>[<br>\nY = C X<br>\n]</p>\n<p>The optimization evaluation function \\( J \\) is set as the sum of the squares of the jerk \\( U \\) and the position estimation error, as follows,<br>\n[<br>\nJ = U^T R U + (\\hat{Y} - C X)^T L (\\hat{Y} - C X)<br>\n]</p>\n<p>Finally, the position estimation is formulated as the following quadratic programming problem.<br>\n<img src=\"https://user-images.githubusercontent.com/309785/128366891-08f79ee0-881e-4a6a-b9a5-887270cc83fb.png\" alt=\"optimization\"></p>\n<p>Based on this method, various information can be integrated by adding velocity error, acceleration error, cost related to lateral velocity, etc. to the cost function.</p>\n<p>The important point is to perform the above optimization by using positions of all smartphones in one driving data at the same time. This method is clearly more accurate than the method of making estimates for each smartphone and calculating their average.</p>\n<h1>Map matching</h1>\n<p>This process is applied only SJC/downtown.</p>\n<ul>\n<li>If the shortest distance between the GNSS position prediction result and the ground truth is more than a certain value, the prediction value is excluded in advance before smoothing.</li>\n<li>Replace the smoothing result with the nearest neighbor point of ground truth and perform smoothing again.</li>\n</ul>\n<h1>Bias correction</h1>\n<p>Because the smartphones are placed in the vehicle, I thought that the effect of multipath would appear asymmetrically and the positioning result would be biased with respect to the direction of the vehicle. Based on this idea, our team added a process to correct the position according to the direction the vehicle is traveling. This method contributed to the improvement of CV and public LB, but did not improve the private LB score.</p>\n<h1>Do not use public LB for validation</h1>\n<p>In the last indoor location competition, my team wasn't able to implement drastic improvement ideas such that discrete optimization towards the end of the competition due to poor post-processing validation. In this competition, I tried to minimize the number of submits by completing all parameter tuning and validation locally. As a result, our team was able to stay in the gold medal range even if a shake up occurred.</p>\n<h2>notebooks</h2>\n<ul>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-optimization-based-smoothing-1st-version\" target=\"_blank\">GSDC - Optimization based smoothing (1st version)</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-vehicle-speed-estimation-by-doppler-shift\" target=\"_blank\">GSDC - Vehicle Speed Estimation by Doppler Shift</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-improved-raw-gnss-baseline\" target=\"_blank\">GSDC - Improved Raw GNSS Baseline</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/dsdc-unified-post-processing\" target=\"_blank\">DSDC - Unified post-processing</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-bias-eda\" target=\"_blank\">GSDC - Bias EDA</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-bias-correction\" target=\"_blank\">GSDC - Bias Correction</a></li>\n</ul>",
  "messages": [
    {
      "id": "1451704",
      "postDate": "08/05/2021 12:10:14",
      "content": "<p>Congrats to all the winners, and thanks so much for hosting such an interesting competition! Here, I want to share my part of our team's solution.</p>\n<h1>Improved satellite positioning</h1>\n<p>I spent the first month of the competition learning GNSS and developed my own positioning program. In my program, I tried the following ideas,</p>\n<ul>\n<li>least squares weighting based on satellite elevation</li>\n<li>satellite elevation mask</li>\n<li>outlier removal based on least squares residuals</li>\n<li>isrbM averaging and regularization</li>\n<li>height smoothing and regularization</li>\n<li>carrier smoothing using accumulated delta range</li>\n</ul>\n<p>However, most ideas became ineffective after the subsequent optimization based smoothing. Perhaps the only essential improvement was carrier smoothing based on the accelerated delta range.</p>\n<h1>Use of sensor data</h1>\n<p>Based on acceleration, gyro, and geomagnetic sensors, I estimated vehicle orientation and acceleration, and added acceleration and lateral velocity terms to the cost function of subsequent optimizations. This idea may have had little effect after the introduction of velocity estimates.</p>\n<h1>Velocity estimation using doppler shift</h1>\n<p>The vehicle speed was estimated from the pseudo-range rate by the least squares method and used for subsequent optimization based smoothing. This improved the public LB by about 1 meter.</p>\n<h1>Optimization based smoothing</h1>\n<p>This part is the core of my solution.</p>\n<p>First, the dynamics of the vehicle is expressed by the following state equation.<br>\n<img src=\"https://user-images.githubusercontent.com/309785/128366897-369cc75b-46e9-419b-8f35-d0e884e9ff27.png\" alt=\"state_equation\"><br>\nwhere \\( \\phi \\) and \\( \\psi \\) are latitude and longitude, respectively.</p>\n<p>Then, by vertically arranging the states \\( X \\) and inputs, jerks,  \\( U \\)  at each time, the equality constraints on state transitions can be described as follows,</p>\n<p>[<br>\n A X + B U = 0<br>\n]</p>\n<p>In addition, by determining the observation matrix \\( C \\) according to the observation time based on Hermitian interpolation, the vector \\( Y \\), which is a vertical sequence of latitude and longitude at each observation time, can be written as follows,</p>\n<p>[<br>\nY = C X<br>\n]</p>\n<p>The optimization evaluation function \\( J \\) is set as the sum of the squares of the jerk \\( U \\) and the position estimation error, as follows,<br>\n[<br>\nJ = U^T R U + (\\hat{Y} - C X)^T L (\\hat{Y} - C X)<br>\n]</p>\n<p>Finally, the position estimation is formulated as the following quadratic programming problem.<br>\n<img src=\"https://user-images.githubusercontent.com/309785/128366891-08f79ee0-881e-4a6a-b9a5-887270cc83fb.png\" alt=\"optimization\"></p>\n<p>Based on this method, various information can be integrated by adding velocity error, acceleration error, cost related to lateral velocity, etc. to the cost function.</p>\n<p>The important point is to perform the above optimization by using positions of all smartphones in one driving data at the same time. This method is clearly more accurate than the method of making estimates for each smartphone and calculating their average.</p>\n<h1>Map matching</h1>\n<p>This process is applied only SJC/downtown.</p>\n<ul>\n<li>If the shortest distance between the GNSS position prediction result and the ground truth is more than a certain value, the prediction value is excluded in advance before smoothing.</li>\n<li>Replace the smoothing result with the nearest neighbor point of ground truth and perform smoothing again.</li>\n</ul>\n<h1>Bias correction</h1>\n<p>Because the smartphones are placed in the vehicle, I thought that the effect of multipath would appear asymmetrically and the positioning result would be biased with respect to the direction of the vehicle. Based on this idea, our team added a process to correct the position according to the direction the vehicle is traveling. This method contributed to the improvement of CV and public LB, but did not improve the private LB score.</p>\n<h1>Do not use public LB for validation</h1>\n<p>In the last indoor location competition, my team wasn't able to implement drastic improvement ideas such that discrete optimization towards the end of the competition due to poor post-processing validation. In this competition, I tried to minimize the number of submits by completing all parameter tuning and validation locally. As a result, our team was able to stay in the gold medal range even if a shake up occurred.</p>\n<h2>notebooks</h2>\n<ul>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-optimization-based-smoothing-1st-version\" target=\"_blank\">GSDC - Optimization based smoothing (1st version)</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-vehicle-speed-estimation-by-doppler-shift\" target=\"_blank\">GSDC - Vehicle Speed Estimation by Doppler Shift</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-improved-raw-gnss-baseline\" target=\"_blank\">GSDC - Improved Raw GNSS Baseline</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/dsdc-unified-post-processing\" target=\"_blank\">DSDC - Unified post-processing</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-bias-eda\" target=\"_blank\">GSDC - Bias EDA</a></li>\n<li><a href=\"https://www.kaggle.com/saitodevel01/gsdc-bias-correction\" target=\"_blank\">GSDC - Bias Correction</a></li>\n</ul>",
      "rawMarkdown": "Congrats to all the winners, and thanks so much for hosting such an interesting competition! Here, I want to share my part of our team's solution.\n\n# Improved satellite positioning\n\nI spent the first month of the competition learning GNSS and developed my own positioning program. In my program, I tried the following ideas,\n\n+ least squares weighting based on satellite elevation\n+ satellite elevation mask\n+ outlier removal based on least squares residuals\n+ isrbM averaging and regularization\n+ height smoothing and regularization\n+ carrier smoothing using accumulated delta range\n\nHowever, most ideas became ineffective after the subsequent optimization based smoothing. Perhaps the only essential improvement was carrier smoothing based on the accelerated delta range.\n\n# Use of sensor data\n\nBased on acceleration, gyro, and geomagnetic sensors, I estimated vehicle orientation and acceleration, and added acceleration and lateral velocity terms to the cost function of subsequent optimizations. This idea may have had little effect after the introduction of velocity estimates.\n\n# Velocity estimation using doppler shift\n\nThe vehicle speed was estimated from the pseudo-range rate by the least squares method and used for subsequent optimization based smoothing. This improved the public LB by about 1 meter.\n\n# Optimization based smoothing\n\nThis part is the core of my solution.\n\nFirst, the dynamics of the vehicle is expressed by the following state equation.\n![state_equation](https://user-images.githubusercontent.com/309785/128366897-369cc75b-46e9-419b-8f35-d0e884e9ff27.png)\nwhere \\\\( \\phi \\\\) and \\\\( \\psi \\\\) are latitude and longitude, respectively.\n\nThen, by vertically arranging the states \\\\( X \\\\) and inputs, jerks,  \\\\( U \\\\)  at each time, the equality constraints on state transitions can be described as follows,\n\n\\[\n A X + B U = 0\n\\]\n\nIn addition, by determining the observation matrix \\\\( C \\\\) according to the observation time based on Hermitian interpolation, the vector \\\\( Y \\\\), which is a vertical sequence of latitude and longitude at each observation time, can be written as follows,\n\n\\[\nY = C X\n\\]\n\nThe optimization evaluation function \\\\( J \\\\) is set as the sum of the squares of the jerk \\\\( U \\\\) and the position estimation error, as follows,\n\\[\nJ = U^T R U + (\\hat{Y} - C X)^T L (\\hat{Y} - C X)\n\\]\n\nFinally, the position estimation is formulated as the following quadratic programming problem.\n![optimization](https://user-images.githubusercontent.com/309785/128366891-08f79ee0-881e-4a6a-b9a5-887270cc83fb.png)\n\nBased on this method, various information can be integrated by adding velocity error, acceleration error, cost related to lateral velocity, etc. to the cost function.\n\nThe important point is to perform the above optimization by using positions of all smartphones in one driving data at the same time. This method is clearly more accurate than the method of making estimates for each smartphone and calculating their average.\n\n# Map matching\n\nThis process is applied only SJC/downtown.\n\n+ If the shortest distance between the GNSS position prediction result and the ground truth is more than a certain value, the prediction value is excluded in advance before smoothing.\n+ Replace the smoothing result with the nearest neighbor point of ground truth and perform smoothing again.\n\n# Bias correction\n\nBecause the smartphones are placed in the vehicle, I thought that the effect of multipath would appear asymmetrically and the positioning result would be biased with respect to the direction of the vehicle. Based on this idea, our team added a process to correct the position according to the direction the vehicle is traveling. This method contributed to the improvement of CV and public LB, but did not improve the private LB score.\n\n# Do not use public LB for validation\n\nIn the last indoor location competition, my team wasn't able to implement drastic improvement ideas such that discrete optimization towards the end of the competition due to poor post-processing validation. In this competition, I tried to minimize the number of submits by completing all parameter tuning and validation locally. As a result, our team was able to stay in the gold medal range even if a shake up occurred.\n\n## notebooks\n\n+ [GSDC - Optimization based smoothing (1st version)](https://www.kaggle.com/saitodevel01/gsdc-optimization-based-smoothing-1st-version)\n+ [GSDC - Vehicle Speed Estimation by Doppler Shift](https://www.kaggle.com/saitodevel01/gsdc-vehicle-speed-estimation-by-doppler-shift)\n+ [GSDC - Improved Raw GNSS Baseline](https://www.kaggle.com/saitodevel01/gsdc-improved-raw-gnss-baseline)\n+ [DSDC - Unified post-processing](https://www.kaggle.com/saitodevel01/dsdc-unified-post-processing)\n+ [GSDC - Bias EDA](https://www.kaggle.com/saitodevel01/gsdc-bias-eda)\n+ [GSDC - Bias Correction](https://www.kaggle.com/saitodevel01/gsdc-bias-correction)",
      "votes": null
    },
    {
      "id": "1456606",
      "postDate": "08/07/2021 02:31:28",
      "content": "<p>In my opinion this is the most elegant and insightful solution in this competition. Especially the optimization based smoothing that utilizes a state equation to model sensor behavior. That is pure genius. <br>\nThere will always be ensembles of ensembles - but this is what makes kaggle worthwhile for me. <br>\nCongratulations. </p>",
      "rawMarkdown": "In my opinion this is the most elegant and insightful solution in this competition. Especially the optimization based smoothing that utilizes a state equation to model sensor behavior. That is pure genius. \nThere will always be ensembles of ensembles - but this is what makes kaggle worthwhile for me. \nCongratulations.",
      "votes": null
    },
    {
      "id": "2007120",
      "postDate": "10/28/2022 03:26:04",
      "content": "<p>I am a gnss novice and have a relatively shallow understanding of gnss related knowledge. I would like to ask what books or blogs did you read for self-learning gnss? Can you recommend it? </p>",
      "rawMarkdown": "I am a gnss novice and have a relatively shallow understanding of gnss related knowledge. I would like to ask what books or blogs did you read for self-learning gnss? Can you recommend it?",
      "votes": null
    }
  ],
  "comments": [
    {
      "id": 1456606,
      "author_name": "navneeth",
      "author_url": "",
      "post_date": "08/07/2021 02:31:28",
      "content": "<p>In my opinion this is the most elegant and insightful solution in this competition. Especially the optimization based smoothing that utilizes a state equation to model sensor behavior. That is pure genius. <br>\nThere will always be ensembles of ensembles - but this is what makes kaggle worthwhile for me. <br>\nCongratulations. </p>",
      "votes": null,
      "replies": []
    },
    {
      "id": 2007120,
      "author_name": "beginnerrrrrr",
      "author_url": "",
      "post_date": "10/28/2022 03:26:04",
      "content": "<p>I am a gnss novice and have a relatively shallow understanding of gnss related knowledge. I would like to ask what books or blogs did you read for self-learning gnss? Can you recommend it? </p>",
      "votes": null,
      "replies": []
    }
  ],
  "raw_markdown_by_id": {
    "1451704": "Congrats to all the winners, and thanks so much for hosting such an interesting competition! Here, I want to share my part of our team's solution.\n\n# Improved satellite positioning\n\nI spent the first month of the competition learning GNSS and developed my own positioning program. In my program, I tried the following ideas,\n\n+ least squares weighting based on satellite elevation\n+ satellite elevation mask\n+ outlier removal based on least squares residuals\n+ isrbM averaging and regularization\n+ height smoothing and regularization\n+ carrier smoothing using accumulated delta range\n\nHowever, most ideas became ineffective after the subsequent optimization based smoothing. Perhaps the only essential improvement was carrier smoothing based on the accelerated delta range.\n\n# Use of sensor data\n\nBased on acceleration, gyro, and geomagnetic sensors, I estimated vehicle orientation and acceleration, and added acceleration and lateral velocity terms to the cost function of subsequent optimizations. This idea may have had little effect after the introduction of velocity estimates.\n\n# Velocity estimation using doppler shift\n\nThe vehicle speed was estimated from the pseudo-range rate by the least squares method and used for subsequent optimization based smoothing. This improved the public LB by about 1 meter.\n\n# Optimization based smoothing\n\nThis part is the core of my solution.\n\nFirst, the dynamics of the vehicle is expressed by the following state equation.\n![state_equation](https://user-images.githubusercontent.com/309785/128366897-369cc75b-46e9-419b-8f35-d0e884e9ff27.png)\nwhere \\\\( \\phi \\\\) and \\\\( \\psi \\\\) are latitude and longitude, respectively.\n\nThen, by vertically arranging the states \\\\( X \\\\) and inputs, jerks,  \\\\( U \\\\)  at each time, the equality constraints on state transitions can be described as follows,\n\n\\[\n A X + B U = 0\n\\]\n\nIn addition, by determining the observation matrix \\\\( C \\\\) according to the observation time based on Hermitian interpolation, the vector \\\\( Y \\\\), which is a vertical sequence of latitude and longitude at each observation time, can be written as follows,\n\n\\[\nY = C X\n\\]\n\nThe optimization evaluation function \\\\( J \\\\) is set as the sum of the squares of the jerk \\\\( U \\\\) and the position estimation error, as follows,\n\\[\nJ = U^T R U + (\\hat{Y} - C X)^T L (\\hat{Y} - C X)\n\\]\n\nFinally, the position estimation is formulated as the following quadratic programming problem.\n![optimization](https://user-images.githubusercontent.com/309785/128366891-08f79ee0-881e-4a6a-b9a5-887270cc83fb.png)\n\nBased on this method, various information can be integrated by adding velocity error, acceleration error, cost related to lateral velocity, etc. to the cost function.\n\nThe important point is to perform the above optimization by using positions of all smartphones in one driving data at the same time. This method is clearly more accurate than the method of making estimates for each smartphone and calculating their average.\n\n# Map matching\n\nThis process is applied only SJC/downtown.\n\n+ If the shortest distance between the GNSS position prediction result and the ground truth is more than a certain value, the prediction value is excluded in advance before smoothing.\n+ Replace the smoothing result with the nearest neighbor point of ground truth and perform smoothing again.\n\n# Bias correction\n\nBecause the smartphones are placed in the vehicle, I thought that the effect of multipath would appear asymmetrically and the positioning result would be biased with respect to the direction of the vehicle. Based on this idea, our team added a process to correct the position according to the direction the vehicle is traveling. This method contributed to the improvement of CV and public LB, but did not improve the private LB score.\n\n# Do not use public LB for validation\n\nIn the last indoor location competition, my team wasn't able to implement drastic improvement ideas such that discrete optimization towards the end of the competition due to poor post-processing validation. In this competition, I tried to minimize the number of submits by completing all parameter tuning and validation locally. As a result, our team was able to stay in the gold medal range even if a shake up occurred.\n\n## notebooks\n\n+ [GSDC - Optimization based smoothing (1st version)](https://www.kaggle.com/saitodevel01/gsdc-optimization-based-smoothing-1st-version)\n+ [GSDC - Vehicle Speed Estimation by Doppler Shift](https://www.kaggle.com/saitodevel01/gsdc-vehicle-speed-estimation-by-doppler-shift)\n+ [GSDC - Improved Raw GNSS Baseline](https://www.kaggle.com/saitodevel01/gsdc-improved-raw-gnss-baseline)\n+ [DSDC - Unified post-processing](https://www.kaggle.com/saitodevel01/dsdc-unified-post-processing)\n+ [GSDC - Bias EDA](https://www.kaggle.com/saitodevel01/gsdc-bias-eda)\n+ [GSDC - Bias Correction](https://www.kaggle.com/saitodevel01/gsdc-bias-correction)",
    "1456606": "In my opinion this is the most elegant and insightful solution in this competition. Especially the optimization based smoothing that utilizes a state equation to model sensor behavior. That is pure genius. \nThere will always be ensembles of ensembles - but this is what makes kaggle worthwhile for me. \nCongratulations.",
    "2007120": "I am a gnss novice and have a relatively shallow understanding of gnss related knowledge. I would like to ask what books or blogs did you read for self-learning gnss? Can you recommend it?"
  },
  "source": "meta"
}