飞控开发笔记:PIXHAWK App分析

新坑

终于下定决心重新写掉飞控了,fork了pixhawk。删掉了除驱动和姿态,位置确定以外的绝大部分模块。

前行的道路是艰难的,想做一个好的飞控需要太多各学科知识,在这里开坑做笔记,争取在年底结束前作出一个雏形。

从启动看onboard app

首先从PIXHAWK的启动脚本谈起。

PIXHAWK采用了nuttx作为自己的操作系统,其脚本类似于sh,很好懂 ,我这里仅仅对昨天的结果做一个小小的总结

首先 pix在启动之初会看是否存在sdcard的配置文件,如果存在的话以之为替代,否则启动autostart

autostart分析

系统级别启动项

autostart的功能包括以下几部分,首先是一些系统级别的模块

sercon

# Try to get an USB console
nshterm /dev/ttyACM0 &

#
# Start the ORB (first app to start)
#
uorb start

还有参数服务器,led,和一些芯片

set PARAM_FILE /fs/microsd/params
if mtd start
then
    set PARAM_FILE /fs/mtd_params
fi

param select $PARAM_FILE
if param load
then
    echo "[param] Loaded: $PARAM_FILE"
else
    echo "[param] FAILED loading $PARAM_FILE"
    if param reset
    then
    fi
fi

#
# Start system state indicator
#
if rgbled start
then
else
    if blinkm start
    then
        blinkm systemstate
    fi
fi

if pca8574 start
then
fi

关键程序

选择输出的器件,即是以px4io输出还是fmu本身,考虑到未来自己打板子,肯定是io,所以我直接去掉了亢余部分

然后autostart会依次启动一些关键程序,包括:

  • dataman (data manager app)
  • commander
  • mavlink
  • uavcan
  • gps
  • sensors
  • logging

App级别启动

然后根据飞机类型选择对应的专有启动脚本,另外,会加载一个interface文件

这个文件的关键部分是

mixer load $OUTPUT_DEV $MIXER_FILE

也就是加载mixer,另外就是通过pwm这个app来设置pmw的输出状况

    pwm rate -c $PWM_OUTPUTS -r $PWM_RATE
    pwm disarmed -c $PWM_OUTPUTS -p $PWM_DISARMED
    pwm min -c $PWM_OUTPUTS -p $PWM_MIN
    pwm max -c $PWM_OUTPUTS -p $PWM_MAX
    pwm failsafe -d $OUTPUT_DEV $FAILSAFE

比如对于多旋翼系统,飞控会选择mc.apps 和mc.defaultes

#!nsh
#
# Standard apps for multirotors:
# att & pos estimator, att & pos control.
#

attitude_estimator_ekf start
#ekf_att_pos_estimator start
position_estimator_inav start

mc_att_control start
mc_pos_control start

这几个app的内容都很容易懂,就不废话了

最后还有一个玩意,那就是导航模块要被启动

navigator start

可以看到pixhawk的启动层次还是非常简单明了的,模块结构清晰,另一个就是发现

nshterm /dev/ttyACM0 &

是开机可以调节的,那么我们就可以愉快的换一个接口用数传在远程开term debug了!

“飞控开发笔记:PIXHAWK App分析”的5个回复

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注