ArduPilot-3-支持新的控制器硬件
在上一篇文章中,我们分享了PX4-20-支持新的控制器硬件,这一篇我们讲一下ardupilot中如何支持一款新的硬件。ardupilot同样支持非常丰富的硬件,种类上包括Cotex-M内核的单片机、Linux以及ESP32,这里我们主要分享使用Cotex-M内核单片机的飞控硬件的支持。
ardupilot采用硬件抽象层(HAL)的方式,支持各种类型的硬件,其框架如下图所示:
由上图可以发现,ardupilot应用层通过统一的HAL接口访问不同的OS以及对应的硬件。
AP_HAL提供了各种外设接口的抽象类(串口、IIC、SPI、CAN、PWM、SD等)、任务调度抽象类(Scheduler)。
对于Cotex-M内核单片机的飞控硬件,ardupilot使用的是AP_HAL_ChibiOS硬件抽象层,使用ChibiOS RTOS。
与PX4相比,ardupilot增加新的硬件还会更加方便一些,基本只需要编辑一个文件,在libraries/AP_HAL_ChibiOS/hwdef目录下可以看到ardupilot目前支持的各种硬件,如
.
├── Pixhawk1
├── Pixhawk1-1M
├── Pixhawk1-1M-bdshot
├── Pixhawk4
├── Pixhawk4-bdshot
├── Pixhawk5X
├── Pixhawk6C
├── Pixhawk6C-bdshot
├── Pixhawk6X
在具体的硬件配置文件夹中,主要是hwdef.dat文件,在这里定义飞控硬件的所有外设接口定义。
hwdef.dat在编译时由libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py脚本,生成build/xxx/hwdef.h头文件,该头文件定义了源码中需要使用的所有宏定义,实现对源码编译规则和运行规则的控制。
由于ardupilot chibios_hwdef.py脚本非常好的抽象设计,用户编辑hwdef.dat定制飞控硬件变得非常简单。
# MCU class and specific type
MCU STM32H7xx STM32H743xx
# flash size
FLASH_SIZE_KB 2048
# order of UARTs (and USB)
SERIAL_ORDER OTG1 UART7 UART5 USART1 UART8 USART2 USART3 OTG2
# USB
PA11 OTG_FS_DM OTG1
PA12 OTG_FS_DP OTG1
PA9 VBUS INPUT OPENDRAIN
# telem1
PE8UART7_TX UART7
PE7UART7_RX UART7
PE9UART7_RTS UART7
PE10 UART7_CTS UART7
# barometers
BARO MS56XX I2C:0:0x76
BARO MS56XX I2C:0:0x77
BARO BMP388 I2C:0:0x77
# SPI devices
SPIDEV bmi055_g SPI1 DEVID1BMI055_G_CSMODE3 10*MHZ 10*MHZ
SPIDEV bmi055_a SPI1 DEVID2BMI055_A_CSMODE3 10*MHZ 10*MHZ
SPIDEV icm42688 SPI1 DEVID3ICM42688_CSMODE32*MHZ8*MHZ
SPIDEV ramtronSPI2 DEVID1FRAM_CS MODE38*MHZ8*MHZ
我们通过几个语句可以发现,hwdef.dat语法非常简单,IO的配置只需要直接指定外设使用的IO,传感器的配置只需要指定使用的IIC或者SPI和简单的配置即可。
hwdef.dat更多的语法这里不一一展开,感兴趣的同学可以自己动手实现一个飞控硬件,亲手配置一下。
下图是笔者设计的一款飞控硬件,通过上述修改即可使ardupilot支持该款硬件。
往期分享:
PX4-20-支持新的控制器硬件
ArduPilot-2-系统架构
AcmeGCS-21-集群多窗口显示
这里会不定期更新一些我整理的无人机相关知识,如果对您有帮助,欢迎关注转发分享。
页:
[1]