1
0
Fork 0

更新ORB-SLAM3实时接入摄像头和IMU的伪代码

main
詹力 2023-12-01 13:31:06 +08:00
parent dc230caaac
commit e57aa6e746
1 changed files with 47 additions and 23 deletions

View File

@ -8,29 +8,53 @@
### 1.1 代码的编译和运行 ### 1.1 代码的编译和运行
```shell 代码的编译和运行参考文档`Workspace/README.md`
cd build
# 该命令会在当前目录的上级目录中查找CMakeLists.txt文件并使用CMake生成Makefile。CMAKE_BUILD_TYPE指定编译的模式这里指定为# Release表示编译优化版本以提高代码的性能 ## 二、数据的接入与部署
cmake .. -DCMAKE_BUILD_TYPE=Release
# 该命令会使用Makefile编译和构建代码。Makefile是由CMake生成的它包含了编译和构建代码所需的所有信息。在运行make命令后它会# # 编译和构建代码,并在当前目录生成可执行文件或库文件 ### 2.1 单目摄像头加入IMU数据实时接入
由于ORB-SLAM3采用的是读取图片和csv文件的方式运行不适用于小车的实际实时接入数据。所以我们需要对原本的读取代码进行改进并且对我们使用的IMU实现一个读取器。伪代码如下
```c++
// 单目摄像头+IMU接入ORB-SLAM3伪代码
int main(){
// 创建IMU数据读取器
IMUReader imuReader("/dev/ttyUSB0");
// 创建ORB_SLAM3定位系统
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::IMU_MONOCULAR, true);
// 默认30fps帧率
int fps = 30;
// 初始化摄像头
cv::VideoCapture cap = cv::VideoCapture(0);
cap.set(cv::CAP_PROP_FRAME_WIDTH, 640);
cap.set(cv::CAP_PROP_FRAME_HEIGHT, 480);
// 清空IMU内部缓存等待1fps的时间用于填充数据
imuReader.clear();
delay_ms(1000 / fps);
while(true){
Mat frame;
// 通过Opencv从摄像头读取视频帧
cap >> frame;
// 获取当前系统的时间戳
tframe = get_systemTick();
// imuReader从串口读取数据
IMUData vImuMeas;
int statsu = imuReader(vImuMeas);
// 清空IMUReader内部缓存, imuReader内部线程继续读取新的数据
imuReader.clear();
// 如果读取IMU状态正确
if(status){
// 视觉+IMU VSLAM
SLAM.TrackMonocular(frame,tframe,vImuMeas);
}else{
// 纯视觉 VSLAM
SLAM.TrackMonocular(frame,tframe);
}
}
return 0;
}
# make -j4 命令用于在Linux或Unix系统上使用多个线程同时编译代码
make
```
### 1.2 代码的运行
实际上是执行Examples目录下的mono_euroc_cap程序并提供两个参数信息分别为ORBvoc.txt和cam2.yaml。
ORBvoc是ORB-SLA-M2中使用的词汇表vocabulary也称为字典。ORB-SLAM2是一种基于特征点的实时单目SLAM算法用于在机器人或无人机等设备上进行实时定位和建图。ORBvoc词汇表包含了一组视觉特征点的描述符用于对图像进行特征点匹配和建图。在ORB-SLAM2中ORB-voc词汇表用于实现回环检测和重定位以提高定位和建图的准确性和鲁棒性。ORBvoc词汇表是通过使用一些大规模的数据集如TUM、KITTI等进行训练得到的可以通过下载预训练的ORBvoc词汇表来加速ORB-SLAM2的使用。
cam.yaml是摄像头的标定信息。
```shell
# 原版
# 运行可执行程序 mono_euroc_cap 参数0为ORBvoc.txt 参数1为./Examples/Monocular/cam2.yaml
./Examples/Monocular/mono_euroc_cap ./Vocabulary/ORBvoc.txt ./Examples/Monocular/cam2.yaml
# zhanli整理版
./Application/mono_euroc_cap ./Vocabulary/ORBvoc.txt ./Application/cam2.yaml
``` ```