基于F4/F7/H7飞控硬件和px4飞控固件的廉价自主无人机系统(2)- 外设和固件修改

1 篇文章 0 订阅

前言

为了实现自主飞行,无人机需要许多的感知设备,而F4/F7/H7所搭载的传感器都很有限,因此需要额外的外设。而外设也分为可以直接与飞控连接的以及无法与飞控连接的。本文主要解决如何在F4 pro V2飞控上挂载可与飞控连接的传感器设备,从而实现基于F4 pro V2飞控的基本自主飞行能力。


GPS及电子罗盘

之前讲过,F4飞控为了节省成本,默认是采用6轴IMU的,也就是3轴加速度和3轴角速度。且穿越机也没有必要配备gps和电子罗盘。

但为了实现无人机自主飞行,增加gps和电子罗盘是必要的。

本文推荐的是相对比较廉价的北天BN880,包含了GPS和电子罗盘。

BN880需要一个I2C和一个串口为F4飞控提供GPS和航向信息。本文为了实现在室内的自主飞行,将采用激光雷达提供主要的定位信息,因此将不会连接I2C,而仅仅连接电子罗盘,因此将只占用F4飞控的一个串口。


定高激光雷达

为了保证高度测量的准确性,解决气压计测量的误差,本文采用了北醒TF luna单点激光雷达。

TF luna的接口支持I2C和串口两种通信协议。本文采用的是串口通讯,根据上图,无需进行设置。

 px4固件默认只支持TF mini激光雷达,但两个激光雷达的通讯协议是一致的,因此可以通过在px4固件中开启TF mini模块来读取TF luna的机关数据。(下面会将如何开启)


固件修改

在默认的px4固件设置中,ominibus F4的设置是在PX4-Autopilot/boards/omnibus/f4sd文件夹下。

通过对default.px4board文件进行编辑,可实现使ominibus F4飞控包括必要的传感器。文件具体内容如下:

CONFIG_BOARD_TOOLCHAIN="arm-none-eabi"
CONFIG_BOARD_ARCHITECTURE="cortex-m4"
CONFIG_BOARD_CONSTRAINED_FLASH=y
CONFIG_BOARD_NO_HELP=y
CONFIG_BOARD_CONSTRAINED_MEMORY=y
CONFIG_DRIVERS_BAROMETER_BMP280=y
CONFIG_DRIVERS_IMU_INVENSENSE_ICM20608G=y
CONFIG_DRIVERS_MAGNETOMETER_HMC5883=y
CONFIG_DRIVERS_DISTANCE_SENSOR_TFMINI=y
CONFIG_DRIVERS_PWM_OUT=y
CONFIG_DRIVERS_RC_INPUT=y
CONFIG_MODULES_EKF2=y
CONFIG_MODULES_BATTERY_STATUS=y
CONFIG_MODULES_COMMANDER=y
CONFIG_MODULES_CONTROL_ALLOCATOR=y
CONFIG_MODULES_DATAMAN=y
CONFIG_MODULES_FLIGHT_MODE_MANAGER=y
CONFIG_MODULES_LAND_DETECTOR=y
CONFIG_MODULES_LOGGER=y
CONFIG_MODULES_MANUAL_CONTROL=y
CONFIG_MODULES_MAVLINK=y
CONFIG_MODULES_MC_ATT_CONTROL=y
CONFIG_MODULES_MC_POS_CONTROL=y
CONFIG_MODULES_MC_RATE_CONTROL=y
CONFIG_MODULES_NAVIGATOR=y
CONFIG_MODULES_RC_UPDATE=y
CONFIG_MODULES_SENSORS=y
CONFIG_SYSTEMCMDS_MIXER=y
CONFIG_SYSTEMCMDS_PARAM=y
CONFIG_SYSTEMCMDS_PWM=y

其中重点要看imu、magnetometer、distance sensor以及EKF2

其中imu要看所购买的飞控上搭载的具体IMU版本。我买的F4 pro V2采用的是ICM20608G。

magnetometer就是电子罗盘,北天的BN880采用的是HMC5883电子罗盘。

然后就是distance sensor,我们采用的是北醒TF luna,TF mini模块支持对该雷达的数据的读取。

最后是EKF2。PX4的F4固件默认采用的是LPE估计器,其不需要电子罗盘信息,也不支持对航向的估计。而EKF2则可以利用电子罗盘进行航向的估计。因此需开启,同时删除LPE的相关设置。


模块启动设置

在连接以上传感器后,还需对固件进行设置,以便启动对应的模块。

需要修改的文件为PX4-Autopilot/boards/omnibus/f4sd/init文件夹下的rc.board_defaults和rc.board_sensors这两个文件。

其中rc.board_defaults文件修改后如下:

#!/bin/sh
#
# board specific defaults
#------------------------------------------------------------------------------

param set-default BAT1_V_DIV 11.12
param set-default BAT1_A_PER_V 31

# system_power unavailable
param set-default CBRK_SUPPLY_CHK 894281

# Disable safety switch by default
param set-default CBRK_IO_SAFETY 22027

# use the Q attitude estimator, it works w/o mag or GPS.
param set-default SYS_MC_EST_GROUP 2
param set-default ATT_ACC_COMP 0
param set-default ATT_W_ACC 0.4000
param set-default ATT_W_GYRO_BIAS 0.0000

param set-default SYS_HAS_MAG 1

#mavlink boot_complete
mavlink start -d /dev/ttyACM0 -b 921600 -m normal -r 80000 

其中,SYS_MC_EST_GROUP为将固件设置为EKF2估计器;SYS_HAS_MAG为是否有电子罗盘。

本文为了实现顶层进行SLAM的任务计算机可以通过mavlink与F4飞控进行通讯,采用了将F4的飞控与任务计算机通过USB数据线进行连接,因此在上述文件中的修改为:

mavlink start -d /dev/ttyACM0 -b 921600 -m normal -r 80000 

这将默认在F4飞控上的ACM0(也就是mini USB口)启动mavlink,波特率为921600。

对rc.board_sensors文件修改后如下:

#!/bin/sh
#
# Omnibus F4SD specific board sensors init
#------------------------------------------------------------------------------

board_adc start

icm20608g -s -R 6 start
bmp280 -s start
tfmini start -d /dev/ttyS2

其中,icm20608g为启动imu模块,bmp280为启动气压及模块,tfmini为启动定高雷达模块。


小结

经过以上的修改后,px4的固件将支持我们为实现自动飞行所添加的传感器,并可实现与任务计算机的通讯。具体的编译方法上一篇文章已经提过,仅须根据具体的飞控硬件修改以上三个文件,既可实现F4固件的编译和上传。

下一篇将具体讲解QGroundControl里对F4飞控的设置,并测试相关的传感器。


基于F4/F7/H7飞控硬件和px4飞控固件的廉价自主无人机

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值