logo头像
Snippet 博客主题

mavlink摇杆和遥控器之前的切换分析

###mavlink摇杆现在输出不是很稳定,也必须用futaba遥控器进行切换紧急救援。
方案一: 目前我们通道设置为:CH7_OPT = 4 为返航模式。 CH8_OPT = 17 为自动调参。 CH9_OPT=18 为降落模式。

AUXSW_RC_OVERRIDE_ENABLE 此部分高电平为可以通过摇杆控制,低电平就关闭。

  • 看代码:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // @Param: CH8_OPT
    // @DisplayName: Channel 8 option
    // @Description: Select which function is performed when CH8 is above 1800 pwm
    // @Values: 0:Do Nothing, 2:Flip, 3:Simple Mode, 4:RTL, 5:Save Trim, 7:Save WP, 9:Camera Trigger, 10:RangeFinder, 11:Fence, 13:Super Simple Mode, 14:Acro Trainer, 15:Sprayer, 16:Auto, 17:AutoTune, 18:Land, 19:Gripper, 21:Parachute Enable, 22:Parachute Release, 23:Parachute 3pos, 24:Auto Mission Reset, 25:AttCon Feed Forward, 26:AttCon Accel Limits, 27:Retract Mount, 28:Relay On/Off, 34:Relay2 On/Off, 35:Relay3 On/Off, 36:Relay4 On/Off, 29:Landing Gear, 30:Lost Copter Sound, 31:Motor Emergency Stop, 32:Motor Interlock, 33:Brake, 37:Throw, 38:ADSB-Avoidance, 39:PrecLoiter, 40:Object Avoidance, 41:ArmDisarm, 42:SmartRTL, 43:InvertedFlight, 44:Winch Enable, 45:WinchControl, 46:RC Override
    // @User: Standard
    GSCALAR(ch8_option, "CH8_OPT",AUXSW_AUTO),

    case AUXSW_RC_OVERRIDE_ENABLE:
    // Allow or disallow RC_Override
    switch (ch_flag) {
    case AUX_SWITCH_HIGH: {
    ap.rc_override_enable = true;
    break;
    }
    case AUX_SWITCH_LOW: {
    ap.rc_override_enable = false;
    break;
    }
    }
  • 目前找到了,通过覆写的指令,接着看遥控器那边的收发处理。为什么接入覆写后,遥控器就不会输入。
1
2
3
4
5
6
7
8
9
10
11

void Copter::rc_loop() { //读取遥控器的通道数据和三段开关的位置信息-------------- Read radio and 3-position switch on radio
read_radio();
read_control_switch(); //读取三段开关数据 }

// rc_override_active : 1; // true if rc control are overwritten by ground station
// rc_receiver_present : 1; // 10 // true if we have an rc receiver present (i.e. if we've ever received an update
// flag we must have an rc receiver attached
if (!failsafe.rc_override_active) {
ap.rc_receiver_present = true;
}

什么情况下rc_override_active 为false?

  1. failsafe_gcs_check 地面站失效保护时
  2. rc_override_enable 通过辅助通道改为低电平时
  • 需要上真机确认的问题:
  1. 为什么初始时候没接mavlink摇杆时,再接上去就不能接收此通道信息?
    查找方法: 第一:看能否接收到70标志。第二:看 rc_override_enable 是否被初始化。若是能接收到70,则看为啥rc_override_enable为什么不被初始化。若是不能接收到找地面站端。

    为什么rc_override_enable不被初始化?
    看了下代码,此部分必须被初始化。
    要是这样的话,那么我们开始就必须接上mavlink摇杆。

  2. 为什么我拔掉mavlink摇杆后,遥控器就接入了?再接入摇杆接不上去?(第二个问好:因为那个rc_override_active标志没有更新为高电平)

  3. 为什么在地面上两个摇杆都能控制,解锁后就只能用一个控制了?