Skip to content

Commit 28b19c4

Browse files
committed
Fix hyperlink
1 parent 865e8b2 commit 28b19c4

File tree

8 files changed

+25
-1264
lines changed

8 files changed

+25
-1264
lines changed

README.md

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22
## Visual-Inertial Odometry Tightly Coupled with Wheel Encoder and GPS
33
This repo couples wheel encoder data and GPS data on the basis of [VINS_Mono](https://github.com/HKUST-Aerial-Robotics/VINS-Mono). The project is tested on [KAIST](https://irap.kaist.ac.kr/dataset/) dataset and is suitable for automatic driving scenario.
44

5+
<img src="https://github.com/Wallong/VINS-GPS-Wheel/blob/master/support_files/image/kaist.png" width = 80% height = 80% div align=middle />
6+
57
The wheel encoder data is tightly coupled, referred to the paper[[1]](https://ieeexplore.ieee.org/abstract/document/8967607). GPS fusion adopts loose coupling, and the fusion method is consistent with [VINS-Fusion](https://github.com/HKUST-Aerial-Robotics/VINS-Fusion).
68

7-
Detailed derivations can be found in: https://blog.csdn.net/ewtewtewrt/article/details/
9+
Detailed derivations can be found in: https://blog.csdn.net/ewtewtewrt/article/details/117249295
810

911
# Install
1012
## 1. Prerequisites
@@ -37,7 +39,7 @@ Open four terminals, launch the vins_estimator, rviz and pubish the data file re
3739
roslaunch vins_estimator kaist.launch
3840
rosrun multisensor_fusion multisensor_fusion_node (optional, for GPS)
3941
rosrun vins_estimator kaist_pub YOUR_PATH_TO_DATASET/KAIST/urban28/urban28-pankyo
40-
roslaunch vins vins_rviz.launch
42+
roslaunch vins_estimator vins_rviz.launch
4143
```
4244

4345
## References

config/KAIST/KAIST_mono_imu_config.yaml

+4-4
Original file line numberDiff line numberDiff line change
@@ -49,17 +49,17 @@ extrinsicTranslation_ic: !!opencv-matrix
4949
multiple_thread: 1
5050

5151
#feature traker paprameters
52-
max_cnt: 150 # max feature number in feature tracking
52+
max_cnt: 200 # max feature number in feature tracking
5353
min_dist: 30 # min distance between two features
5454
freq: 10 # frequence (Hz) of publish tracking result. At least 10Hz for good estimation. If set 0, the frequence will be same as raw image
5555
F_threshold: 1.0 # ransac threshold (pixel)
5656
show_track: 1 # publish tracking image as topic
5757
flow_back: 1 # perform forward and backward optical flow to improve feature tracking accuracy
5858

5959
#optimization parameters
60-
max_solver_time: 0.2 # max solver itration time (ms), to guarantee real time
61-
max_num_iterations: 20 # max solver itrations, to guarantee real time
62-
keyframe_parallax: 5.0 # keyframe selection threshold (pixel)
60+
max_solver_time: 0.15 # max solver itration time (ms), to guarantee real time
61+
max_num_iterations: 15 # max solver itrations, to guarantee real time
62+
keyframe_parallax: 5 # keyframe selection threshold (pixel)
6363

6464
#imu parameters The more accurate parameters you provide, the better performance
6565
acc_n: 0.1 # accelerometer measurement noise standard deviation.

multisensor_fusion/src/multisensorFusionNode.cpp

+2-2
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ int main(int argc, char *argv[])
3131

3232
globalPath = &multisensorOptimization.globalPath;
3333

34-
ros::Subscriber sub_GPS = nh.subscribe("/gps/data_raw", 1000, GPS_callback);
35-
ros::Subscriber sub_vio = nh.subscribe("/vins_estimator/odometry", 1000, vio_callback);
34+
ros::Subscriber sub_GPS = nh.subscribe("/gps/data_raw", 100, GPS_callback);
35+
ros::Subscriber sub_vio = nh.subscribe("/vins_estimator/odometry", 100, vio_callback);
3636

3737
globalPathPub = nh.advertise<nav_msgs::Path>("global_path", 100);
3838
globalOdomPub = nh.advertise<nav_msgs::Odometry>("global_odometry", 100);

multisensor_fusion/src/optimization/multisensorOpt.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ void MultisensorOptimization::optimize()
9090
options.linear_solver_type = ceres::SPARSE_NORMAL_CHOLESKY;
9191
//options.minimizer_progress_to_stdout = true;
9292
//options.max_solver_time_in_seconds = SOLVER_TIME * 3;
93-
options.max_num_iterations = 20;
94-
options.max_solver_time_in_seconds = 0.3;
93+
options.max_num_iterations = 5;
94+
options.max_solver_time_in_seconds = 0.15;
9595
ceres::Solver::Summary summary;
9696
ceres::LossFunction *lossFunction;
9797
lossFunction = new ceres::HuberLoss(1.0);
@@ -222,7 +222,7 @@ void MultisensorOptimization::optimize()
222222
WGPS_T_WVIO = WGPS_T_body * WVIO_T_body.inverse();
223223
}
224224
}
225-
updateGlobalPath();
225+
// updateGlobalPath();
226226
mPoseMap.unlock();
227227
}
228228
// std::chrono::milliseconds dura(1000);

support_files/image/kaist.png

360 KB
Loading
+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<launch>
2+
<node name="rvizvisualisation" pkg="rviz" type="rviz" output="log" args="-d $(find vins)/../config/vins_rviz_config.rviz" />
3+
</launch>

vins_estimator/src/data_pub/kaist_pub.cpp

+9-11
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ using namespace cv;
1919
using namespace Eigen;
2020

2121
const int nDelayTimes = 2;
22-
string sData_path = "/home/dataset/EuRoC/MH-05/mav0/";
23-
string sConfig_path = "../config/";
22+
string sData_path = "/home/wallong/dataset/urban28/urban28-pankyo";
2423

2524
bool LoadSensorData(string& sensor_data_file, unordered_map<string, string>* time_data_map)
2625
{
@@ -46,14 +45,13 @@ bool LoadSensorData(string& sensor_data_file, unordered_map<string, string>* tim
4645

4746
int main(int argc, char *argv[])
4847
{
49-
if(argc != 3)
48+
if(argc != 2)
5049
{
51-
cerr << "./run_euroc PATH_TO_FOLDER/MH-05/mav0 PATH_TO_CONFIG/config \n"
52-
<< "For example: ./run_euroc /home/stevencui/dataset/EuRoC/MH-05/mav0/ ../config/"<< endl;
50+
cerr << "./kaist_pub PATH_TO_FOLDER/YOUR_PATH_TO_DATASET/KAIST/urban28/urban28-pankyo \n"
51+
<< "For example: ./kaist_pub /home/wallong/dataset/urban28/urban28-pankyo"<< endl;
5352
return -1;
5453
}
5554
sData_path = argv[1];
56-
sConfig_path = argv[2];
5755

5856
ros::init(argc, argv, "KAIST_pub");
5957
ros::NodeHandle nh("~");
@@ -62,10 +60,10 @@ int main(int argc, char *argv[])
6260
ros::Publisher encoder_publisher;
6361
ros::Publisher gps_publisher;
6462

65-
imu_publisher = nh.advertise<sensor_msgs::Imu>("/imu/data_raw", 10, true);
66-
img_publisher = nh.advertise<sensor_msgs::Image>("/stereo/left/image_raw", 5, true);
67-
encoder_publisher = nh.advertise<custom_msgs::Encoder>("/encoder/data_raw", 10, true);
68-
gps_publisher = nh.advertise<sensor_msgs::NavSatFix>("/gps/data_raw", 10, true);
63+
imu_publisher = nh.advertise<sensor_msgs::Imu>("/imu/data_raw", 100, true);
64+
img_publisher = nh.advertise<sensor_msgs::Image>("/stereo/left/image_raw", 100, true);
65+
encoder_publisher = nh.advertise<custom_msgs::Encoder>("/encoder/data_raw", 100, true);
66+
gps_publisher = nh.advertise<sensor_msgs::NavSatFix>("/gps/data_raw", 100, true);
6967

7068
unordered_map<string, string> time_encoder_map;
7169
string encoder_data_path = sData_path + "/sensor_data/encoder.csv";
@@ -188,7 +186,7 @@ int main(int argc, char *argv[])
188186
gps_msg.altitude = std::stod(line_data_vec[3]);
189187
for (int i = 0; i < 9; i++)
190188
{
191-
gps_msg.position_covariance[i] = std::stod(line_data_vec[i + 4]);
189+
gps_msg.position_covariance[i] = std::stod(line_data_vec[i + 4]) / 100;
192190
}
193191
gps_publisher.publish(gps_msg);
194192
}

0 commit comments

Comments
 (0)