5

в mode_loiter.cpp

это основная функция управления в лоитере, вызывается с частотой 100гц

void Copter::ModeLoiter::run() { LoiterModeState loiter_state; float target_yaw_rate = 0.0f; float target_climb_rate = 0.0f; float takeoff_climb_rate = 0.0f; initialize vertical speed and acceleration pos_control->set_speed_z(-get_pilot_speed_dn(), g.pilot_speed_up); pos_control->set_accel_z(g.pilot_accel_z); process pilot inputs unless we are in radio failsafe if (!copter.failsafe.radio) { apply SIMPLE mode transform to pilot inputs update_simple_mode();

process pilot's roll and pitch input

вот тут по ходу считывается ролл и питч, нам нужен только питч, добавляем сюда считывание с канала 7 или 8 кнопки выстрела, фиксируем время нажания скажем или по количеству циклов, и прибавляем(отнимаем) значение к питчу весь этот промежуток отдачи от выстрела (ну скажем полсекунды). Т е получается при нажатии на кнопку выстрела, следующие полсекунды к значению стика будет прибавляться какоето значение (а стик постоянно считывается, поэтому по нарастающей прибавление не пойдет). как мысль?

При этом и забор будет работать, т к корректировки авойданс позже идут.

wp_nav->set_pilot_desired_acceleration(channel_roll->get_control_in(), channel_pitch->get_control_in());

get pilot's desired yaw rate target_yaw_rate = get_pilot_desired_yaw_rate(channel_yaw->get_control_in());

GCS_MAVLINK.cpp void GCS_MAVLINK_Copter::handleMessage(mavlink_message_t* msg) void Copter::mavlink_delay_cb() GCS_Copter:: update void GCS::update(void) { for (uint8_t i=0; i<num_gcs(); i++) { if (chan(i).initialised) { chan(i).update(); } } }

!!!! fill location arr for each corresponding channel

case MAVLINK_MSG_ID_DISTANCE_SENSOR ?????


Please log in to post comments.