controlling 2 motors + 1 servo using interrupts

I am trying to control 2 motors and 1 servo simultaneously via a RC receiver connected to an Arduino for a blimp project but am stuck on trying to implement interrupts. With the current code, the servo only behaves when the motors are off. When the throttle is increased, the servo moves to a specific position and just gets stuck there. When the motors are turned off again, the servo returns to neutral and can be controlled. The throttle works ok but is very erratic and not smooth. The steering (i.e. turning left or right motors on/off) doesn't work. Is using external interrupts the right approach here or should internal interrupts be used (I took a look at internal interrupts and am really confused by all the different hex codes that are required)? Should the pulseIn() function for the servo be replaced with an interrupt?

#include <Servo.h>

boolean ch1_inputReady;
boolean ch2_inputReady;
boolean ch3_inputReady;

const int CH1_PIN = 2;  //input pin for steering left/right
const int CH2_PIN = 4;  //input pin for steering up/down
const int CH3_PIN = 3;  //input pin for throttle
const int LEFTMOTOR_PIN = 5;  //output pin for left motor
const int RIGHTMOTOR_PIN = 6;  //output pin for right motor
const int SERVO_PIN = 11;  //output pin for servo steering up/down
const unsigned long CH1_MIN = 1200;
const unsigned long CH1_MAX = 1800;
const unsigned long CH3_MIN = 1080;  //minimum PPM value read for throttle stick
const unsigned long CH3_MAX = 1800;  //maximum PPM value read for throttle stick

int ch1_value;
int ch3_value;

Servo ch2_servo;

unsigned long ch1_pulseLength;
unsigned long ch2_pulseLength;
unsigned long ch3_pulseLength;
unsigned long ch1_startTime;
unsigned long ch2_startTime;
unsigned long ch3_startTime;

void setup() { 
  ch2_servo.attach(SERVO_PIN);
  pinMode(CH1_PIN, INPUT);
  pinMode(CH3_PIN, INPUT);
  pinMode(LEFTMOTOR_PIN, OUTPUT);
  pinMode(RIGHTMOTOR_PIN, OUTPUT);
  
  attachInterrupt(0, ch1_begin, RISING);
  attachInterrupt(1, ch3_begin, RISING);
  Serial.begin(9600);
}

void ch1_begin() {
  ch1_startTime = micros();
  detachInterrupt(0);
  attachInterrupt(0, ch1_end, FALLING);  
}

void ch1_end() {
  ch1_pulseLength = micros() - ch1_startTime;
  detachInterrupt(0);
  attachInterrupt(0, ch1_begin, RISING);
}

void ch3_begin() {
  ch3_startTime = micros();
  detachInterrupt(1);
  attachInterrupt(1, ch3_end, FALLING);  
}

void ch3_end() {
  ch3_pulseLength = micros() - ch3_startTime;
  detachInterrupt(1);
  attachInterrupt(1, ch3_begin, RISING);
}

void loop() {
  if(ch1_pulseLength < 600 || ch1_pulseLength > 2400) {
    ch1_inputReady = false;
    ch1_pulseLength = 1500;
  } else {
    ch1_inputReady = true;
  }
  
  if(ch3_pulseLength < 600 || ch3_pulseLength > 2400) {
    ch3_inputReady = false;
    ch3_pulseLength = 1500;
  } else {
    ch3_inputReady = true;
  }
  
  if(ch1_inputReady && ch3_inputReady) {
    ch1_inputReady = false;
    ch3_inputReady = false;
    
    if(ch3_pulseLength < CH3_MIN) {
      ch3_pulseLength = CH3_MIN;
    } else if(ch3_pulseLength > CH3_MAX) {
      ch3_pulseLength = CH3_MAX;
    }
    
    ch1_value = constrain(ch1_pulseLength, CH1_MIN, CH1_MAX);
    ch3_value = map(ch3_pulseLength, CH3_MIN, CH3_MAX, 0, 255);
    
    int centralValue = (CH1_MIN + CH1_MAX) / 2;
    
    if(ch1_value < centralValue - 100) {  //100 is just a spacer value so the stick has
      analogWrite(LEFTMOTOR_PIN, 0);      //a bit of play when it is neutral
      analogWrite(RIGHTMOTOR_PIN, ch3_value);
    } else if(ch1_value > centralValue + 100) {
      analogWrite(LEFTMOTOR_PIN, ch3_value);
      analogWrite(RIGHTMOTOR_PIN, 0);
    } else {
      analogWrite(LEFTMOTOR_PIN, ch3_value);
      analogWrite(RIGHTMOTOR_PIN, ch3_value);
    }
  }
  
  ch2_pulseLength = pulseIn(CH2_PIN, HIGH);
  ch2_servo.writeMicroseconds(ch2_pulseLength);
  
  //Serial.println("Ch1 value: " + String(ch1_value)); //for debugging
  //Serial.println("Ch3 value: " + String(ch3_value) + "\n");
  
  Serial.println("Ch1: " + String(ch1_pulseLength));
  Serial.println("Ch2: " + String(ch2_pulseLength));
  Serial.println("Ch3: " + String(ch3_pulseLength) + "\n");
}