实现定点悬停,需要两个方向的传感器,水平方向和垂直方向。通常使用GPS进行水平方向定位,气压计进行垂直方向定位。但是因为室内没有GPS信号,所以水平方向需要使用光流传感器替代。
使用PMW3901 光流传感器进行水平方向定位
PX4源代码里已经有PMW3901的驱动程序,重新编译PX4源代码后就可以直接使用,无需另外开发,所以我们使用PMW3901替代GPS进行室内的水平定位。
Pixhawk连接PMW3901传感器
PixHawk和PMW3901传感器的接线如下:
Pixhawk SPI 接口 (从左到右) | PMW3901 光流传感器 |
---|---|
VCC | VCC |
SCK | CLK |
MISO | MISO |
MOSI | MOSI |
CS1 | 无需连接 |
CS2 | CS |
GND | GND |
PX4源代码加入PMW3901驱动后重新编译
- Pixhawk飞控要求,使用光流传感器模块,需要Pixhawk支持2M内存,早期的Pixhawk 1仅有1M内存,Pixhawk 2以后的版本都有2M内存。
-
开发环境准备 ,准备一台装有Ubuntu Linux LTS 18.04 (Bionic Beaver)操作系统的PC。
我们使用PX4 1.11版本的源代码。
下载PX4源代码
$ cd ~/
$ git clone https://github.com/PX4/PX4-Autopilot.git --recursive
$ git submodule update --init --recursive
$ git checkout v1.11.3
$ make distclean
执行开发环境初始化脚本
$ bash ./PX4-Autopilot/Tools/setup/ubuntu.sh
检查是否初始化成功
$ arm-none-eabi-gcc --version
有如下显示,表示初始化成功
arm-none-eabi-gcc (GNU Tools for Arm Embedded Processors 7-2017-q4-major) 7.2.1 20170904 (release) [ARM/embedded-7-branch revision 255204]
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
重启PC,完成初始化。
重启后安装ROS。注意一下,raw.githubusercontent.com 需要翻墙才能访问到。
下载安装脚本
$ wget https://raw.githubusercontent.com/PX4/Devguide/master/build_scripts/ubuntu_sim_ros_melodic.sh
执行脚本
$ bash ubuntu_sim_ros_melodic.sh
把PMW3901模块的驱动加入到代码编译中。
打开 fmu-v3中的default.cmake配置文件
$ cd ~/PX4-Autopilot/boards/px4/fmu-v3/
$ vim default.cmake
找到DRIVES下面的optical_flow,把这行前面的#去掉,并且修改为optical_flow/pmw3901
DRIVERS
#optical_flow # all available optical flow drivers
optical_flow/pmw3901
- 编译代码并更新飞控固件
在PC开发机上
$ cd ~/PX4-Autopilot
$ make px4_fmu-v3_default
使用USB连接PC开发机到PixHawk飞控
$ make px4_fmu-v4_default upload
有如下显示表示,固件更新成功
Erase : [====================] 100.0%
Program: [====================] 100.0%
Verify : [====================] 100.0%
Rebooting.
[100%] Built target upload
编译中可能会遇到的错误以及解决方案
- 一般的错误,可以尝试清理环境后重新编译
$ cd ~/PX4-Autopilot
$ git submodule update --recursive
$ make distclean
$ make px4_fmu-v3_default
$ make px4_fmu-v4_default upload
- Flash overflowed by XXX bytes,可能是Pixhawk飞控内存只有1M可见,此时需要更新飞控的BootLoader,让2M内存全部可用。可以参考官网说明。《使用 QGroundControl 地面站更新 PixHawk飞控的Bootloader》
QGroundControl中的配置
使用QGroundControl连接PixHawk飞控,并且修改飞控参数。
- 修改SENS_EN_PMW3901为1,使传感器可用
- 修改 EKF2_AID_MASK为3,当GPS不可用时,自动使用PMW3901光流传感器进行水平位置定位
- 修改SENS_FLOW_ROT,根据传感器的水平方向相对于飞控的角度,传感器垂直方向向下
- 修改EKF2_OF_POS_X,EKF2_OF_POS_Y,EKF2_OF_POS_Z的参数,根据传感器相对于飞行器重心的位置
重启飞控使参数生效
使用气压计和VL53L1X进行垂直方向定位
- PixHawk飞控自带气压计,不用单独设置,我们只需要增加VL53L1X模块即可,VL53L1X垂直向下安装
- 修改 fmu-v3中的default.cmake配置文件
打开 fmu-v3中的default.cmake配置文件
$ cd ~/PX4-Autopilot/boards/px4/fmu-v3/
$ vim default.cmake
找到DRIVES下面的distance_sensor,把这行前面的#去掉,并且修改为distance_sensor/VL53L1X
DRIVERS
#distance_sensor # all available distance sensor drivers
distance_sensor/VL53L1X
重新编译,并且更新PixHawk的固件
在PC开发机上
$ cd ~/PX4-Autopilot
$ make px4_fmu-v3_default
使用USB连接PC开发机到PixHawk飞控
$ make px4_fmu-v4_default upload
有如下显示表示,固件更新成功
Erase : [====================] 100.0%
Program: [====================] 100.0%
Verify : [====================] 100.0%
Rebooting.
[100%] Built target upload
- 使用QGroundControl连接PixHawk飞控,并且修改飞控参数。
修改参数SENS_EN_VL53L1X为1,使VL53L1X可用。
修改参数EKF2_HGT_MODE为0,EKF2_RNG_AID为enable,表示同时使用气压计和距离传感器VL53L1X测量垂直距离。
重启飞控使参数生效
使用QGroundControl调试
上述参数修改完成后,在QGroundControl中打开 Analyze | MAVLink Inspector 就可以看到光流传感器PMW3901和距离传感器VL53L1X的数据。