使用PMW3901和VL53L1X 实现室内定点悬停

2023-05-16

使用PMW3901和VL53L1X 实现室内定点悬停

  • 使用PMW3901 光流传感器进行水平方向定位
    • Pixhawk连接PMW3901传感器
    • PX4源代码加入PMW3901驱动后重新编译
    • QGroundControl中的配置
  • 使用气压计和VL53L1X进行垂直方向定位
  • 使用QGroundControl调试

实现定点悬停,需要两个方向的传感器,水平方向和垂直方向。通常使用GPS进行水平方向定位,气压计进行垂直方向定位。但是因为室内没有GPS信号,所以水平方向需要使用光流传感器替代。

使用PMW3901 光流传感器进行水平方向定位

PX4源代码里已经有PMW3901的驱动程序,重新编译PX4源代码后就可以直接使用,无需另外开发,所以我们使用PMW3901替代GPS进行室内的水平定位。

Pixhawk连接PMW3901传感器

PixHawk和PMW3901传感器的接线如下:

Pixhawk SPI 接口 (从左到右)PMW3901 光流传感器
VCCVCC
SCKCLK
MISOMISO
MOSIMOSI
CS1无需连接
CS2CS
GNDGND

PX4源代码加入PMW3901驱动后重新编译

  1. Pixhawk飞控要求,使用光流传感器模块,需要Pixhawk支持2M内存,早期的Pixhawk 1仅有1M内存,Pixhawk 2以后的版本都有2M内存。
  2. 开发环境准备 ,准备一台装有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
  1. 编译代码并更新飞控固件
在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进行垂直方向定位

  1. PixHawk飞控自带气压计,不用单独设置,我们只需要增加VL53L1X模块即可,VL53L1X垂直向下安装
  2. 修改 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
  1. 使用QGroundControl连接PixHawk飞控,并且修改飞控参数。

修改参数SENS_EN_VL53L1X为1,使VL53L1X可用。
修改参数EKF2_HGT_MODE为0,EKF2_RNG_AID为enable,表示同时使用气压计和距离传感器VL53L1X测量垂直距离。

重启飞控使参数生效

使用QGroundControl调试

上述参数修改完成后,在QGroundControl中打开 Analyze | MAVLink Inspector 就可以看到光流传感器PMW3901和距离传感器VL53L1X的数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用PMW3901和VL53L1X 实现室内定点悬停 的相关文章

随机推荐

  • 【计算机视觉·OpenCV】使用Haar+Cascade实现人脸检测

    前言 人脸检测的目标是找出图像中所有的人脸对应的位置 xff0c 算法的输出是人脸的外接矩形在图像中的坐标 使用 haar 特征和 cascade 检测器进行人脸检测是一种传统的方式 xff0c 下面将给出利用 OpenCV 中的 haar
  • TX2查看设备信息命令汇总

    内存 free m 系统内核 uname a CPU信息 lscpu USB设备 lsusb CPU占用情况 sudo apt get install htop htop 查看cudnn版本 xff1a cat usr include cu
  • 蓝牙:蓝牙协议

    蓝牙协议学习整理 xff08 一 xff09 蓝牙的概述 转自 xff1a https blog csdn net guoxiaolongonly article details 78414870 传送门 xff1a xff08 一 xff
  • Thinkphp 6.0数据库的时间查询

    本节课我们要单独学习一下时间的所有查询方式 xff0c 包括传统式 快捷方式和固定查询等 一 xff0e 传统方式 1 可以使用 gt lt gt 61 lt 61 来筛选匹配时间的数据 xff1b Db name 39 user 39 g
  • Java中基本数据类型和包装类型的区别

    1 包装类是对象 xff0c 拥有方法和字段 xff0c 对象的调用都是通过引用对象的地址 xff1b 基本类型不是 2 包装类型是引用的传递 xff1b 基本类型是值的传递 3 声明方式不同 xff1a 基本数据类型不需要new关键字 x
  • git diff如何退出

    git diff 对比两次文件修改了什么 但如何退出呢 xff1f 按q即可
  • 数据结构,计算机网络,数据库,计算机组成原理,操作系统有哪些好的网课值得推荐?

    大家好 xff0c 我是小林哥 作为自学CS过来的老学长 xff0c 看过中国mooc b站 网易云课堂很多视频 xff0c 期间踩了不少坑 xff0c 这次掏心掏肺前来跟分享下 xff0c 网上的资源是免费的 xff0c 但是找到质量好的
  • MATLAB中im2bw函数-将图像转换为二值图像

    matlab中DIP工具箱函数im2bw使用阈值 xff08 threshold xff09 变换法把灰度图像 xff08 grayscale image xff09 转换成二值图像 所谓二值图像 xff0c 一般意义上是指只有纯黑 xff
  • Ubuntu18.04使用RPLIDAR A2M12雷达出错的解决办法

    最近领导要我用A2M12雷达搞SLAM xff0c 但是用电脑连上这个雷达捣鼓了两三天才能够拿到数据 就把踩的坑记录一下 软硬件平台 Nvidia Jetson Nano xff08 4GB版本的 xff09 Ubuntu 18 04 报错
  • workerman 连接失败可能的原因

    刚开始使用workerman时很常见的一个问题是客户端连接服务端失败 原因一般如下 xff1a 1 服务器防火墙 包括云服务器安全组 阻止了连接 xff08 50 几率是这个 xff09 2 客户端和服务端使用的协议不一致 xff08 30
  • 排序算法:冒泡排序和选择排序的思路,区别与优缺点。

    一 xff0c 冒泡排序 xff1a 冒泡排序的定义就不提了 xff0c 总结起来就一句话 xff08 划重点 xff09 xff1a xff0c 从左到右 xff0c 数组中相邻的两个元素进行比较 xff0c 将较大的放到后面 算法思路
  • ROS创建功能包并自定义消息

    ROS有时需要自定义消息 xff0c 本文叙述如何通过创建功能包并自定义消息 创建ROS工作空间具体实现 xff1a https blog csdn net qq 34911636 article details 100103448 创建一
  • 卡尔曼滤波详细推导

    卡尔曼滤波 xff08 Kalman filtering xff09 是一种利用线性系统状态方程 xff0c 通过系统输入输出观测数据 xff0c 对系统状态进行最优估计的算法 xff0c 由于观测数据中包括系统中的噪声和干扰的影响 xff
  • ROS tf工具与消息查看命令

    TF工具坐标系统是一个基础理论 xff0c 但是涉及到多个空间的变换 xff0c 不容易进行想象所以TF工具给开发者调试提供很多方便 1 tf monitor xff1a 将当前的坐标系转换关系打印到终端控制台 rosrun tf tf m
  • melodic 打开gazebo出现[Err] [REST.cc:205] Error in REST request错误解决方法

    ROS melodic版本下打开gazebo出现 Err REST cc 205 Error in REST request错误解决方法 输入以下命令打开文件 sudo gedit ignition fuel config yaml 然后将
  • 技术资源汇总(一)

    1 Ubuntu技术论坛 xff1a https askubuntu com 2 树莓派资源 https www yahboom com study raspberry3B 密码 xff1a cf0p 汇总资料提取码 xff1a hdy7
  • docker常用命令

    1 配置docker阿里云镜像 1 打开daemon json文件 xff08 若没有此文件 xff0c 则创建 etc docker daemon json xff09 xff1a vi etc docker daemon json 2
  • 网络调试助手UDP广播问题

    用直接广播地址 xff08 192 168 xxx 255 端口 xff09 可以进行广播 xff1b 用受限广播地址 xff08 255 255 255 255 端口 xff09 显示没有指定有效的远程主机端口 xff0c 搞了好久发现是
  • “平衡小车之家”家的STM32F103最小系统源代码分享

    在网上寻找了好久 xff0c 因为他家的开发板自带有mpu6050模块 故想测试其精准度以及z轴漂移程度 发现也有很大的漂移 代码如下 main c部分 xff1a span class token macro property span
  • 使用PMW3901和VL53L1X 实现室内定点悬停

    使用PMW3901和VL53L1X 实现室内定点悬停 使用PMW3901 光流传感器进行水平方向定位Pixhawk连接PMW3901传感器PX4源代码加入PMW3901驱动后重新编译QGroundControl中的配置 使用气压计和VL53