forked from logzhan/ORB-SLAM3-UESTC
更新ORB-SLAM3实时接入摄像头和IMU的伪代码
parent
dc230caaac
commit
e57aa6e746
70
README.md
70
README.md
|
@ -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
|
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue