ORB-SLAM3/ORB-SLAM3-UESTC/README.md

61 lines
1.8 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# ORB-SLAM3 -UESTC
概述基于ORB-SLAM3调整的专用版本。`Workspace`目录下的ORB-SLAM3的核心部分源自
## 一、基本操作
### 1.1 代码的编译和运行
代码的编译和运行参考文档`Workspace/README.md`
## 二、数据的接入与部署
### 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;
}
```