PX4的应用
- 程序入口为 程序名_main(int argc, char *argv[])这里实现应用参数。
- 主循环函数在
task_main(int argc, char *argv[])
thread_main(int argc, char *argv[])等函数中。 - 主循环函数通过
orb_subscribe(const struct orb_metadata *meta, const void *data)
orb_check(int handle, bool *updated)
orb_copy(const struct orb_metadata *meta, int handle, void *buffer)
获取系统中的应用消息机身的状态消息。
orb_advertise(const struct orb_metadata *meta, const void *data)
orb_publish(const struct orb_metadata *meta, orb_advert_t handle, const void *data)
发布消息。
控制程序 commander
commander功能:
1. 遥控,地面站(mavlink)对飞机模式的控制。
2. 校准程序启动
3. 报警器和 rgbled灯的控制
src/modules/commander/commander.cpp
- commander_main(int argc, char *argv[])
“start”:通过px4_task_spawn_cmd ()启动 commander_thread_main()。
“stop” :修改thread_should_exit 跳出 commander_thread_main()
“status” :调用print_status()输出飞控状态
“calibrate”:校准程序 ,后面加以下参数:
“mag”(地磁)
“accel”(加速度计)
“gyro”(角速度计)
“level”(不清楚这个)
“esc”(电调)
“airspeed”(风速?)
“check”:检测
“arm”:激活
“disarm”:待机
“takeoff”:起飞(这里需满足一些条件)
“land”:降落(真心不知道这个参数什么时候用)
“transition” :好像是垂直起飞的飞行器才会用到的东西 具体没细看。
“mode” :飞机模式,后面加以下参数:
“manual” 手动模式
“altctl” 高度控制模式
“posctl” 位置控制模式(gps模式)
“auto:mission” 自动驾驶任务模式(地面站下发任务坐标)
“auto:loiter” 自动悬停模式
“auto:rtl” 自动降落(rtl : return to land)
“acro” 杂技模式?
“offboard” 板外控制(控制权交地面站)
“stabilized” 稳定模式(姿态控制模式)
“rattitude” 不明白这个模式请教高手
“auto:takeoff” 自动起飞
“rattitude” 不明白这个模式请教高手
“auto:takeoff” 自动起飞
“auto:land” 自动降落 (和rtl不一样的是否回到home点)
“lockdown” : 后加 “on” 或者 “off” 没试验过 commander_thread_main(int argc, char *argv[])
while (!thread_should_exit) { .......... }
无限循环,流程以后补上。
- set_main_state_rc(struct vehicle_status_s *status_local, ……)
遥控器控制飞行器状态,流程图如下:
bool handle_command(struct vehicle_status_s *status_local, ……..)
解码mavlink命令,调用main_state_transition()改变飞机状态( set_main_state_rc()也调用该函数 )void set_control_mode()
两个控制飞机的重要参数static struct vehicle_status_s status = {}; static struct vehicle_control_mode_s control_mode = {};
通过main_state_transition()改变status参数,通过status参数改变control_mode参数,control_mode传递给pos_ctrl ,att_ctrl 改变飞机的控制模式。
不想使用PX4的控制模式, 就需要更改 与control_mode 有关的函数