新坑
终于下定决心重新写掉飞控了,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了!
nice&mark一下
赞一个。内部运行的描述很不错
很好的blog,加油!
希望搞个二次开发环境的搭建教程,按官网的搭建了好多次,都是不成功
不错,同问:希望搞个二次开发环境的搭建教程,按官网的搭建了好多次,都是不成功