一、背景
无人机的自主导航需要无人机的位置信息、姿态等,在空旷的室外环境,一般需要基于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用户,有可能是错误的。 这就需要您将手动下载和编译依赖项,并将这些库的BUILDEXTERN(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
参考文献
[1]stevenlovegrove/Pangolin from Github
[2]肖昆 / XTDrone from gitee
[3]视觉SLAM
Comments 2 条评论
博主 X.I__StrOng
您好
cp -r ~/XTDrone/sensing/slam/vslam/ORB_SLAM2/ ~/catkin_ws/src/
这一步之前有什么工作呀 找不到文件目录
博主 GanAHE
@X.I__StrOng 可能原因:
1.你没有拉取XTDrone仓库代码或文件缺失;
2.你路径不对;
3.没有创建~/catkin_ws/src/路径