【无人机自主导航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
原文直达链接
【无人机自主导航3-ORB-SLAM2】Gazebo仿真环境下的视觉SLAM相关推荐
- ROS开发笔记(5)——基于 python 开发 Turtlebot3 Gazebo仿真环境下键盘操控移动机器人(Teleop-bot )
前文中记录了随机移动机器人的开发过程,本文内容为Turtlebot3 Gazebo仿真环境下Teleop-bot 键盘操控移动机器人,主要包含以下几个部分: 1.键盘驱动(按键驱动发布keys话题) ...
- UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)
简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程(眼在手上). 准备相关文件 # UR5 git clone https://github.com/Uni ...
- 视觉学习笔记Week9 Gazebo仿真环境下相机焦距计算
第九周 仿真环境下相机焦距计算 这周更新了曲线,按照嘉元和建荣的新曲线,落点应在TR后方一个车身位左右,速度和效率以及容错率可以达到比较好的状态. 焦距计算: ...
- 计算机视觉与深度学习 | 城市拒止环境下的视觉SLAM
================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...
- 如何生成gazebo仿真环境的二维地图真值
在移动机器人仿真中,二维地图真值可以用来评价slam建图结果,也可以直接给路径规划算法提供输入. 利用gazebo进行仿真时,有很多方法都可以获取静态仿真环境的二维地图真值,本文将对以下链接: hyf ...
- 机器人SLAM与自主导航——(四)Gazebo仿真机器人导航
(1)创建launch文件 启动Gazebo仿真环境: mrobot_gazebo/launch/mrobot_laser_nav_gazebo.launch 启动move_base导航功能节点: m ...
- ROS功能包|mav_control_rw(基于MPC的无人机轨迹跟踪控制)---gazebo仿真测试
ROS功能包|mav_control_rw(基于MPC的无人机轨迹跟踪控制)---gazebo仿真测试 gazebo仿真测试 gazebo仿真测试 启动gazebo并加载无人机模型 $ roslaun ...
- 【Autoware入门教程】如何在Gazebo仿真环境配置自动驾驶汽车
假设你已经安装好了Autoware,Autoware源码中其实已经配置有Gazebo仿真环境,当然你也可以根据自己的需要另外下载自动驾驶汽车的仿真模型.该汽车模型已经默认配置好了Velodyne HD ...
- gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器
gazebo仿真环境中添加robotiq 2f 140的gripper_controller控制器 搭建环境: ubuntu: 20.04 ros: Nonetic sensor: robotiq_f ...
最新文章
- c语言函数调用编译等腰三角形,C语言如何输出带“*”的等腰三角形? – 手机爱问...
- tp设置打印机虚拟服务器,tp打印机服务器设置
- 【剑指Offer学习】【全部面试题汇总】
- 文化氛围对新人培养新人的影响
- Hystrix文档-实现原理
- [C++ STL] 各容器简单介绍
- SAP CRM BOL attribute_ref的merge逻辑调试
- WINCE驱动程序快速入门
- Grub 之常用命令和Windows引导修复(二)
- 金属网材质贴图素材推荐 精品 小众
- 数学建模国赛-2015A太阳影子定位再研究(未完)
- 如何在地址栏显示图标
- 移动端Web组件-Dialog对话框
- javascript自定义浏览器右键菜单
- 家庭收支记账软件项目【Golang-面向对象】
- VMC(VMware on AWS)分析
- JS请求服务器gbk文件乱码问题
- CTF中遇到不知道文件类型_在营销界碰到网易,你永远不知道会遇到什么惊喜……...
- MATLAB(七)影像处理(1)
- Android系统10 RK3399 init进程启动(十五) 配置新产品
热门文章
- 开环传递函数频率特性
- Python Web 开发 – 在线web计算器
- debain系统code-server云IDE开机启动脚本
- 【IoT】STM32Fxxx 上移植 Huawei LiteOS
- 74160同步置数法接成同步四进制计数器
- 使用nexus 6P同时获取CSI和RSSI数据(保姆级教程)
- 云原生|kubernetes|解决kube-proxy报错:Not using `--random-fully` in the MASQUERADE rule for iptables
- 右键菜单变窄-桌面右键取消pycharm
- WordPress主题制作进阶#10自定义主页
- matlab带未知数的劳斯判据,自动控制原理实验用Matlab软件编制劳斯判据程序并解题(《学习辅导》例435).doc...