-
Notifications
You must be signed in to change notification settings - Fork 57
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7b6fa58
commit 5ce002f
Showing
44 changed files
with
9,778 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,106 @@ | ||
cmake_minimum_required(VERSION 3.1.0) | ||
project(m_detector) | ||
|
||
SET(CMAKE_BUILD_TYPE "Release") | ||
|
||
ADD_COMPILE_OPTIONS(-std=c++17 ) | ||
set( CMAKE_CXX_FLAGS "-std=c++17 -O3 -ltbb" ) | ||
|
||
add_definitions(-DROOT_DIR=\"${CMAKE_CURRENT_SOURCE_DIR}/\") | ||
|
||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fexceptions" ) | ||
set(CMAKE_CXX_STANDARD 17) | ||
set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||
set(CMAKE_CXX_EXTENSIONS OFF) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17 -ltbb -pthread -std=c++1z -std=c++17 -fexceptions") | ||
|
||
message("Current CPU archtecture: ${CMAKE_SYSTEM_PROCESSOR}") | ||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "(x86)|(X86)|(amd64)|(AMD64)" ) | ||
include(ProcessorCount) | ||
ProcessorCount(N) | ||
message("Processer number: ${N}") | ||
# if(N GREATER 15) | ||
# add_definitions(-DMP_EN) | ||
# add_definitions(-DMP_PROC_NUM=14) | ||
# message("core for MP: 4") | ||
# elseif(N GREATER 5) | ||
if(N GREATER 5) | ||
add_definitions(-DMP_EN) | ||
add_definitions(-DMP_PROC_NUM=4) | ||
message("core for MP: 3") | ||
elseif(N GREATER 3) | ||
math(EXPR PROC_NUM "${N} - 2") | ||
add_definitions(-DMP_EN) | ||
add_definitions(-DMP_PROC_NUM="${PROC_NUM}") | ||
message("core for MP: ${PROC_NUM}") | ||
else() | ||
add_definitions(-DMP_PROC_NUM=1) | ||
endif() | ||
else() | ||
add_definitions(-DMP_PROC_NUM=1) | ||
endif() | ||
|
||
find_package(OpenMP QUIET) | ||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") | ||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}") | ||
|
||
# find_package(PythonLibs REQUIRED) | ||
# find_path(MATPLOTLIB_CPP_INCLUDE_DIRS "matplotlibcpp.h") | ||
|
||
set(TBB_DIR "/usr/local/tbb-2019_U8") | ||
include("/home/huajie/package/oneTBB-2019_U8/cmake/TBBBuild.cmake") | ||
tbb_build(TBB_ROOT "/home/huajie/package/oneTBB-2019_U8" CONFIG_DIR TBB_DIR) | ||
find_package(catkin REQUIRED COMPONENTS | ||
geometry_msgs | ||
nav_msgs | ||
sensor_msgs | ||
roscpp | ||
rospy | ||
std_msgs | ||
pcl_ros | ||
tf | ||
livox_ros_driver | ||
message_generation | ||
eigen_conversions | ||
) | ||
|
||
find_package(Eigen3 REQUIRED) | ||
find_package(PCL 1.8 REQUIRED) | ||
find_package(TBB REQUIRED) | ||
find_package(OpenCV REQUIRED) | ||
|
||
message(Eigen: ${EIGEN3_INCLUDE_DIR}) | ||
|
||
include_directories( | ||
${catkin_INCLUDE_DIRS} | ||
${EIGEN3_INCLUDE_DIR} | ||
${PCL_INCLUDE_DIRS} | ||
${PYTHON_INCLUDE_DIRS} | ||
include) | ||
|
||
generate_messages( | ||
DEPENDENCIES | ||
geometry_msgs | ||
) | ||
|
||
catkin_package( | ||
CATKIN_DEPENDS geometry_msgs nav_msgs roscpp rospy std_msgs message_runtime | ||
DEPENDS EIGEN3 PCL | ||
INCLUDE_DIRS | ||
) | ||
|
||
|
||
add_executable(dynfilter src/dynfilter_with_odom.cpp src/DynObjFilter.cpp src/DynObjCluster.cpp) | ||
target_link_libraries(dynfilter ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${PYTHON_LIBRARIES} ${OpenCV_LIBS} TBB::tbb) | ||
target_include_directories(dynfilter PRIVATE ${PYTHON_INCLUDE_DIRS}) | ||
|
||
add_executable(display_prediction src/display_prediction.cpp ) | ||
target_link_libraries(display_prediction ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${PYTHON_LIBRARIES} ${OpenCV_LIBS} TBB::tbb) | ||
target_include_directories(display_prediction PRIVATE ${PYTHON_INCLUDE_DIRS}) | ||
|
||
|
||
add_executable(cal_recall src/cal_recall_multi.cpp) | ||
target_link_libraries(cal_recall ${catkin_LIBRARIES} ${PCL_LIBRARIES} ${PYTHON_LIBRARIES} ${OpenCV_LIBS} TBB::tbb) | ||
target_include_directories(cal_recall PRIVATE ${PYTHON_INCLUDE_DIRS}) | ||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,166 @@ | ||
# M-detector | ||
|
||
### Moving Event Detection from LiDAR Point Streams | ||
## 1.Introduction | ||
|
||
**M-detector** is a moving event detection package, which determines if a point from LiDAR is moving immediately after its arrival, resulting in a point-by-point detection with a latency of just several microseconds. M-detector is designed based on occlusion principles and can be used in different environments with various types of LiDAR sensors. | ||
|
||
### **1.1 Related paper** | ||
|
||
Our related papers has been accepted by Nature Communications. [Moving Event Detection from LiDAR Stream Points](https://www.nature.com/articles/s41467-023-44554-8). | ||
|
||
If our code is used in your project, please cite our paper. | ||
|
||
### **1.2 Related video** | ||
|
||
Our accompanying videos are now available on **YouTube** (click below images to open) and [**Bilibili**](xxx). | ||
|
||
<div align="center"> | ||
<a href="https://www.youtube.com/watch?v=SYaig2eHV5I" target="_blank"><img src="img/cover.bmp" alt="video" width="60%" /></a> | ||
</div> | ||
|
||
### 1.3 Developers | ||
|
||
The codes of this repo are contributed by: | ||
[Huajie Wu (吴花洁)](https://github.com/HuajieWu99), [Yihang Li (李一航)](https://github.com/yihangHKU) and [Wei Xu (徐威)](https://github.com/XW-HKU) | ||
|
||
## 2. Prerequisites | ||
|
||
### 2.1 **Ubuntu** and **ROS** | ||
|
||
Ubuntu ≥ 18.04. | ||
|
||
ROS ≥ Melodic. Follow [[ROS Installation](http://wiki.ros.org/ROS/Installation)] | ||
|
||
### 2.2 **PCL** and **Eigen** | ||
|
||
PCL ≥ 1.8 | ||
|
||
`sudo apt install libpcl-dev` | ||
|
||
Eigen ≥ 3.3.4 | ||
|
||
`sudo apt install libeigen3-dev` | ||
|
||
### 2.3 **livox_ros_driver** | ||
|
||
Follow [livox_ros_driver Installation](https://github.com/Livox-SDK/livox_ros_driver). | ||
|
||
*Remarks:* | ||
|
||
* Since the M-detector support Livox serials LiDAR firstly, so the **livox_ros_driver** must be installed and **sourced** before run any M-detector launch file. | ||
* How to source? The easiest way is add the line `source $Livox_ros_driver_dir$/devel/setup.bash` to the end of file `~/.bashrc`, where `$Livox_ros_driver_dir$` is the directory of the livox ros driver workspace (should be the `ws_livox` directory if you completely followed the livox official document). | ||
|
||
### 2.4 TBB | ||
|
||
Install gcc-9 g++-9 | ||
|
||
`sudo add-apt-repository ppa:ubuntu-toolchain-r/test` | ||
|
||
`sudo apt update` | ||
|
||
`sudo apt install gcc-9 g++-9` | ||
|
||
`cd /usr/bin` | ||
|
||
`sudo rm gcc g++` | ||
|
||
`sudo ln -s gcc-9 gcc` | ||
|
||
`sudo ln -s g++-9 g++` | ||
|
||
Follow [[TBB Installation](https://solarianprogrammer.com/2019/05/09/cpp-17-stl-parallel-algorithms-gcc-intel-tbb-linux-macos/)] (**Note:** change the gcc-9.1/g++-9.1 to gcc-9/g++-9) | ||
|
||
## 3. Build | ||
|
||
Clone the repository and catkin_make: | ||
|
||
`cd ~/catkin_ws/src` | ||
|
||
`git clone [email protected]:hku-mars/M-detector.git` | ||
|
||
`catkin_make` | ||
|
||
`source devel/setup.bash` | ||
(**Note:** change the path for TBB in CMakeList.txt) | ||
|
||
## 4. Key Information | ||
|
||
### 4.1 Key parameters | ||
|
||
``` | ||
dataset: 3 #0 for kitti, 1 for nuscenes, 2 for waymo | ||
buffer_delay: 0.1 | ||
buffer_size: 100000 | ||
points_num_perframe: 30000 | ||
depth_map_dur: 0.2 | ||
max_depth_map_num: 5 | ||
max_pixel_points: 5 | ||
frame_dur: 0.1 | ||
hor_resolution_max: 0.005 | ||
ver_resolution_max: 0.01 | ||
``` | ||
|
||
The parameters are provided in folder "config" for different LiDARs. | ||
|
||
For methods of parameters tuning, please follow the section 8 introduced in [[Supplementary Information](https://www.nature.com/articles/s41467-023-44554-8)]. | ||
|
||
To save the label files, please pass the parameter via the corresponding launch files. | ||
|
||
### 4.2 Folder structure for dataset | ||
|
||
``` | ||
├── XXX (dataset name) | ||
│ ├── bags | ||
│ │ ├── XXX_0000.bag | ||
│ │ ├── ... | ||
│ ├── sequences | ||
│ │ ├── 0000 | ||
│ │ │ ├── labels | ||
│ │ │ ├── predictionsx_origin (results in point-out mode with xth parameter file) | ||
│ │ │ ├── predictionsx (in frame-out mode with xth parameter file) | ||
│ │ │ ├── ... | ||
│ │ ├── ... | ||
├── ... | ||
``` | ||
|
||
The dataset can be downloaded at [[this link](https://drive.google.com/drive/folders/1ASNfrjZB7n9Q-nB4Pm2IwvArFWnTcFAj?usp=drive_link)]. | ||
|
||
## 5. Directly Run | ||
|
||
### 5.1 Run with odometry and point clouds (in local frame) | ||
|
||
At first, please run a odometery node, such as [[Fast Lio](https://github.com/hku-mars/FAST_LIO)] (Download Fast Lio provided in Releases into the same location as M-detector's and complie them). | ||
|
||
Then: | ||
|
||
`roslaunch fast_lio mapping_XXX(for dataset).launch` | ||
|
||
`roslaunch m_detector detector_(dataset).launch` | ||
|
||
`rosbag play YOURBAG.bag` | ||
|
||
### 5.2 Generate the label files for every point | ||
|
||
`roslaunch m_detector detector_odom.launch out_path:="your path for frame-out results" out_origin_path:="your path for point-out results"` | ||
|
||
### 5.3 Calculate the IoU of results | ||
|
||
`roslaunch m_detector cal_recall.launch` | ||
|
||
## 6. Run with Embedded in FAST LIO | ||
|
||
Download the embedded version provided in Releases into a new workspace and complie them. | ||
|
||
`roslaunch fast_lio mapping_(dataset).launch` | ||
|
||
`rosbag play YOURBAG.bag` | ||
|
||
## 7. Rosbag Download | ||
|
||
The bags used in paper can be download at [[this link](https://drive.google.com/drive/folders/1ASNfrjZB7n9Q-nB4Pm2IwvArFWnTcFAj?usp=sharing)]. | ||
|
||
## 8. License | ||
|
||
The source code of this package is released under [**GPLv2**](http://www.gnu.org/licenses/) license. We only allow it free for **academic usage**. For commercial use, please contact Dr. Fu Zhang [[email protected]](mailto:[email protected]). | ||
|
||
For any technical issues, please contact me via email [[email protected]](mailto:[email protected]). |
Oops, something went wrong.