赞
踩
为了实现自主飞行,无人机需要许多的感知设备,而F4/F7/H7所搭载的传感器都很有限,因此需要额外的外设。而外设也分为可以直接与飞控连接的以及无法与飞控连接的。本文主要解决如何在F4 pro V2飞控上挂载可与飞控连接的传感器设备,从而实现基于F4 pro V2飞控的基本自主飞行能力。
之前讲过,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飞控固件的廉价自主无人机
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。