基于pangolin,提供常规的slam可视化api,具体的使用示例可参考examples文件夹下的相关内容。使用slam_viewer非常方便,代码涉及到的流程主要有:
- WindowImpl创建;
- View创建(Menu菜单、Plotter数据绘图、3d可视化View3D和ImageShower四种);
- Camera创建并绑定View3D;
- WindowImpl绑定View(涉及到各部分View的窗口占比);
- 动态创建UIItem并绑定到View3D中。
- 注意,针对View创建部分,在需要在可视化线程运行之前完成,针对View3D中渲染的UIItem可以动态的向View3D中添加
在使用样例中有针对KITTI-Odometry数据集的可视化操作,涉及到的渲染UI主要有 Trajectory(轨迹)、Frame(视觉SLAM帧)、Coordinate(坐标系)、Cloud(点云)、Image(图像)。除此之外,还有Menu菜单的配置,主要针对相机的操作,提供了跟踪模式,上帝视角和前置模式三部分的示例。
除此之外,slam_viewer为拓展预留了一些接口,如:
- CloudUI部分的颜色工厂,用户可以方便的自定义一些可视化的颜色;
- UIItem的3d渲染基类,用户可以自定义一些3d渲染的UIItem;
- Menu菜单部分的配置,可以通过Menu内置api和lambda表达式的方式快速配置。
- C++17
- OpenCV 3.4.16
- Pangolin 0.9.1
- Sophus 1.22.10
- Eigen3
- PCL
- TBB
针对OpenCV、Pangolin和Sophus需要去指定的github仓库下载源码进行源码编译和安装。而Eigen3、PCL和TBB则直接通过apt进行安装。
sudo apt install libeigen3-dev libpcl-dev libtbb-dev
git clone https://github.com/sunshanlu/slam_viewer.git
cd slam_viewer
cmake .. -DBUILD_EXAMPLES=ON
make -j8
cmake .. -DBUILD_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Release
make -j8
sudo make install
具体的使用示例请看examples文件夹,若要运行kitti_dataset_example
示例,需要下载kitti-odometry
数据集,并且需要将数据集按照如下目录存放
.
├── results
│ ├── 00.txt
│ ├── 01.txt
│ ├── xx.txt
├── sequences
│ ├── 00
│ │ ├── image_0
│ │ │ │ ├── 000000.png
│ │ │ │ ├── 000001.png
│ │ │ │ ├── xxx.png
│ │ └── image_1
│ │ │ │ ├── 000000.png
│ │ │ │ ├── 000001.png
│ │ │ │ ├── xxx.png
│ │ └── times.txt
│ ├── ...
└── velodyne
└── sequences
├── 00
│ └── velodyne
│ ├── 000000.bin
│ ├── 000001.bin
│ ├── xxx.bin
├── ...
运行kitti_dataset_example
的命令如下:
./bin/kitti_dataset_example <dataset_path> <sequence>
- data_path: 数据集路径,也就是上述目录中的.对应的绝对路径
- seqcuece: 00/01/...,代表kitti数据集序列
find_package(SLAMViewer REQUIRED) # 找到slam_viewer库
include_directories(${SLAMViewer_INCLUDE_DIRS}) # 添加slam_viewer的头文件路径
target_link_libraries(<your_target> ${SLAMViewer_LIBRARIES}) # 链接slam_viewer库