unmannedlab / imu_lidar_calibration Goto Github PK
View Code? Open in Web Editor NEWTarget-free Extrinsic Calibration of a 3D Lidar and an IMU
License: BSD 2-Clause "Simplified" License
Target-free Extrinsic Calibration of a 3D Lidar and an IMU
License: BSD 2-Clause "Simplified" License
Hello. I have to calibrate imu(vectornav or xsens) and velodyne 16 to collect data.
Thank you for providing such a great calib tool.
I have a question about translation calib.
The imu and lidar were translated only along the y-axis about 20cm on the wooden bar, and the rest were fixed in parallel.
First, I launched ros_calib_init.launch to calculate rotation extrinsic and i was able to get quite good matrix.
Then, I launched linkalibr_ouster_vectoranv.launch to calculate final matrix.
At the result, the rotation matrix part is also bad, and the translation part is also bad.
I_T_L_init.txt result
0.997439 0.00637283 0.0712354 0
0.0033876 -0.999114 0.041949 0
0.0714397 -0.0416003 -0.996577 0
0 0 0 1
I_T_L_final.txt result
-0.386475 -0.411896 0.825214 -0.559896
-0.723331 -0.419749 -0.548273 1.4327
0.572215 -0.808797 -0.135714 -3.28511
0 0 0 1
Failed to find match for field 'ring'. Failed to find match for field 't'. Time taken for deskewing: 0.00407839 [s] [Propagation] successfully propagated [Update] successful updateScan2Scan [Update] successful updateScan2GlobalMap [ INFO] [1672722624.107535293]: Lidar scan no: 918 [ INFO] [1672722624.107562742]: No of lodom: 914 [ INFO] [1672722624.109466388]: No of imu measurements: 4 Failed to find match for field 'ring'. Failed to find match for field 't'. Time taken for deskewing: 0.00496578 [s] [Propagation] successfully propagated [Update] successful updateScan2Scan [Update] successful updateScan2GlobalMap [ INFO] [1672722624.138625378]: Lidar scan no: 919 [ INFO] [1672722624.138680511]: No of lodom: 915 [ INFO] [1672722624.141287681]: No of imu measurements: 4 Failed to find match for field 'ring'. Failed to find match for field 't'. Time taken for deskewing: 0.00486684 [s] [Propagation] successfully propagated [Update] successful updateScan2Scan [Update] successful updateScan2GlobalMap [ INFO] [1672722624.162236239]: Lidar scan no: 92 [ INFO] [1672722624.162261841]: No of lodom: 916 [ INFO] [1672722624.163941929]: No of imu measurements: 4 Failed to find match for field 'ring'. Failed to find match for field 't'. Time taken for deskewing: 0.00520134 [s] [Propagation] successfully propagated [Update] successful updateScan2Scan [Update] successful updateScan2GlobalMa [ INFO] [1672722624.187217560]: Lidar scan no: 921 [ INFO] [1672722624.187252278]: No of lodom: 917 [ INFO] [1672722624.189091669]: No of imu measurements: 4 Failed to find match for field 'ring'. Failed to find match for field 't'. Time taken for deskewing: 0.00448751 [s] [Propagation] successfully propagated [Update] successful updateScan2Scan [Update] successful updateScan2GlobalMap [ INFO] [1672722624.236811719]: Lidar scan no: 922 [ INFO] [1672722624.236841774]: No of lodom: 918 [ INFO] [1672722624.238453383]: Reached end of bag [ INFO] [1672722624.238477978]: Kalman Filtering took : 55.9863 [s] Writing KF calibration result to: /media/hdd/ros/imu_lidar_calib/230103/I_T_L_final.txt [ INFO] [1672722624.238812911]: Translation [in m]: -0.559896 1.4327 -3.28511 [ INFO] [1672722624.238831509]: Euler Angles [in deg]: 103.903 55.6102 133.176
Is the "Failed to find match for field 'ring' or 't'." critical to calib? how can I do for remove this warning?
THX!
I am using Ubuntu 20.04 with ROS Noetic. When I install pcl-ros, PCL 1.10 is automatically installed. I'm not sure if the problem is caused by using PCL 1.10, but there is an issue where the process dies during the execution of ndt_omp.
So, I'm trying to install and apply PCL 1.12, but it seems to be causing issues with the existing PCL 1.10.
Can't I use the pcl 1.10 version?
【Error log】
Errors << linkalibr:make /home/minzhus/receive/Lidar_imu_calib/TAMU/catkin_ws_ov/logs/linkalibr/build.make.001.log
/usr/bin/ld: CMakeFiles/ros_calib_init_optimizer.dir/src/ros_calib_init_optimizer.cpp.o: undefined reference to symbol '_ZN3tbb8internal23allocate_via_handler_v3Em'
//usr/lib/x86_64-linux-gnu/libtbb.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
make[2]: *** [/home/minzhus/receive/Lidar_imu_calib/TAMU/catkin_ws_ov/devel/.private/linkalibr/lib/linkalibr/ros_calib_init_optimizer] Error 1
make[1]: *** [CMakeFiles/ros_calib_init_optimizer.dir/all] Error 2
make: *** [all] Error 2
【Prerequisites】:
Ubuntu 16.04 system
GTSAM - 4.0.3
openVINS-2.3
TBB: sudo apt-get install intel-tbb-2020.3-912
【GTSAM Configuration Options】
-- ================ Configuration Options ======================
-- CMAKE_CXX_COMPILER_ID type : GNU
-- CMAKE_CXX_COMPILER_VERSION : 5.5.0
-- CMake version : 3.18.5
-- CMake generator : Unix Makefiles
-- CMake build tool : /usr/bin/make
-- Build flags
-- Build Tests : Enabled
-- Build examples with 'make all' : Enabled
-- Build timing scripts with 'make all': Disabled
-- Build Docs : Enabled
-- Build shared GTSAM libraries : Enabled
-- Put build type in library name : Enabled
-- Build libgtsam_unstable : Enabled
-- Build for native architecture : Enabled
-- Build type : Release
-- C compilation flags : -O3 -DNDEBUG
-- C++ compilation flags : -Wno-misleading-indentation -O3 -DNDEBUG
-- GTSAM_COMPILE_FEATURES_PUBLIC : cxx_std_11
-- GTSAM_COMPILE_OPTIONS_PRIVATE : -Wall;-fPIC;$<$CONFIG:Debug:-g;-fno-inline>;$<$CONFIG:Release:-O3>;$<$CONFIG:Timing:-g;-O3>;$<$CONFIG:Profiling:-O3>;$<$CONFIG:RelWithDebInfo:-g;-O3>;-Wno-unused-local-typedefs
-- GTSAM_COMPILE_OPTIONS_PUBLIC : -march=native
-- GTSAM_COMPILE_DEFINITIONS_PRIVATE : $<$CONFIG:Debug:_DEBUG;EIGEN_INITIALIZE_MATRICES_BY_NAN>;$<$CONFIG:Release:NDEBUG>;$<$CONFIG:Timing:NDEBUG;ENABLE_TIMING>;$<$CONFIG:Profiling:NDEBUG>;$<$CONFIG:RelWithDebInfo:NDEBUG>
-- GTSAM_COMPILE_DEFINITIONS_PUBLIC :
-- GTSAM_COMPILE_OPTIONS_PRIVATE_DEBUG : -g;-fno-inline
-- GTSAM_COMPILE_OPTIONS_PUBLIC_DEBUG :
-- GTSAM_COMPILE_DEFINITIONS_PRIVATE_DEBUG : _DEBUG;EIGEN_INITIALIZE_MATRICES_BY_NAN
-- GTSAM_COMPILE_DEFINITIONS_PUBLIC_DEBUG :
-- GTSAM_COMPILE_OPTIONS_PRIVATE_RELEASE : -O3
-- GTSAM_COMPILE_OPTIONS_PUBLIC_RELEASE :
-- GTSAM_COMPILE_DEFINITIONS_PRIVATE_RELEASE : NDEBUG
-- GTSAM_COMPILE_DEFINITIONS_PUBLIC_RELEASE :
-- GTSAM_COMPILE_OPTIONS_PRIVATE_TIMING : -g;-O3
-- GTSAM_COMPILE_OPTIONS_PUBLIC_TIMING :
-- GTSAM_COMPILE_DEFINITIONS_PRIVATE_TIMING : NDEBUG;ENABLE_TIMING
-- GTSAM_COMPILE_DEFINITIONS_PUBLIC_TIMING :
-- GTSAM_COMPILE_OPTIONS_PRIVATE_PROFILING : -O3
-- GTSAM_COMPILE_OPTIONS_PUBLIC_PROFILING :
-- GTSAM_COMPILE_DEFINITIONS_PRIVATE_PROFILING : NDEBUG
-- GTSAM_COMPILE_DEFINITIONS_PUBLIC_PROFILING :
-- GTSAM_COMPILE_OPTIONS_PRIVATE_RELWITHDEBINFO : -g;-O3
-- GTSAM_COMPILE_OPTIONS_PUBLIC_RELWITHDEBINFO :
-- GTSAM_COMPILE_DEFINITIONS_PRIVATE_RELWITHDEBINFO : NDEBUG
-- GTSAM_COMPILE_DEFINITIONS_PUBLIC_RELWITHDEBINFO :
-- GTSAM_COMPILE_OPTIONS_PRIVATE_MINSIZEREL :
-- GTSAM_COMPILE_OPTIONS_PUBLIC_MINSIZEREL :
-- GTSAM_COMPILE_DEFINITIONS_PRIVATE_MINSIZEREL :
-- GTSAM_COMPILE_DEFINITIONS_PUBLIC_MINSIZEREL :
-- Use System Eigen : ON (Using version: 3.2.92)
-- Use Intel TBB : Yes
-- Eigen will use MKL : MKL not found
-- Eigen will use MKL and OpenMP : OpenMP found but GTSAM_WITH_EIGEN_MKL is disabled
-- Default allocator : TBB
-- Cheirality exceptions enabled : YES
-- Build with ccache : No
-- Packaging flags
-- CPack Source Generator : TGZ
-- CPack Generator : TGZ
-- GTSAM flags
-- Quaternions as default Rot3 : Disabled
-- Runtime consistency checking : Disabled
-- Rot3 retract is full ExpMap : Enabled
-- Pose3 retract is full ExpMap : Enabled
-- Deprecated in GTSAM 4 allowed : Enabled
-- Point3 is typedef to Vector3 : Disabled
-- Metis-based Nested Dissection : Enabled
-- Use tangent-space preintegration: Enabled
-- Build Wrap : Enabled
-- MATLAB toolbox flags
-- Install MATLAB toolbox : Disabled
-- Cython toolbox flags
-- Install Cython toolbox : Disabled
【Q&A】
What's the problem?How to resolve this error?
[InertialInitializer::initialize_with_imu] Not enough IMU excitation, below threshold 0.0241 < 0.2500
[ INFO] [1639578655.676617553]: Lidar scan no: 34
[ INFO] [1639578655.676645568]: No of lodom: 0
[ INFO] [1639578655.758270962]: No of imu measurements: 40
Failed to find match for field 'intensity'.
Failed to find match for field 'ring'.
Failed to find match for field 't'.
[InertialInitializer::initialize_with_imu] Not enough IMU excitation, below threshold 0.0476 < 0.2500
[ INFO] [1639578655.760411787]: Lidar scan no: 35
[ INFO] [1639578655.760441037]: No of lodom: 0
[ INFO] [1639578655.844012505]: No of imu measurements: 40
Failed to find match for field 'intensity'.
Failed to find match for field 'ring'.
Failed to find match for field 't'.
[InertialInitializer::initialize_with_imu] Initialization done!!!!
terminate called after throwing an instance of 'pcl::IsNotDenseException'
what(): : Can't use 2D indexing with a unorganized point cloud
================================================================================REQUIRED process [ros_test_node-1] has died!
Hi~
First of all, thank you for your contribution.
When I read your paper, I didn't understand how to get formula 3 from formula 2. Can you tell me? thanks!
Hello guys,
i would like to ask if your project is compatible with livox lidars.
I have livox mid 40 and xsens mti g 710 gnss/ins and i want to calibrate them.
Thanks in advance
Thanks for the opening code. I have read the source code and use this code in my experiments. Can you show me how you get the H1_xi_rot, H1_Xj_rot in function updateScan2Scan, and H2_xc_rot in updateScan2GlobalMap?
Hello im trying to use the package but i have the follwoing error.
geo@geo-X570-GAMING-X:~/imu_lidar_calib_ws$ roslaunch linkalibr ros_calib_init.launch
WARNING: Package name "imuPacket" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits, underscores, and dashes.
... logging to /home/geo/.ros/log/8b8db6a8-4c96-11ee-9ed7-18c04d2d923b/roslaunch-geo-X570-GAMING-X-8624.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://geo-X570-GAMING-X:45593/
SUMMARY
========
CLEAR PARAMETERS
* /ros_calib_init/
* /ros_calib_init_optimizer/
PARAMETERS
* /ros_calib_init/bag_durr: -1
* /ros_calib_init/bag_start: 0.0
* /ros_calib_init/ndt_resolution: 0.25
* /ros_calib_init/path_bag: /home/geo/imu_lid...
* /ros_calib_init/topic_imu: /imu/data
* /ros_calib_init/topic_lidar: /livox/lidar
* /ros_calib_init_optimizer/accelerometer_noise_density: 0.000726621235914
* /ros_calib_init_optimizer/calibration_result_filename: /home/usl/catkin_...
* /ros_calib_init_optimizer/gyroscope_noise_density: 0.000145127436329
* /ros_calib_init_optimizer/max_frames: 550
* /rosdistro: melodic
* /rosversion: 1.14.13
NODES
/
ros_calib_init (linkalibr/ros_calib_init)
ros_calib_init_optimizer (linkalibr/ros_calib_init_optimizer)
ROS_MASTER_URI=http://localhost:11311
WARNING: Package name "imuPacket" does not follow the naming conventions. It should start with a lower case letter and only contain lower case letters, digits, underscores, and dashes.
process[ros_calib_init-1]: started with pid [8655]
process[ros_calib_init_optimizer-2]: started with pid [8656]
[ INFO] [1693995589.514415334]: Loaded accelerometer_noise_density: 0.000726621
[ INFO] [1693995589.515386647]: Loaded gyroscope_noise_density: 0.000145127
[ INFO] [1693995589.515639217]: Loaded max_frames: 550
[ INFO] [1693995589.515882047]: Loaded calibration_result_filename: /home/usl/catkin_ws/src/imu_lidar_calibration/linkalibr/data/I_T_L_init.txt
[ INFO] [1693995589.556121861]: topic_imu: /imu/data
[ INFO] [1693995589.556718272]: topic_lidar: /livox/lidar
[ INFO] [1693995589.556747568]: ndt_resolution: 0.25
[ INFO] [1693995589.557603021]: bag start: 0
[ INFO] [1693995589.557620484]: bag duration: -1
[ INFO] [1693995589.558055419]: ROS BAG PATH is: /home/geo/imu_lidar_calib_ws/calibr_test.bag
[ INFO] [1693995589.593069648]: Time start = 1.69395e+09
[ INFO] [1693995589.593097901]: Time end = 1.69395e+09
[ INFO] [1693995589.771248623]: Frame: 0 / 550
[ INFO] [1693995589.775224768]: Frame: 1 / 550
[ INFO] [1693995589.779356698]: Frame: 2 / 550
[ INFO] [1693995589.783978267]: Frame: 3 / 550
[ INFO] [1693995589.788576863]: Frame: 4 / 550
[ INFO] [1693995589.794416132]: Frame: 5 / 550
[ INFO] [1693995589.806269103]: Frame: 6 / 550
[ INFO] [1693995589.813131564]: Frame: 7 / 550
[ INFO] [1693995589.816918209]: Frame: 8 / 550
[ INFO] [1693995589.822207075]: Frame: 9 / 550
[ INFO] [1693995589.829455498]: Frame: 10 / 550
[ INFO] [1693995589.836961520]: Frame: 11 / 550
[ INFO] [1693995589.841952109]: Frame: 12 / 550
[ INFO] [1693995589.848563976]: Frame: 13 / 550
[ INFO] [1693995589.854470373]: Frame: 14 / 550
[ INFO] [1693995589.861724317]: Frame: 15 / 550
[ INFO] [1693995589.906632598]: Frame: 16 / 550
[ INFO] [1693995589.906702811]: Frame: 17 / 550
[ INFO] [1693995589.954619801]: Frame: 18 / 550
[ INFO] [1693995589.998618647]: Frame: 19 / 550
[ INFO] [1693995589.998670365]: Frame: 20 / 550
[ INFO] [1693995590.009142746]: Frame: 21 / 550
[ INFO] [1693995590.026478410]: Frame: 22 / 550
[ INFO] [1693995590.066609476]: Frame: 23 / 550
[ INFO] [1693995590.110629312]: Frame: 24 / 550
[ INFO] [1693995590.154613249]: Frame: 25 / 550
[ INFO] [1693995590.154666320]: Frame: 26 / 550
[ INFO] [1693995590.198627304]: Frame: 27 / 550
[ INFO] [1693995590.246610310]: Frame: 28 / 550
[ INFO] [1693995590.246669432]: Frame: 29 / 550
[ INFO] [1693995590.251737298]: Frame: 30 / 550
[ INFO] [1693995590.256668765]: Frame: 31 / 550
[ INFO] [1693995590.298623221]: Frame: 32 / 550
[ INFO] [1693995590.342636124]: Frame: 33 / 550
[ INFO] [1693995590.348324197]: Frame: 34 / 550
[ INFO] [1693995590.361564500]: Frame: 35 / 550
[ INFO] [1693995590.368290291]: Frame: 36 / 550
[ INFO] [1693995590.386791166]: Frame: 37 / 550
[ INFO] [1693995590.394883301]: Frame: 38 / 550
[ INFO] [1693995590.401404023]: Frame: 39 / 550
[ INFO] [1693995590.416992251]: Frame: 40 / 550
[ INFO] [1693995590.424104025]: Frame: 41 / 550
[ INFO] [1693995590.434839426]: Frame: 42 / 550
[ INFO] [1693995590.448481741]: Frame: 43 / 550
[ INFO] [1693995590.494619275]: Frame: 44 / 550
[ INFO] [1693995590.538609945]: Frame: 45 / 550
[ INFO] [1693995590.586600104]: Frame: 46 / 550
[ INFO] [1693995590.586645991]: Frame: 47 / 550
[ INFO] [1693995590.593580620]: Frame: 48 / 550
[ INFO] [1693995590.604962015]: Frame: 49 / 550
[ INFO] [1693995590.612160273]: Frame: 50 / 550
[ INFO] [1693995590.619246449]: Frame: 51 / 550
[ INFO] [1693995590.634006095]: Frame: 52 / 550
[ INFO] [1693995590.640557526]: Frame: 53 / 550
[ INFO] [1693995590.648878875]: Frame: 54 / 550
[ INFO] [1693995590.655908874]: Frame: 55 / 550
[ INFO] [1693995590.663863177]: Frame: 56 / 550
[ INFO] [1693995590.668992841]: Frame: 57 / 550
[ INFO] [1693995590.677943434]: Frame: 58 / 550
[ INFO] [1693995590.686265374]: Frame: 59 / 550
[ INFO] [1693995590.694663159]: Frame: 60 / 550
[ INFO] [1693995590.701362220]: Frame: 61 / 550
[ INFO] [1693995590.709600752]: Frame: 62 / 550
[ INFO] [1693995590.716292530]: Frame: 63 / 550
[ INFO] [1693995590.725093439]: Frame: 64 / 550
[ INFO] [1693995590.731029512]: Frame: 65 / 550
[ INFO] [1693995590.741532741]: Frame: 66 / 550
[ INFO] [1693995590.745602223]: Frame: 67 / 550
[ INFO] [1693995590.759319131]: Frame: 68 / 550
[ INFO] [1693995590.802621585]: Frame: 69 / 550
[ INFO] [1693995590.846623517]: Frame: 70 / 550
[ INFO] [1693995590.890619056]: Frame: 71 / 550
[ INFO] [1693995590.892459749]: Frame: 72 / 550
[ INFO] [1693995590.895823010]: Frame: 73 / 550
[ INFO] [1693995590.901916392]: Frame: 74 / 550
[ INFO] [1693995590.913531822]: Frame: 75 / 550
[ INFO] [1693995590.954605777]: Frame: 76 / 550
[ INFO] [1693995590.998625312]: Frame: 77 / 550
[ INFO] [1693995591.042611664]: Frame: 78 / 550
[ INFO] [1693995591.086618495]: Frame: 79 / 550
[ INFO] [1693995591.086775343]: Frame: 80 / 550
[ INFO] [1693995591.092108683]: Frame: 81 / 550
[ INFO] [1693995591.134626419]: Frame: 82 / 550
[ INFO] [1693995591.178619383]: Frame: 83 / 550
[ INFO] [1693995591.192113948]: Frame: 84 / 550
[ INFO] [1693995591.205194228]: Frame: 85 / 550
[ INFO] [1693995591.219293120]: Frame: 86 / 550
[ INFO] [1693995591.227865004]: Frame: 87 / 550
[ INFO] [1693995591.237000619]: Frame: 88 / 550
[ INFO] [1693995591.243267861]: Frame: 89 / 550
[ INFO] [1693995591.254539909]: Frame: 90 / 550
[ INFO] [1693995591.265710885]: Frame: 91 / 550
[ INFO] [1693995591.306610371]: Frame: 92 / 550
[ INFO] [1693995591.350611360]: Frame: 93 / 550
[ INFO] [1693995591.394627289]: Frame: 94 / 550
[ INFO] [1693995591.438612499]: Frame: 95 / 550
[ INFO] [1693995591.482623277]: Frame: 96 / 550
[ INFO] [1693995591.494830309]: Frame: 97 / 550
[ INFO] [1693995591.515558049]: Frame: 98 / 550
[ INFO] [1693995591.562614296]: Frame: 99 / 550
[ INFO] [1693995591.562679911]: Frame: 100 / 550
[ INFO] [1693995591.610606690]: Frame: 101 / 550
[ INFO] [1693995591.610667656]: Frame: 102 / 550
[ INFO] [1693995591.620101696]: Frame: 103 / 550
[ INFO] [1693995591.626159631]: Frame: 104 / 550
[ INFO] [1693995591.666613129]: Frame: 105 / 550
[ INFO] [1693995591.710604301]: Frame: 106 / 550
[ INFO] [1693995591.754622243]: Frame: 107 / 550
[ INFO] [1693995591.798613855]: Frame: 108 / 550
[ INFO] [1693995591.799017511]: Frame: 109 / 550
[ INFO] [1693995591.802775060]: Frame: 110 / 550
[ INFO] [1693995591.846602020]: Frame: 111 / 550
[ INFO] [1693995591.890611035]: Frame: 112 / 550
[ INFO] [1693995591.890679545]: Frame: 113 / 550
[ INFO] [1693995591.934615171]: Frame: 114 / 550
[ INFO] [1693995591.978614778]: Frame: 115 / 550
[ INFO] [1693995591.982338364]: Frame: 116 / 550
[ INFO] [1693995591.986078059]: Frame: 117 / 550
[ INFO] [1693995592.030604546]: Frame: 118 / 550
[ INFO] [1693995592.078611868]: Frame: 119 / 550
[ INFO] [1693995592.126610744]: Frame: 120 / 550
[ INFO] [1693995592.170665856]: Frame: 121 / 550
[ INFO] [1693995592.214604187]: Frame: 122 / 550
[ INFO] [1693995592.214676384]: Frame: 123 / 550
[ INFO] [1693995592.223934471]: Frame: 124 / 550
[ INFO] [1693995592.239259400]: Frame: 125 / 550
[ INFO] [1693995592.247469047]: Frame: 126 / 550
[ INFO] [1693995592.257446690]: Frame: 127 / 550
[ INFO] [1693995592.298617208]: Frame: 128 / 550
[ INFO] [1693995592.346618309]: Frame: 129 / 550
[ INFO] [1693995592.390618547]: Frame: 130 / 550
[ INFO] [1693995592.438604137]: Frame: 131 / 550
[ INFO] [1693995592.443837879]: Frame: 132 / 550
[ INFO] [1693995592.467497602]: Frame: 133 / 550
[ INFO] [1693995592.474543762]: Frame: 134 / 550
[ INFO] [1693995592.485365325]: Frame: 135 / 550
[ INFO] [1693995592.492568483]: Frame: 136 / 550
[ INFO] [1693995592.498919904]: Frame: 137 / 550
[ INFO] [1693995592.542650020]: Frame: 138 / 550
[ INFO] [1693995592.586605073]: Frame: 139 / 550
[ INFO] [1693995592.630598168]: Frame: 140 / 550
[ INFO] [1693995592.630644596]: Frame: 141 / 550
[ INFO] [1693995592.639941637]: Frame: 142 / 550
[ INFO] [1693995592.643440916]: Frame: 143 / 550
[ INFO] [1693995592.645861329]: Frame: 144 / 550
[ INFO] [1693995592.654223777]: Frame: 145 / 550
[ INFO] [1693995592.665484303]: Frame: 146 / 550
[ INFO] [1693995592.667549101]: Frame: 147 / 550
[ INFO] [1693995592.670670603]: Frame: 148 / 550
[ INFO] [1693995592.673158123]: Frame: 149 / 550
[ INFO] [1693995592.675925625]: Frame: 150 / 550
[ INFO] [1693995592.681244888]: Frame: 151 / 550
[ INFO] [1693995592.684701246]: Frame: 152 / 550
[ INFO] [1693995592.694098026]: Frame: 153 / 550
[ INFO] [1693995592.734607150]: Frame: 154 / 550
[ INFO] [1693995592.778624932]: Frame: 155 / 550
[ INFO] [1693995592.822591166]: Frame: 156 / 550
[ INFO] [1693995592.822634889]: Frame: 157 / 550
[ INFO] [1693995592.823609468]: Frame: 158 / 550
[ INFO] [1693995592.843635026]: Frame: 159 / 550
[ INFO] [1693995592.856290199]: Frame: 160 / 550
[ INFO] [1693995592.867825586]: Frame: 161 / 550
[ INFO] [1693995592.914614627]: Frame: 162 / 550
[ INFO] [1693995592.958659380]: Frame: 163 / 550
[ INFO] [1693995593.002607048]: Frame: 164 / 550
[ INFO] [1693995593.046600364]: Frame: 165 / 550
[ INFO] [1693995593.052301061]: Frame: 166 / 550
[ INFO] [1693995593.074020653]: Frame: 167 / 550
[ INFO] [1693995593.114602746]: Frame: 168 / 550
[ INFO] [1693995593.158602213]: Frame: 169 / 550
[ INFO] [1693995593.202604585]: Frame: 170 / 550
[ INFO] [1693995593.209764441]: Frame: 171 / 550
[ INFO] [1693995593.224412395]: Frame: 172 / 550
[ INFO] [1693995593.236359604]: Frame: 173 / 550
[ INFO] [1693995593.243068924]: Frame: 174 / 550
[ INFO] [1693995593.286606585]: Frame: 175 / 550
[ INFO] [1693995593.330612705]: Frame: 176 / 550
[ INFO] [1693995593.374606402]: Frame: 177 / 550
[ INFO] [1693995593.374902854]: Frame: 178 / 550
[ INFO] [1693995593.385467690]: Frame: 179 / 550
[ INFO] [1693995593.401714938]: Frame: 180 / 550
[ INFO] [1693995593.406595209]: Frame: 181 / 550
[ INFO] [1693995593.414086553]: Frame: 182 / 550
[ INFO] [1693995593.425789229]: Frame: 183 / 550
[ INFO] [1693995593.466610475]: Frame: 184 / 550
[ INFO] [1693995593.510611686]: Frame: 185 / 550
[ INFO] [1693995593.510988711]: Frame: 186 / 550
[ INFO] [1693995593.518890785]: Frame: 187 / 550
[ INFO] [1693995593.566610351]: Frame: 188 / 550
[ INFO] [1693995593.614600320]: Frame: 189 / 550
[ INFO] [1693995593.658600619]: Frame: 190 / 550
[ INFO] [1693995593.706599424]: Frame: 191 / 550
[ INFO] [1693995593.716559653]: Frame: 192 / 550
[ INFO] [1693995593.727904570]: Frame: 193 / 550
[ INFO] [1693995593.734626204]: Frame: 194 / 550
[ INFO] [1693995593.778604921]: Frame: 195 / 550
[ INFO] [1693995593.778683230]: Frame: 196 / 550
[ INFO] [1693995593.822611321]: Frame: 197 / 550
[ INFO] [1693995593.823691170]: Frame: 198 / 550
[ INFO] [1693995593.829027576]: Frame: 199 / 550
[ INFO] [1693995593.870614796]: Frame: 200 / 550
[ INFO] [1693995593.914601389]: Frame: 201 / 550
[ INFO] [1693995593.915696787]: Frame: 202 / 550
[ INFO] [1693995593.920396325]: Frame: 203 / 550
[ INFO] [1693995593.962607519]: Frame: 204 / 550
[ INFO] [1693995594.010655477]: Frame: 205 / 550
[ INFO] [1693995594.054600101]: Frame: 206 / 550
[ INFO] [1693995594.054643964]: Frame: 207 / 550
[ INFO] [1693995594.054910500]: Frame: 208 / 550
[ INFO] [1693995594.078016112]: Frame: 209 / 550
[ INFO] [1693995594.087137199]: Frame: 210 / 550
[ INFO] [1693995594.095021689]: Frame: 211 / 550
[ INFO] [1693995594.142610196]: Frame: 212 / 550
[ INFO] [1693995594.186597800]: Frame: 213 / 550
[ INFO] [1693995594.234607918]: Frame: 214 / 550
[ INFO] [1693995594.278601173]: Frame: 215 / 550
[ INFO] [1693995594.322604969]: Frame: 216 / 550
[ INFO] [1693995594.326321290]: Frame: 217 / 550
[ INFO] [1693995594.332420203]: Frame: 218 / 550
[ INFO] [1693995594.374600909]: Frame: 219 / 550
[ INFO] [1693995594.374675741]: Frame: 220 / 550
[ INFO] [1693995594.418610776]: Frame: 221 / 550
[ INFO] [1693995594.462626674]: Frame: 222 / 550
[ INFO] [1693995594.506606754]: Frame: 223 / 550
[ INFO] [1693995594.509704442]: Frame: 224 / 550
[ INFO] [1693995594.518970174]: Frame: 225 / 550
[ INFO] [1693995594.527767676]: Frame: 226 / 550
[ INFO] [1693995594.543814455]: Frame: 227 / 550
[ INFO] [1693995594.551100800]: Frame: 228 / 550
[ INFO] [1693995594.594606621]: Frame: 229 / 550
[ INFO] [1693995594.638604555]: Frame: 230 / 550
[ INFO] [1693995594.682619011]: Frame: 231 / 550
[ INFO] [1693995594.685946334]: Frame: 232 / 550
[ INFO] [1693995594.700491793]: Frame: 233 / 550
[ INFO] [1693995594.742620992]: Frame: 234 / 550
[ INFO] [1693995594.790648883]: Frame: 235 / 550
[ INFO] [1693995594.834615618]: Frame: 236 / 550
[ INFO] [1693995594.845574011]: Frame: 237 / 550
[ INFO] [1693995594.855897219]: Frame: 238 / 550
[ INFO] [1693995594.866617370]: Frame: 239 / 550
[ INFO] [1693995594.880114531]: Frame: 240 / 550
[ INFO] [1693995594.922636454]: Frame: 241 / 550
[ INFO] [1693995594.966596065]: Frame: 242 / 550
[ INFO] [1693995594.966677019]: Frame: 243 / 550
[ INFO] [1693995595.010606623]: Frame: 244 / 550
[ INFO] [1693995595.054608325]: Frame: 245 / 550
[ INFO] [1693995595.067649891]: Frame: 246 / 550
[ INFO] [1693995595.086181284]: Frame: 247 / 550
[ INFO] [1693995595.126614204]: Frame: 248 / 550
[ INFO] [1693995595.174600827]: Frame: 249 / 550
[ INFO] [1693995595.218606746]: Frame: 250 / 550
[ INFO] [1693995595.227695772]: Frame: 251 / 550
[ INFO] [1693995595.232553008]: Frame: 252 / 550
[ INFO] [1693995595.274616613]: Frame: 253 / 550
[ INFO] [1693995595.318643331]: Frame: 254 / 550
[ INFO] [1693995595.362613753]: Frame: 255 / 550
[ INFO] [1693995595.410629942]: Frame: 256 / 550
[ INFO] [1693995595.454627305]: Frame: 257 / 550
[ INFO] [1693995595.463606934]: Frame: 258 / 550
[ INFO] [1693995595.470121024]: Frame: 259 / 550
[ INFO] [1693995595.514615801]: Frame: 260 / 550
[ INFO] [1693995595.558609468]: Frame: 261 / 550
[ INFO] [1693995595.602642679]: Frame: 262 / 550
[ INFO] [1693995595.602932218]: Frame: 263 / 550
[ INFO] [1693995595.609575504]: Frame: 264 / 550
[ INFO] [1693995595.614236578]: Frame: 265 / 550
[ INFO] [1693995595.621380674]: Frame: 266 / 550
[ INFO] [1693995595.666699394]: Frame: 267 / 550
[ INFO] [1693995595.714652242]: Frame: 268 / 550
[ INFO] [1693995595.717788874]: Frame: 269 / 550
[ INFO] [1693995595.724395470]: Frame: 270 / 550
[ INFO] [1693995595.733600937]: Frame: 271 / 550
[ INFO] [1693995595.744888976]: Frame: 272 / 550
[ INFO] [1693995595.786684431]: Frame: 273 / 550
[ INFO] [1693995595.830621189]: Frame: 274 / 550
[ INFO] [1693995595.874618021]: Frame: 275 / 550
[ INFO] [1693995595.918612278]: Frame: 276 / 550
[ INFO] [1693995595.921222211]: Frame: 277 / 550
[ INFO] [1693995595.933160573]: Frame: 278 / 550
[ INFO] [1693995595.944437692]: Frame: 279 / 550
[ INFO] [1693995595.986609551]: Frame: 280 / 550
[ INFO] [1693995596.030694490]: Frame: 281 / 550
[ INFO] [1693995596.074618565]: Frame: 282 / 550
[ INFO] [1693995596.118610307]: Frame: 283 / 550
[ INFO] [1693995596.119906487]: Frame: 284 / 550
[ INFO] [1693995596.131719070]: Frame: 285 / 550
[ INFO] [1693995596.139575257]: Frame: 286 / 550
[ INFO] [1693995596.186615374]: Frame: 287 / 550
[ INFO] [1693995596.234616144]: Frame: 288 / 550
[ INFO] [1693995596.278613096]: Frame: 289 / 550
[ INFO] [1693995596.279688216]: Frame: 290 / 550
[ INFO] [1693995596.284298504]: Frame: 291 / 550
[ INFO] [1693995596.326622332]: Frame: 292 / 550
[ INFO] [1693995596.326679480]: Frame: 293 / 550
[ INFO] [1693995596.370618563]: Frame: 294 / 550
[ INFO] [1693995596.375642776]: Frame: 295 / 550
[ INFO] [1693995596.384265708]: Frame: 296 / 550
[ INFO] [1693995596.397317954]: Frame: 297 / 550
[ INFO] [1693995596.442609754]: Frame: 298 / 550
[ INFO] [1693995596.490613259]: Frame: 299 / 550
[ INFO] [1693995596.538612705]: Frame: 300 / 550
[ INFO] [1693995596.538672880]: Frame: 301 / 550
[ INFO] [1693995596.556817358]: Frame: 302 / 550
[ INFO] [1693995596.575820636]: Frame: 303 / 550
[ INFO] [1693995596.606936287]: Frame: 304 / 550
[ INFO] [1693995596.623344852]: Frame: 305 / 550
[ INFO] [1693995596.631922878]: Frame: 306 / 550
[ INFO] [1693995596.638467205]: Frame: 307 / 550
[ INFO] [1693995596.682759569]: Frame: 308 / 550
[ INFO] [1693995596.726603250]: Frame: 309 / 550
[ INFO] [1693995596.726661942]: Frame: 310 / 550
[ INFO] [1693995596.732326270]: Frame: 311 / 550
[ INFO] [1693995596.749711979]: Frame: 312 / 550
[ INFO] [1693995596.786449066]: Frame: 313 / 550
[ INFO] [1693995596.812379448]: Frame: 314 / 550
[ INFO] [1693995596.818925629]: Frame: 315 / 550
[ INFO] [1693995596.866618063]: Frame: 316 / 550
[ INFO] [1693995596.866672446]: Frame: 317 / 550
[ INFO] [1693995596.910634774]: Frame: 318 / 550
[ INFO] [1693995596.954610816]: Frame: 319 / 550
[ INFO] [1693995596.962847415]: Frame: 320 / 550
[ INFO] [1693995596.969202604]: Frame: 321 / 550
[ INFO] [1693995596.973478517]: Frame: 322 / 550
[ INFO] [1693995596.989090781]: Frame: 323 / 550
[ INFO] [1693995596.995646700]: Frame: 324 / 550
[ INFO] [1693995597.038608920]: Frame: 325 / 550
[ INFO] [1693995597.082686806]: Frame: 326 / 550
[ INFO] [1693995597.084329282]: Frame: 327 / 550
[ INFO] [1693995597.090292798]: Frame: 328 / 550
[ INFO] [1693995597.134615208]: Frame: 329 / 550
[ INFO] [1693995597.178629954]: Frame: 330 / 550
[ INFO] [1693995597.182401160]: Frame: 331 / 550
[ INFO] [1693995597.185985962]: Frame: 332 / 550
[ INFO] [1693995597.226627047]: Frame: 333 / 550
[ INFO] [1693995597.270661611]: Frame: 334 / 550
[ INFO] [1693995597.279035851]: Frame: 335 / 550
[ INFO] [1693995597.306692468]: Frame: 336 / 550
[ INFO] [1693995597.350611594]: Frame: 337 / 550
[ INFO] [1693995597.394604418]: Frame: 338 / 550
[ INFO] [1693995597.394658621]: Frame: 339 / 550
[ INFO] [1693995597.414993435]: Frame: 340 / 550
[ INFO] [1693995597.431867624]: Frame: 341 / 550
[ INFO] [1693995597.438051878]: Frame: 342 / 550
[ INFO] [1693995597.444478191]: Frame: 343 / 550
[ INFO] [1693995597.458542138]: Frame: 344 / 550
[ INFO] [1693995597.466217541]: Frame: 345 / 550
[ INFO] [1693995597.491333157]: Frame: 346 / 550
[ INFO] [1693995597.534597149]: Frame: 347 / 550
[ INFO] [1693995597.534672732]: Frame: 348 / 550
[ INFO] [1693995597.578607106]: Frame: 349 / 550
[ INFO] [1693995597.578690845]: Frame: 350 / 550
[ INFO] [1693995597.654971385]: Frame: 351 / 550
[ INFO] [1693995597.663390660]: Frame: 352 / 550
[ INFO] [1693995597.706955763]: Frame: 353 / 550
[ INFO] [1693995597.750620356]: Frame: 354 / 550
[ INFO] [1693995597.798612729]: Frame: 355 / 550
[ INFO] [1693995597.803586156]: Frame: 356 / 550
[ INFO] [1693995597.811259336]: Frame: 357 / 550
[ INFO] [1693995597.854616865]: Frame: 358 / 550
[ INFO] [1693995597.902677428]: Frame: 359 / 550
[ INFO] [1693995597.908587713]: Frame: 360 / 550
[ INFO] [1693995597.916811817]: Frame: 361 / 550
[ INFO] [1693995597.958605550]: Frame: 362 / 550
[ INFO] [1693995598.002611659]: Frame: 363 / 550
[ INFO] [1693995598.046626055]: Frame: 364 / 550
[ INFO] [1693995598.090614642]: Frame: 365 / 550
[ INFO] [1693995598.094980616]: Frame: 366 / 550
[ INFO] [1693995598.110733597]: Frame: 367 / 550
[ INFO] [1693995598.154600834]: Frame: 368 / 550
[ INFO] [1693995598.154644977]: Frame: 369 / 550
[ INFO] [1693995598.202624076]: Frame: 370 / 550
[ INFO] [1693995598.246627261]: Frame: 371 / 550
[ INFO] [1693995598.248914330]: Frame: 372 / 550
[ INFO] [1693995598.254567788]: Frame: 373 / 550
[ INFO] [1693995598.294599637]: Frame: 374 / 550
[ INFO] [1693995598.338610225]: Frame: 375 / 550
[ INFO] [1693995598.382615904]: Frame: 376 / 550
[ INFO] [1693995598.391153985]: Frame: 377 / 550
================================================================================REQUIRED process [ros_calib_init-1] has died!
process has finished cleanly
log file: /home/geo/.ros/log/8b8db6a8-4c96-11ee-9ed7-18c04d2d923b/ros_calib_init-1*.log
Initiating shutdown!
================================================================================
[ros_calib_init_optimizer-2] killing on exit
[ros_calib_init-1] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
the log file : roslaunch-geo-X570-GAMING-X-8624.log
Any help would be appreciated. Thanks in advance.
Edit
from a little things i know maybe this happens because i feed it with livox (/livox/lidar) pointcloud instead of some rs or velodyne data ? But then i think that it shouldnt counter any frames. Every time i run the code, process dies on a different frame.There is a chance to modify the code to work for livox lidars?
Thank you for your great work and your contribution to the open source community.
I would like to ask if you could share all your experiment dataset, including IMU fixed at the two positions, as shown in your paper.
Thank you!
I'm getting the error on ubuntu 18.04, any solution to this?
@SubMishMar
Thanks for your great work.
I have a question.
I want to know the extrinsic calibration of Velodyne VLP 16 and Bosch BMI055(built-in IMU on realsense D435i).
Since it is attached to the ground robot, so it is difficult to obtain the same motion as the Data collection procedure video.
Can I use this tool to get an extrinsic parameter with the dataset I got from moving the Ground robot?
Thanks,
In ros_calib_init.cpp,
/// Handle Lidar measurement
sensor_msgs::PointCloud2::ConstPtr s_lidar = m.instantiate<sensor_msgs::PointCloud2>();
if (s_lidar != nullptr && m.getTopic() == topic_lidar) {
lin_core::VPointCloud::Ptr cloud_pcl(new lin_core::VPointCloud);
pcl::fromROSMsg(*s_lidar, *cloud_pcl);
LOdom->feedScan((*s_lidar).header.stamp.toSec(), cloud_pcl);
LOdom->append_and_update(true);
Eigen::Matrix3d deltaR_L = LOdom->get_latest_relativePose().odometry_ij.block(0, 0, 3, 3);
Eigen::Quaterniond delta_qL(deltaR_L);
geometry_msgs::PoseStamped pose;
pose.header.stamp = s_lidar->header.stamp;
pose.pose.orientation.x = delta_qL.x();
pose.pose.orientation.y = delta_qL.y();
pose.pose.orientation.z = delta_qL.z();
pose.pose.orientation.w = delta_qL.w();
lodom_publisher.publish(pose);
**imupacket.header.stamp = s_lidar->header.stamp;**
imu_packet_publisher.publish(imupacket);
imupacket.stamps.clear();
imupacket.accelreadings.clear();
imupacket.gyroreadings.clear();
}
I don't understand why "imupacket.header.stamp = s_lidar->header.stamp". Why not use the timestamp of IMU?
Hi, I tried your method with my data collected using Hesai PandarXT(32 line) and an external IMU. The data is synchronized, but the calibration result is wrong (The ground truth should be (-0.12, 0, 0.15), (0,0,-180) ), shown as follows:
Time taken for deskewing: 2.45107 [s]
[Propagation] successfully propagated
[Update] successful updateScan2Scan
[Update] successful updateScan2GlobalMap
[ INFO] [1640251233.514128561]: Lidar scan no: 557
[ INFO] [1640251233.514159010]: No of lodom: 498
[ INFO] [1640251233.514329557]: Reached end of bag
[ INFO] [1640251233.514342060]: Kalman Filtering took : 1295.45 [s]
Writing KF calibration result to: /home/dji/workspace/Texas_LICalib_ws/src/imu_lidar_calibration/linkalibr/data/I_T_L_final.txt
[ INFO] [1640251233.514537621]: Translation [in m]: -0.113965 -0.195481 -1.0932
[ INFO] [1640251233.514552354]: Euler Angles [in deg]: 174.288 179.51 -178.068
And I tested the same bag twice, the result are quite different. Could you please tell me the reason? Thx
Hi, your paper said an initialization module is implemented to obtain coarse rotation extrinsic, by aligning two rotation sequences (IMU angular velocity integration and NDT scan matching). But I didn't find where to print the initilization result, only final result in the end.
Another question, do I need to give an initial guess of the extrinsic parameters manually? Because I print the result of
Eigen::Matrix3d I_R_L = lin_core::quat_2_Rot(sys->get_state()->_calib_LIDARtoIMU->quat());
Eigen::Vector3d I_t_L = sys->get_state()->_calib_LIDARtoIMU->pos();
I found the I_R_L just have a little change from default initial value (0,0,0) degree.
Thanks!
Hi,
I have successfully built the package and did the intrinsic calibration. I did change some of the requirements in the launch file to match up with my sensors.
But I have an error when I tried to launch the package. I did catkin_make clean & change the permissions as well. But there's no difference.
ERROR: cannot launch node of type [linkalibr/ros_calib_init]: Cannot locate node of type [ros_calib_init] in package [linkalibr]. Make sure file exists in package path and permission is set to executable (chmod +x)
ERROR: cannot launch node of type [linkalibr/ros_calib_init_optimizer]: Cannot locate node of type [ros_calib_init_optimizer] in package [linkalibr]. Make sure file exists in package path and permission is set to executable (chmod +x)
Please guide how to use for VLP-16.
I have tried but the process gets end soon.
ERROR: cannot launch node of type [linkalibr/ros_calib_init]: Cannot locate node of type [ros_calib_init] in package [linkalibr]. Make sure file exists in package path and permission is set to executable (chmod +x)
ERROR: cannot launch node of type [linkalibr/ros_calib_init_optimizer]: Cannot locate node of type [ros_calib_init_optimizer] in package [linkalibr]. Make sure file exists in package path and permission is set to executable (chmod +x)
@SubMishMar @amirx96
How to know estimated calibration parameters are correct? Any reprojection errors or any visualization codes would be really helpful for community. Kindly do the needful
Even if my lidar points have the format of XYZIRT
geo@geo-X570-GAMING-X:~$ rostopic echo /rslidar_points/fields
-
name: "x"
offset: 0
datatype: 7
count: 1
-
name: "y"
offset: 4
datatype: 7
count: 1
-
name: "z"
offset: 8
datatype: 7
count: 1
-
name: "intensity"
offset: 12
datatype: 7
count: 1
-
name: "ring"
offset: 16
datatype: 4
count: 1
-
name: "timestamp"
offset: 18
datatype: 8
count: 1
---
i have the following warnings when i am running the command.
[Propagation] successfully propagated
[Update] successful updateScan2Scan
[Update] successful updateScan2GlobalMap
[ INFO] [1695034331.693452363]: Lidar scan no: 1067
[ INFO] [1695034331.693525312]: No of lodom: 1056
[ INFO] [1695034331.696711035]: No of imu measurements: 38
Failed to find match for field 'ring'.
Failed to find match for field 't'.
Time taken for deskewing: 0.0024724 [s]
Any thoughts would be helpful! Thanks in advance.
hello,I get an error when I run the program,Segmentation fault (core dumped).I pinpointed the cause of the error,in file ros_calib_init.cpp" LOdom = std::make_shared<lin_core::LidarOdometry>(ndt_resolution, "", true);".Do you know what caused it?Looking forward to your reply.
运行roslaunch linkalibr ros_calib_init.launch后报错如下:
[ INFO] [1652091019.397516439]: Frame: 547 / 550
[ INFO] [1652091019.652656943]: Frame: 548 / 550
[ INFO] [1652091020.011336717]: Frame: 549 / 550
[ INFO] [1652091020.301443733]: Frame: 550 / 550
Rot3:
[ros_calib_init_optimizer-2] killing on exit
[ros_calib_init-1] killing on exit
shutting down processing monitor...
... shutting down processing monitor complete
done
i just want to make sure that does it work between external imu and lidar, which get transform between lidar and external imu?or it only get the transform between ouster's internal imu and lidar?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.