Team member:
Shaoxun Xu
Aiwei Yin
Jiaying Lyu

# Description of the files inside the archive:

|--ekf
|  |--ekf.launch #configuration of the ekf
|-- gmapping
|  |--gmapping.launch #configuration of the gmapping
|--map
|  |--map_optitrack.pgm #map created by optitrack odometry
|  |--map_optitrack.yaml
|  |--map_visual.pgm #map created by visual odometry, used for move_base
|  |--map_visual.yaml
|--move_bases
|  |--amcl.launch #configuration of the amcl
|--point2laser
|  |--pointcloud_to_laser.launch #convert pointcloud to laser scan
|--tf
|  |--static_tf_optitrack.launch #static tf for optitrack odometry
|  |--static_tf_visual.launch #static tf for visual odometry
|--gmapping_optitrack.launch #start everything for creating map via optitrack odometry
|--ekf
|  |--ekf.launch #ekf for fuse imu and visual odometry
|  |--ekf_template.yaml #parameters for ekf
|  |--imu_filter.launch #get orientation from the raw imu data
|--gmapping_visual.launch #start everything for creating map via visual odometry
|--gmapping_imu.launch #start everything for creating map via IMU fused visual odometry
|--move_based_amcl.launch #localization of the robot in a given map via lidar and visual odometry
|--move_based_amcl_imu.launch #localization of the robot in a given map via lidar and IMU fused visual odometry

# Structure of the tf tree:
see the images in tf_graph
     

Build map: 2020-05-14-16-09-36-traj1-os1-t265-pix.bag
Test move_base: 2020-05-14-16-14-37-traj2-os1-t265-pix.bag


# usage:

We test our project on ubuntu 18.04 with ROS Melodic

Prerequisites:

install gmapping, amcl, pointcloud-to-laserscan and robot-pose-ekf

Running:

cd to 10730328

build map via optitrack odometry

```
roslaunch gmapping_optitrack.launch
```
run the bag in another terminal with clock
```
rosbag play --clock 2020-05-14-16-09-36-traj1-os1-t265-pix.bag
```
when the bag finish, use map server to save the map 
 
-------------------------------------------------------
build map via visual odometry

```
roslaunch gmapping_visual.launch
```
run the bag in another terminal with clock
```
rosbag play --clock 2020-05-14-16-09-36-traj1-os1-t265-pix.bag
```
when the bag finish, use map server to save the map

--------------------------------------------------------
build map via imu and visual odometry

```
roslaunch gmapping_imu.launch
```
run the bag in another terminal with clock
```
rosbag play --clock 2020-05-14-16-09-36-traj1-os1-t265-pix.bag
```
when the bag finish, use map server to save the map

--------------------------------------------------------
test move_base

put the map made by visual odometry and the .yaml file into map folder
The names should be map.pgm and map.yaml

run amcl
```
roslaunch move_base_amcl.launch
```
run the bag in another terminal with clock
```
rosbag play --clock 2020-05-14-16-14-37-traj2-os1-t265-pix.bag
```
--------------------------------------------------------
test move_base

put the map made by visual odometry and the .yaml file into map folder
The names should be map.pgm and map.yaml

run amcl
```
roslaunch move_base_amcl_imu.launch
```
run the bag in another terminal with clock
```
rosbag play --clock 2020-05-14-16-14-37-traj2-os1-t265-pix.bag
```

# Info you think are important/interesting:

The most important part of the project is to undersand the tf relationship of each frame. Meanwhile, the visualization tools in ROS, like rviz, rqt_tf, rqt_topic are very helpful for debugging. 

The IMU data is really noise, it seems it would not improve the visual odometry.