上一篇文章写了在win11下安装wsl2,既然装了那么肯定要用。

整理一下需要的环境

  • OpenCV 最重要的肯定是OpenCV

  • Eigen

  • OpenNI2(我自己要用)

  • g2o

  • 因为需要用到gui所以需要把上篇文章中.wslconfig文件中修改一下guiApplications=true

gtk依赖

1
2
3
sudo apt-get install libgtk2.0-dev libgtk-3-dev
# sudo apt-get install libgtk-4-dev
sudo apt-get libjpeg-dev libtiff5-dev

Eigen3安装

方式1:apt安装(速度快)

1
sudo apt install libeigen3-dev

方式2:源码安装

gflags安装

1
2
3
4
5
6
7
git clone https://github.com/gflags/gflags.git
cd gflags
mkdir build
cd build
cmake -DGFLAGS_NAMESPACE=google -DCMAKE_CXX_FLAGS=-fPIC -GNinja ..
ninja
sudo ninja install

glog安装

1
2
3
4
5
6
7
git clone https://github.com/google/glog
cd glog
mkdir build
cd build
cmake -DCMAKE_CXX_FLAGS=-fPIC -DBUILD_SHARED_LIBS=ON -GNinja ..
ninja
sudo ninja install

gstreamer安装(可选)

1
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-tools gstreamer1.0-x gstreamer1.0-alsa gstreamer1.0-gl gstreamer1.0-gtk3 gstreamer1.0-pulseaudio

fmt安装(可选)

1
2
3
4
5
6
7
git clone https://github.com/fmtlib/fmt.git
cd fmt
mkdir build
cd build
cmake -G Ninja ..
ninja
sudo ninja install

Sophus安装(可选)

1
2
3
4
5
6
7
8
9
git clone https://github.com/strasdat/Sophus.git
cd Sophus/
mkdir build
cd build
# cmake -G Ninja -DCMAKE_CXX_FLAGS=-fPIC .. #装了fmt
cmake -G Ninja -DCMAKE_CXX_FLAGS=-fPIC -DUSE_BASIC_LOGGING=ON .. #没装了fmt
ninja
sudo ninja install

g2o安装

1
sudo apt install libcholmod3 libcxsparse3
1
sudo apt install libcholmod5 libcxsparse4
1
2
3
4
5
6
7
8
9
sudo apt install libqglviewer-dev-qt5 libsuitesparse-dev

git clone https://github.com/RainerKuemmerle/g2o.git
cd g2o
mkdir build
cd build
cmake -GNinja -DCMAKE_BUILD_TYPE=Release ..
ninja
sudo ninja install

Pangolin安装

1
2
3
4
5
6
7
8
9
10
sudo apt install mesa-utils -y
git clone https://github.com/stevenlovegrove/Pangolin
cd Pangolin
./scripts/install_prerequisites.sh recommended
sudo aptitude install libgl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols libegl1-mesa-dev libc++-dev libglew-dev libeigen3-dev cmake g++ ninja-build libjpeg-dev libpng-dev libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
mkdir build
cd build
cmake .. -GNinja
ninja
sudo ninja install

octomap安装(可选)

1
2
3
4
5
6
7
git clone https://github.com/OctoMap/octomap.git --depth 1
cd octomap
mkdir build
cd build
cmake .. -GNinja
ninja
sudo ninja install

pcl安装(可选)

apt安装

1
sudo apt install libpcl-dev

源码安装

1
2
3
4
5
6
7
8
sudo apt-get install libboost-all-dev libflann-dev libusb-1.0-0-dev
git clone https://github.com/PointCloudLibrary/pcl --depth 1
cd pcl
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -GNinja ..
ninja
sudo ninja install

OpenNI2安装

sudo apt-get install libopenni2-dev

vtk安装

方式1:apt安装(速度快)

1
sudo aptitude install vtk9 libvtk9-dev

方式2:源码安装

1
2
3
4
5
6
7
git clone https://gitlab.kitware.com/vtk/vtk.git
cd vtk/
mkdir build
cd build
cmake -G Ninja ..
ninja
sudo ninja install

OpenNI2安装

sudo apt-get install libopenni2-dev

OpenCV

wsl2文件系统挂载

启动wsl之后,文件系统会自动挂载到windows中,相应的windows磁盘也会挂载到wsl中/mnt/<盘符>/可以很方便得访问或者拷贝文件。创建好目录下载好opencv4.9和对应的opencv_contrib-4.9.0可以自行添加的选项:

1
-D OPENCV_DOWNLOAD_MIRROR_ID=gitcode \
1
-D OPENCV_DOWNLOAD_MIRROR_ID=gitcode \
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
sudo ln -s /usr/bin/python3 /usr/bin/python
pip install numpy
cd opencv-4.9.0/
mkdir build
cd build/
cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_C_COMPILER=/usr/bin/cc \
-D CMAKE_CXX_COMPILER=/usr/bin/c++ \
-D BUILD_SHARED_LIBS=ON \
-D CMAKE_CXX_FLAGS=-fPIC \
-D CMAKE_C_FLAGS=-fPIC \
-D CMAKE_EXE_LINKER_FLAGS="-lpthread -ldl" \
-D ENABLE_PIC=ON \
-D WITH_1394=OFF \
-D WITH_ARAVIS=OFF \
-D WITH_ARITH_DEC=ON \
-D WITH_ARITH_ENC=ON \
-D WITH_CLP=OFF \
-D WITH_CUBLAS=OFF \
-D WITH_CUDA=OFF \
-D WITH_CUFFT=OFF \
-D WITH_FFMPEG=ON \
-D WITH_GSTREAMER=ON \
-D WITH_GSTREAMER_0_10=OFF \
-D WITH_HALIDE=OFF \
-D WITH_HPX=OFF \
-D WITH_IMGCODEC_HDR=ON \
-D WITH_IMGCODEC_PXM=ON \
-D WITH_IMGCODEC_SUNRASTER=ON \
-D WITH_INF_ENGINE=OFF \
-D WITH_IPP=OFF \
-D WITH_ITT=OFF \
-D WITH_JASPER=ON \
-D WITH_JPEG=ON \
-D WITH_LAPACK=ON \
-D WITH_LIBREALSENSE=OFF \
-D WITH_NVCUVID=OFF \
-D WITH_OPENCL=OFF \
-D WITH_OPENCLAMDBLAS=OFF \
-D WITH_OPENCLAMDFFT=OFF \
-D WITH_OPENCL_SVM=OFF \
-D WITH_OPENEXR=OFF \
-D WITH_OPENGL=OFF \
-D WITH_OPENMP=OFF \
-D WITH_OPENNI=OFF \
-D WITH_OPENNI2=ON \
-D WITH_OPENVX=OFF \
-D WITH_PNG=ON \
-D WITH_PROTOBUF=OFF \
-D WITH_PTHREADS_PF=ON \
-D WITH_PVAPI=OFF \
-D WITH_QT=OFF \
-D WITH_QUIRC=OFF \
-D WITH_TBB=OFF \
-D WITH_TIFF=ON \
-D WITH_VULKAN=OFF \
-D WITH_WEBP=ON \
-D WITH_XIMEA=OFF \
-D WITH_GTK=ON \
-D WITH_EIGEN=ON \
-D OPENCV_EXTRA_MODULES_PATH="../../opencv_contrib-4.9.0/modules" \
-D BUILD_ZLIB=ON \
-D ZLIB_INCLUDE_DIR="../3rdparty/zlib" \
-D OPENCV_GENERATE_PKGCONFIG=ON \
-G Ninja \
..
ninja
sudo ninja install

::: info
-D OPENCV_DOWNLOAD_MIRROR_ID=gitcode \ 使用了国内镜像下载,不再需要用代理。
:::

如果提示下载失败查看下方的代理问题

evo工具

1
2
3
4
python3 -m venv
source venv/bin/activate
pip install evo --upgrade --no-binary evo
sudo apt install python3-tk # No module named 'tkinter'

使用方法

想要评估轨迹可以使用evo_traj,例如我的文件时tum格式的,就可以使用以下命令。

1
2
evo_traj tum CameraTrajectory.txt --ref=<groundtruth.txt> -p --correct_scale -a

问题

Segmentation fault

通过gdb查看core dump文件,发现错误出现在/usr/lib/wsl/lib/libd3d12core.so我们可以通过在运行程序前加入WAYLAND_DISPLAY=0来强制X11显示,虽然还会有Segmentation fault,但是程序能成功运行。

代理问题

在编译OpenCV时,cmake可能会通过网络从github上下载一些代码库,所以可如果网络环境不太好,可以提前在终端中设置好代理。

1
export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890

double free

出现这个问题请关闭编译选项 -march=native

然后我在使用过程中发现pcl是会默认启用-march=native编译的,我们需要重新编译一下pcl:

1
cmake -DCMAKE_BUILD_TYPE=Release -GNinja -DPCL_ENABLE_MARCHNATIVE=OFF  ..