PX4飞控学习(五)

来源:互联网 发布:大数据能做什么 编辑:程序博客网 时间:2024/05/22 12:43

这里写图片描述

PX4的应用

  1. 程序入口为 程序名_main(int argc, char *argv[])这里实现应用参数。
  2. 主循环函数在
    task_main(int argc, char *argv[])
    thread_main(int argc, char *argv[])
    等函数中。
  3. 主循环函数通过
    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 有关的函数

原创粉丝点击