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

61 lines
1.8 KiB
Markdown
Raw Normal View History

2023-12-15 16:08:00 +08:00
# 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;
}
```