资讯详情

Part 3: 在无 GPS 环境下通过 SLAM 实现位置估计(基于纯视觉的 SLAM 定点,无需激光光流等传感器)

摘自:http://shequ.dimianzhan.com/articles/376

我认为智能无人机课程应该有参考

无人机自动驾驶系列 Part 3: 在无 GPS 环境下通过 SLAM 实现位置估计(基于纯视觉) SLAM 不需要激光光流等传感器)

1年前 ? 3891 ? 1 ? 0

在这门课上,我们将解释如何通过SLAM(Simultaneous localization and mapping, 实现无实时定位和GPS估计无人机在环境中的位置。中国首发地面站社区。 项目地址:https://github.com/generalized-intelligence/GAAS#

请注意,如果您不确定,我们建议您不要轻易进行实机测试。测试时,请保持距离,注意安全。虽然本课程的内容可以在室内外使用,但我们建议您先在室外空进行测试。 我们已经推出了开发者套件,并且可以预装 GAAS 以及 Mavros。您可以自己搭配,也可以选择我们为您组合的开发平台:https://item.taobao.com/item.htm?id=591140560551 购买时留言「地面站社区」可享受 200 元优惠。 GPS 它可以为无人机提供更准确的位置信息,但有时可能没有 GPS 信号,或者 GPS 信号不够稳定;比如桥下,室内和高楼林立的城市。因此,为了允许无人机在这些环境中飞行,我们需要提供其他位置估计,例如SLAM。SLAM以摄像头为主要传感器,传感器可以是单目摄像头、双目摄像头和RGBD深度摄像头。这些相机有相应的优缺点;例如,虽然单目相机价格低,体积小,但需要其他传感器的辅助,否则无法计算环境深度,无法计算SLAM提供规模信息;双目摄像头可以通过三角测量提供景深,但计算量大,需要很好的校准;RGBD深度相机可主动测距,但对环境敏感,测距有限,噪音大,同时,阳光和玻璃不能正常工作。本讲我们将使用基于双目的SLAM为PX4提供位置估计,实现无GPS定点飞行在环境中。 通过实机测试,本讲座可以实现相对稳定的定点,但仍有很大的优化空间。如果你不确定,我不建议实机测试,因为当SLAM信号中断时会有潜在危险。本讲中的内容会通过Gazebo但是实机上的设置方法也很相似。 本讲内容可分为三部分:

  • 环境更新与设置;
  • SLAM及使用;
  • Gazebo验证。

如果你完成了前两个讲座,你已经设置好了ROS,MAVROS,Gazebo,编译PX4固件。克隆现在通过以下命令GAAS到本地环境:git clone https://github.com/generalized-intelligence/GAAS 或通过以下命令更新GAAS:

cd (GAAS_PATH) git pull origin master

将ROS的launch文件拷贝到PX4相应文件夹内:cp -r (GAAS_PATH)/simulator/launch (PX4_FIRMWARE_PATH)/Firmware/launch GAAS使用的SLAM基于以下项目:https://github.com/gaoxiang12/ORB-YGZ-SLAM 在编译之前,请按照上述项目的描述进行安装:

Pangolin (for visualization): https://github.com/stevenlovegrove/Pangolin Eigen3: sudo apt-get install libeigen3-dev g2o: sudo apt-get install libcxsparse-dev libqt4-dev libcholmod3.0.6 libsuitesparse-dev qt4-qmake OpenCV: sudo apt-get install libopencv-dev glog (for logging): sudo apt-get install libgoogle-glog-dev

之后,安装DBoW3以及PCL,项目链接如下:

# 记得编译完make install  # PCL https://github.com/PointCloudLibrary/pcl  # DBoW3 https://github.com/rmsalinas/DBow3

完成后,通过以下命令编译SLAM:

cd (GAAS_PATH)/software/SLAM/ygz_slam_ros  # 编译过程较长,不建议在虚拟机中进行 sh generate.sh 

我们将使用它QGroundControl设置和检查无人机参数和状态。如果你使用它UBUNTU 16.可通过以下链接下载04:https://s3-us-west-2.amazonaws.com/qgroundcontrol/latest/QGroundControl.AppImage 下载后,通过以下命令打开:

chmod  x ./QGroundControl.AppImage ./QGroundControl.AppImage (或双击)

您还可以通过以下链接查看更多信息:https://docs.qgroundcontrol.com/en/getting_started/download_and_install.html 如果你已经成功编译了,ygz_slam_ros并且下载完QGroundControl,你可以继续下一部分。


在 ygz_slam_ros/examples你可以在文件夹中看到一个名字simulationCamera.yaml本文件是配置文件SLAM配置文件包含ROS的左右图像topic名称、相机内参和其他一些参数。部分内容如下:

%YAML:1.0  #-------------------------------------------------------------------------------------------- # Camera Parameters. Adjust them! #--------------------------------------------------------------------------------------------   # camera and imu topics Left: /gi/simulation/left/image_raw Right: /gi/simulation/right/image_raw  # not used for now Imu: /mavros/imu/data  # Camera calibration and distortion parameters (OpenCV)  # if running in pure stereo vision mode PureVisionMode: true  # do we need visualization? UseViewer: false  # display mappoints? displayMapPoints: false  Camera.fx: 376.0 Camera.fy: 376.0 Camera.cx: 376.0 Camera.cy: 240.0  Camera.k1: 0.0 Camera.k2: 0.0 Camera.p1: 0.0 Camera.p2: 0.0

如果您想测试您的相机,请更改相机topic,注意此时没有使用IMU而且这个项目还没有完成,就会出现不稳定。


现在让我们继续Gazebo仿真部分。 模拟环境首先通过以下命令打开:roslaunch px4 slam.launch 一个Gazebo窗户将打开,一个无人机会出现在一个开放的环境中。如果我在前几节课上反复强调,记得检查一下MAVROS连接:rostopic echo /mavros/state 确保输出结果为"connected: True"。 继续前,如果打开slam.launch您会发现以下参数:<arg name="vehicle" default="iris_stereo_gray_no_gps"/> 你可以看到我们使用它"iris_stereo_gray_no_gps" 无人机模型,我已经在这个模型中了GPS如果您现在通过以下命令打开模块QGroundControl:./QGroundControl.AppImage # if you downloaded AppImage QGroundControl 打开后会自动连接Gazebo同时,你可以在窗户里看到"No GPS Lock for Vehicle", 这代表无人机GPS我们将被禁用SLAM作为估计水平位置的手段。 接下来,打开SLAM:./bin/EurocStereoVIO_ros ./exampes/simulationCamera.yaml 在QGroundControl中,点击左上角的齿轮按钮,选择最下方的"Parameters", 在搜索栏里输入“vision”,将“EKF2_AID_MASK”的参数改为“vision position fusion",对应值为 “8”。点击“save”保存参数更改。 我们只会使用SLAM信息来估计水平位置移动,忽略SLAM的YAW信息以及高度信息,并且使用PX4的气压计作为定高手段。 接下来,点击“Clear”,选择“Tools”,选择“reboot vehicle”重启无人机,使参数设置生效。 在终端中,输入:rostopic echo /mavros/vision_pose/pose 你会看到当前的实时SLAM位置估计信息:

---
header: 
  seq: 1489
  stamp: 
    secs: 3453
    nsecs: 368000000
  frame_id: ''
pose: 
  position: 
    x: 0.000944685346145
    y: -0.00012923774903
    z: 0.000286279467091
  orientation: 
    x: 0.0
    y: 0.0
    z: 0.0
    w: 0.0
---

接下来,进入到“(GAAS_PATH)/demo/tutorial_3”文件夹,起飞无人机:python px4_mavros_run.py 待无人机悬停后,在另外一个终端,通过如下脚本控制无人机飞一个 3x3 米的正方形:python square.py 你可以看到无人机能够实现较为理想的位置估计,并且无人机可以依赖SLAM信息实现较为复杂的任务。 完成预定轨迹后,无人机会降落在地面上,你可以通过SLAM窗口实时观察运行轨迹。 以上内容在实机上进行过测试,但是表现不稳定,为了实现较为理想的效果,我们需要花费一定精力进行调参并改善SLAM效果。在实机测试过程中我们发现了如下问题: SLAM有时会出错并终止运行,此时无人机会跳到“ALTITUDE”模式; 有时会出现无人机漂移情况,尽管相关参数已经设定并且SLAM处于运行状态; 快速运动情况下定位精度不理想。 如果你想在实机上测试,典型过程如下:

  • 进行良好的摄像头标定;
  • 开启SLAM;
  • 启动MAVROS,确保连接正常;
  • 在QGroundControl中设置相关参数;
  • 确保 /mavros/local_position/pose 发布的位置信息是有“意义”的,此信息是飞控融合SLAM信息后的位置信息,如果xy方向的值处于 10^-20 的范围,那么此时的位置估计是没有意义的,你需要检查MAVROS连接,QGroundControl参数设定以及SLAM状态;
  • 通过遥控器起飞无人机后切换到定点模式,或者通过提供的python脚本起飞无人机。

    在Gazebo验证完成,以及在有合适场地前,不要盲目实机测试。

    总而言之,本讲中我们讲述了如何使用SLAM,如何通过QGroundControl设置参数,如何在Gazebo中进行无GPS环境下的无人机飞行控制并完成了一个简单任务。

项目地址:https://github.com/generalized-intelligence/GAAS#

凡在本教程出现的信息,均仅供参考。本教程将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性;任何实际机器测试前请尽可能多地进行测试,并对任何自主决定的行为负责。本教程对有关资料所引致的错误、不确或遗漏,概不负任何法律责任(包括侵权责任、合同责任和其它责任)。

标签: 300gi传感器px881

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台