---
# System prepended metadata

title: SDC Localization Competition
tags: [Self-Driving Cars, ROS]

---

# SDC Localization Competition
###### tags: `Self-Driving Cars`, `ROS`

The goal of this competition is to develop a localization system for **estimating the pose** of a self-driving car given a point cloud map. You will be graded based on the accuracy of your result and the contribution on solving the problem. You can write your code based on [last assignment](https://hackmd.io/@Biomotion/rJFrBgrSY). 
Note: This is **NOT** a team competition you should complete this competetion **ON YOUR OWN**.

## Schedule
### Competition: 11/4  - 11/17
### Report:  11/4 - 11/24


## Data

### [Download All](https://drive.google.com/drive/folders/1amMpofd-ZRvVjTkNUC43C3CUt1d2ECpP?usp=sharing)

We are using rosbags from the following two sources:
1. [ITRI Datasets](#ITRI-Datasets)
2. [nuScenes Datasets](#nuScenes-Datasets)

There will be **3 bags** in total. One from ITRI and two from nuScenes. The detail sensor setup will be described later. The ITRI bag is considered as **EASY** case and the nuScenes bags are considered as **ADVANCED** cases.

### ITRI Datasets

- Files: 
    - sdc_localization_1.bag
        - bag time: 20.1 seconds
        - number of scans: 201
- Map: [Download](https://drive.google.com/drive/folders/1PrBcHc03Xzunfj-O2Is-t8-lu3BbUCUN?usp=sharing)
![](https://i.imgur.com/zpzagqb.png)
- Topics
![](https://i.imgur.com/MiBsH5j.png)
- Sensors
    - LiDAR: velodyne VLP-32C
    - IMU: xsens MTi-G-710
        ```
        orientation_covariance: [0.017453292519943295, 0.0, 0.0, 0.0, 0.017453292519943295, 0.0, 0.0, 0.0, 0.15707963267948966]
        angular_velocity_covariance: [0.0004363323129985824, 0.0, 0.0, 0.0, 0.0004363323129985824, 0.0, 0.0, 0.0, 0.0004363323129985824]
        linear_acceleration_covariance: [0.0004, 0.0, 0.0, 0.0, 0.0004, 0.0, 0.0, 0.0, 0.0004]
        ```
    - GPS: positioal measurement simulated from vehicle pose (standard deviation of noise: 1 meter)

### nuScenes Datasets
In nuScenes Datasets, **wheel_odometry** is available for fusing. You can try consider this measurement to improve your performance. For the size issue, we provide **a full version and a lite version** of bag. The lite version only contains LiDAR, Wheel odometry, IMU, GPS and TF data. You can choose which one to use.

- Files: 
    - sdc_localization_2.bag
        - bag time: 19.8 seconds
        - number of scans: 396
    - sdc_localization_3.bag
        - bag time: 19.6 seconds
        - number of scans: 389
- Map: [Download](https://drive.google.com/drive/folders/1PrBcHc03Xzunfj-O2Is-t8-lu3BbUCUN?usp=sharing)
    The map is also delivered in **TILE format** due to size of files. Please refer [**this**](https://hackmd.io/@Biomotion/SJziDsDIt) article to make best use of the data.
    ![](https://i.imgur.com/lt6Qwml.png)
- Topics
    ![](https://i.imgur.com/pv7jMfA.png)
- [Sensors](https://www.nuscenes.org/nuscenes#data-collection)
    - IMU
        ```
        orientation_covariance: [0.000174532925, 0.0, 0.0, 0.0, 0.000174532925, 0.0, 0.0, 0.0, 0.000698131701]
        angular_velocity_covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
        linear_acceleration_covariance: [0.0025, 0.0, 0.0, 0.0, 0.0025, 0.0, 0.0, 0.0, 0.025]
        ```
- Other Sensors
    - Camera: ([sensor_msgs/CompressedImage](http://docs.ros.org/en/melodic/api/sensor_msgs/html/msg/CompressedImage.html))
        - /image_back/compressed
        - /image_back_left/compressed
        - /image_back_right/compressed
        - /image_front/compressed
        - /image_front_left/compressed
        - /image_front_right/compressed
    - Radar(RAW): ([conti_radar/Measurement](https://github.com/DengYu1203/conti_radar))
        - /radar_back_left
        - /radar_back_right
        - /radar_front
        - /radar_front_left
        - /radar_front_right
    - Radar(point cloud): ([sensor_msgs/PointCloud2](http://docs.ros.org/en/melodic/api/sensor_msgs/html/msg/PointCloud2.html))
        - /nuscenes_radar_back_left
        - /nuscenes_radar_back_right
        - /nuscenes_radar_front
        - /nuscenes_radar_front_left
        - /nuscenes_radar_front_right


## Result

You are supposed to estimate the **poses of vehicle** at the time of **EVERY** lidar scan with the following format. For each pose result, you will save both **position** and **orientation** values. The unit of positions are **in meters** and the unit of orientations are **in radians**. The yaw, pitch, roll value are Euler angles between map and vehicle.
```
id,x,y,z,yaw,pitch,roll
```
Save your result as a csv file. It should look like the following:
![](https://i.imgur.com/bzcmQpK.png)

Note: All results represent **vehicle pose on map frame** which is the relative pose between **base_link/car** and **map**. Remember to transform your pose or lidar points onto vehicle frame.


## Evaluation

To compare your result with ground truth, we adopt the Root-Mean-Square Error (RMSE) metric. You should submit your result to our kaggle competitions. Please submit results from each bag to the corresponding competition. 

- [2021 SDC Localization Competition I](https://www.kaggle.com/c/2021-sdc-localization-competition-i)
- [2021 SDC Localization Competition II](https://www.kaggle.com/c/2021-sdc-localization-competition-ii)
- [2021 SDC Localization Competition III](https://www.kaggle.com/c/2021-sdc-localization-competition-iii)

Note: For competition II&III, RMSE of Z-axis will not be evaluated since there is no ground truth on Z in nuScenes Datasets. **Please modify z-axis results of your csv file to 0 in competition II&III**. Otherwise, you'll get a large error. 


## Submission & Grading

- [Competition Ranking](#Competition-Ranking): 60%
- [Presentation and Report](#Presentation-and-Report): 40%

### Competition Ranking

- Please upload your localization result to the kaggle competition websites.
    - Maximum daily submissions: **20**
    - The result CSV should contain coordinate data for **EVERY** LiDAR timestamps.
- For each localization competition, you will get your score based on your ranking.
    | RANK      | SCORE |
    | -------- | -------- |
    | 1         | 20     |
    | 2         | 18     |
    | 3         | 16     |
    | Top 20%      | 14    |
    | Top 40%      | 12     |
    | Others above baseline | 10     |
    | Below/equal-to baseline | 0 |
- Your total score in competition is sum of the three competition result.
- **Upload your code and the best submission to E3**. We will check if the code can be compiled and executed.
    - Please pack all nodes in **roslaunch** to execute your program. 
        - playing rosbag doesn’t need to be included in roslaunch file
        - You can use different roslaunch files to run each competitions if you need
    - You may add some **README** if your code needs some extra libraries. Just make sure TAs can compile it properly.
    - Your best submission files of the 3 localization competition named by `submit_1.csv`, `submit_2.csv`, `submit_3.csv`
    - Naming Rule: `<student_id>_localization_results.zip`
- **Upload Deadline: 11/17 23:59**
- **There is no delay submission accepted. Remember to upload your code befor midnight**
- 
### Presentation and Report

- Required elements:
    - Pipeline: how your program works
    - Contribution: the difference between yours and others
    - Problems and Solutions
    - Other Discussion or Findings ... etc.
    - Naming Rule: `<student_id>_localization_report.zip`

The contribution part depends on the idea you implement or how you solve the issue you met. If you completely use other's method **without your idea**, you will get ZERO point in the contribution part.
- **Report Deadline: 11/24 12:00** (Note that it's not ended at 22:00 as usuall)

## Baseline Code
For those who cannot complete Assignment 4, we provide an example implementation of ICP Localization. You can start from this package and add your idea. **Please note that you will get zero points on report if you make no difference from this package.** Also, we do not guarantee any performance on this package, it only shows a way to read and save your result.

Here is the link to our repo:
[https://github.com/biomotion/baseline_localizer](https://github.com/biomotion/baseline_localizer)


## Hints
- If you want to get better performance from ICP, better initial guess will help a lot. You can use [IMU](http://www.starlino.com/dcm_tutorial.html) sensor to calculate local path. For more information, you can reference [this paper](https://www.cl.cam.ac.uk/techreports/UCAM-CL-TR-696.pdf) and see the chapter 6.1 and 6.2 for implementation details.
- You are not restricted to use ICP on scan matching. You can find other method if you expect better performance.
