【无人机自主导航3-ORB-SLAM2】Gazebo仿真环境下的视觉SLAM

一、背景

无人机的自主导航需要无人机的位置信息、姿态等,在空旷的室外环境,一般需要基于GNSS系统进行位置信息的获取与无人机导航。

但在室内等无GNSS的情况下,我们就需要其他的手段来实现。

在我们确定自己的位置时,一般是通过地图定位+环境地物相对定位来实现。近些年由于实际的需要,地图构建与同步定位(SLAM)技术被人们提出并得到了广泛应用。

二、Pangolin

2.1 简介

Pangolin是一个轻量级的便携式快速开发库,用于管理OpenGL显示/交互和抽象视频输入。 它的核心是一个简单的OpenGl视口管理器,它可以帮助模块化3D可视化而又不增加其复杂性,并提供先进而直观的3D导航处理程序。 Pangolin还提供了一种通过配置文件和ui集成来操纵程序变量的机制,并具有灵活的实时绘图仪,用于可视化图形数据。

Pangolin的精神是减少通常编写的可视化样板代码,以可视化并与(通常基于图像和3D的)系统进行交互,而不会影响性能。 它还为许多平台(包括Windows,Linux,OSX,Android和IOS)启用一次写入代码。
-Github

其源代码获取方式如下:

git clone https://github.com/stevenlovegrove/Pangolin.git

2.2 依赖项

2.2.1 必要依赖配置
  • C++11

  • OpenGL (Desktop / ES / ES2)

(lin) sudo apt install libgl1-mesa-dev
  • Glew
(win) built automatically (assuming git is on your path)
(deb) sudo apt install libglew-dev
(mac) sudo port install glew
  • CMake (for build environment)
(win平台) http://www.cmake.org/cmake/resources/software.html
(deb) sudo apt install cmake
(mac) sudo port install cmake
2.2.2 推荐的依赖配置
  • Python2 / Python3, for drop-down interactive console
(win) http://www.python.org/downloads/windows
(deb) sudo apt install libpython2.7-dev
(mac) preinstalled with osx
(for pybind11) git submodule init && git submodule update
(useful modules) sudo python -mpip install numpy pyopengl Pillow pybind11
  • Wayland
pkg-config: sudo apt install pkg-config
Wayland and EGL:sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

2.3 编译安装

Linux平台下可以通过CMake在目录build中构建出,在shell(或使用GUI进行的等效操作)中执行如下指令:

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .

如果需要生成文档,先确保已经安装了Doxygen,然后执行:

cmake --build . --target pangolin_doc

官方的提示:

在Windows上,Pangolin将尝试自动下载并构建glew,libjpeg,libpng和zlib。 这样做是假设git在路径上可用-对于通过github上的zip文件下载了Pangolin的Windows用户,有可能是错误的。 这就需要您将手动下载和编译依赖项,并将这些库的BUILD_EXTERN_(lib)选项设置为false。 另一种推荐的方法是从其提供的控制台中安装gitbash并进行工作。

三、编译构建ORB-SLAM2

本文所用的ORB-SLAM2算法来源于XTDrone平台,如有其他来源请自行配置。

cp -r ~/XTDrone/sensing/slam/vslam/ORB_SLAM2/ ~/catkin_ws/src/
mkdir ~/catkin_ws/scripts/
cp ~/catkin_ws/src/ORB_SLAM2/xtdrone* ~/catkin_ws/scripts/
cd ~/catkin_ws/src/ORB_SLAM2
chmod +x build.sh
./build.sh
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
chmod +x build_ros.sh
./build_ros.sh

官方说明:

该ORBSLAM2是在原版本基础上略做修改,其虽然支持ROS,但不是标准的ROS架构,因此不能采用catkin build编译。

  • 以上代码默认发布的话题是给iris_0的提供位姿,如果是给别的机器提供,需要修改代码,再重新编译,修改的方式如下:
# 1.打开.cc文件
vi ~/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/src/ros_stereo.cc

# 2.找到类似的话题指令,将iris_0修改成目标机器代码
ros::Publisher pose_pub = nh.advertise<geometry_msgs::PoseStamped>("/iris_0/mavros/vision_pose/pose", 100);

四、启动Gazebo仿真

4.1 启动PX4仿真,以indoor1.launch为例,其余场景同理:

cd PX4_Firmware
roslaunch px4 indoor1.launch

4.2 打开新terminal,启动ORBSLAM2:

cd ~//catkin_ws/src/ORB_SLAM2
sh xtdrone_run_stereo.sh

视觉定位信息就通过mavros发到PX4,可以在PX4仿真终端看到相关信息(步骤 4.1)

注意,此步骤XTDrone给的路径操作在我本机上是不相同的,不知道是否为个例,启动时需要注意自己的启动脚本所在位置:

cd ~/catkin_ws/scripts/
sh xtdrone_run_stereo.sh

如何确定自己的路径呢?正确的路经包含的文件如下,可以参考:

ganahe@ganahe-Nitro-AN515-51:~/catkin_ws/src/ORB_SLAM2$ ls -lath
total 684K
-rw-r--r--  1 ganahe ganahe 431K 3月  14 15:52 FrameTrajectory_KITTI_Format.txt
-rw-r--r--  1 ganahe ganahe 115K 3月  14 15:52 FrameTrajectory_TUM_Format.txt
-rw-r--r--  1 ganahe ganahe 1.7K 3月  14 15:52 KeyFrameTrajectory_TUM_Format.txt
drwxr-xr-x 10 ganahe ganahe 4.0K 3月  14 00:36 .
drwxr-xr-x  2 ganahe ganahe 4.0K 3月  14 00:12 lib
drwxr-xr-x  3 ganahe ganahe 4.0K 3月  14 00:10 build
drwxr-xr-x  2 ganahe ganahe 4.0K 3月  14 00:10 Vocabulary
-rw-r--r--  1 ganahe ganahe   81 3月  14 00:09 xtdrone_run_stereo.sh
-rw-r--r--  1 ganahe ganahe   73 3月  14 00:09 xtdrone_run_rgbd.sh
-rw-r--r--  1 ganahe ganahe   69 3月  14 00:09 log.sh
-rw-r--r--  1 ganahe ganahe   78 3月  14 00:09 run_euroc.sh
-rwxr-xr-x  1 ganahe ganahe  116 3月  14 00:09 build_ros.sh
-rwxr-xr-x  1 ganahe ganahe  479 3月  14 00:09 build.sh
-rw-r--r--  1 ganahe ganahe  35K 3月  14 00:09 License-gpl.txt
-rw-r--r--  1 ganahe ganahe  447 3月  14 00:09 LICENSE.txt
-rw-r--r--  1 ganahe ganahe  14K 3月  14 00:09 README.md
-rw-r--r--  1 ganahe ganahe 2.9K 3月  14 00:09 CMakeLists.txt
-rw-r--r--  1 ganahe ganahe 1.8K 3月  14 00:09 Dependencies.md
-rw-r--r--  1 ganahe ganahe  552 3月  14 00:09 .gitignore
drwxr-xr-x  2 ganahe ganahe 4.0K 3月  13 16:58 src
drwxr-xr-x  2 ganahe ganahe 4.0K 3月  13 16:58 include
drwxr-xr-x  2 ganahe ganahe 4.0K 3月  13 16:58 cmake_modules
drwxr-xr-x  4 ganahe ganahe 4.0K 3月  13 16:58 Thirdparty
drwxr-xr-x  6 ganahe ganahe 4.0K 3月  13 16:58 Examples
drwxr-xr-x  3 ganahe ganahe 4.0K 3月  13 16:58 ..

4.3 打开新的终端,建立键盘与Px4的通信:

cd ~/XTDrone/communication
python multirotor_communication.py iris 0

4.4 建立通信后,启动键盘控制无人机飞行查看效果:

cd ~/XTDrone/control/keyboard
python multirotor_keyboard_control.py iris 1 vel

1

2

img-kTLvHsDr-1616746407748

原文直达链接🔗:https://dgzc.ganahe.top/ganahe/2021/wrjzzdhogfzhjxds.html

参考文献

[1]stevenlovegrove/Pangolin from Github
[2]肖昆 / XTDrone from gitee
[3]视觉SLAM

  • 3
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: Vi-ORB-SLAM2是一种视觉惯性(VI)同时定位与地图构建(SLAM)系统,用于无人机和移动机器人的自主导航。它融合了惯性测量单元(IMU)和摄像头信息,通过实时跟踪相机的位置和姿态来构建地图和定位机器人。 Vi-ORB-SLAM2采用了ORB特征描述子和FAST角点特征,以实时地提取和匹配特征点。它利用相机的运动估计来排除误匹配的特征点,从而提高了对动态环境的鲁棒性。 Vi-ORB-SLAM2使用基于滤波器的方法来融合IMU和视觉数据。通过IMU的角速度和加速度数据,可以估计相机的运动和姿态,并根据视觉测量来校准IMU的漂移。这种融合可以提高系统的鲁棒性和精确性,特别是在存在相机运动模糊或视觉信息缺失的情况下。 Vi-ORB-SLAM2还具有回环检测和优化的能力,可以在长时间的导航中自动修正漂移误差。它采用词袋模型来建立地图和检测回环,通过优化相机和地图的位姿关系来实现全局一致性。 Vi-ORB-SLAM2已经在无人机和移动机器人的多个实验平台上进行了验证,并取得了令人满意的性能。它在实时性和精确性方面都有不错的表现,并且相对于传统的视觉SLAM系统更具鲁棒性。 综上所述,Vi-ORB-SLAM2是一种基于视觉惯性融合的SLAM系统,具有鲁棒性、精确性和实时性的优势,适用于无人机和移动机器人的自主导航。 ### 回答2: vi-orb-slam2是一种基于视觉的实时单目SLAM(Simultaneous Localization and Mapping)系统。SLAM是一种能够同时估计相机位姿和环境的三维地图的技术。vi-orb-slam2采用单个摄像头进行定位和地图构建。 vi-orb-slam2使用了一种双目VO(Visual Odometry)和ORB特征的融合方法。VO方法通过连续帧之间的图像匹配和运动估计来计算相机的运动轨迹。ORB特征是一种高效的特征提取算法,它可以在快速实时的情况下提取和匹配特征点。 vi-orb-slam2通过在VO方法中引入ORB特征,进一步提高了系统的鲁棒性和准确性。ORB特征具有自适应的尺度和旋转不变性,可以应对不同尺度和姿态变化的场景。此外,ORB特征的计算效率也很高,可以实现实时的图像处理和跟踪。 vi-orb-slam2在实际应用中具有广泛的应用前景。它可以用于室内导航、增强现实、机器人自主导航等领域。通过实时地建立环境地图和同时估计相机的位姿,vi-orb-slam2可以帮助机器人或者无人机在未知环境中进行自主导航和定位。同时,vi-orb-slam2的实时性和高效性也使得它可以应用于实时监控、虚拟现实等实时场景中。 总的来说,vi-orb-slam2是一种高效、鲁棒和实时的单目SLAM系统,具有广泛的应用前景,可以在多个领域中实现定位和地图构建的任务。 ### 回答3: vi-orb-slam2 是一种基于视觉和惯性传感器数据的实时单目SLAM(Simultaneous Localization and Mapping)系统。SLAM是一种同时利用感知和定位能力,实时构建环境地图并实现自我定位的技术。 vi-orb-slam2利用摄像头和惯性测量单元(IMU)融合数据,可以在没有GPS信号的情况下,实时地建立并更新环境地图,并估计自身相对于地图的位置和姿态信息。 其中,ORB指的是Oriented FAST and Rotated BRIEF,是一种特征检测和描述子提取算法,可以快速地检测和描述图像中的特征点。SLAM系统通过ORB算法提取图像关键点,并利用这些特征点进行特征匹配,从而实现环境地图的构建和定位过程。 vi-orb-slam2还利用IMU的数据,并将其与视觉数据进行融合,从而提高系统的稳定性和鲁棒性。IMU可以提供姿态和加速度信息,用于补偿视觉数据中的相机运动误差,进一步提高SLAM系统的定位精度和鲁棒性。 vi-orb-slam2具有实时性能,可以在实时视频流上运行,并实时地估计相机的位姿。这使得vi-orb-slam2在许多应用中具有广泛的应用前景,例如机器人导航、增强现实和虚拟现实等领域。 总之,vi-orb-slam2是一种基于视觉和惯性传感器的实时单目SLAM系统,通过视觉特征匹配和IMU数据融合,实现了环境地图的构建和自我定位。它具有实时性能和鲁棒性,适用于多种应用场景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值