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 代码的编译和运行
|
||||
|
||||
```shell
|
||||
cd build
|
||||
# 该命令会在当前目录的上级目录中查找CMakeLists.txt文件,并使用CMake生成Makefile。CMAKE_BUILD_TYPE指定编译的模式,这里指定为# Release,表示编译优化版本,以提高代码的性能
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Release
|
||||
# 该命令会使用Makefile编译和构建代码。Makefile是由CMake生成的,它包含了编译和构建代码所需的所有信息。在运行make命令后,它会# # 编译和构建代码,并在当前目录生成可执行文件或库文件
|
||||
代码的编译和运行参考文档`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;
|
||||
}
|
||||
|
||||
# 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