Простой взлет DroneKit не работает

Я пытаюсь сделать простую команду Takeoff.

Вот код ниже:

ControlApi.getApi(this.drone).takeoff(10, new AbstractCommandListener() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError(int executionError) {
                alertUser("Error: " + executionError);
            }

            @Override
            public void onTimeout() {

                alertUser("timeout");

            }
        });

Хотя мне удается поставить коптер на ARM, команда взлета всегда возвращает ошибку, с executionError 3 или 4, и я не знаю, что это значит? У кого-нибудь есть значения кодов executionError? Или может знаете в чем дело?


person Seiran    schedule 26.04.2017    source источник
comment
Вам нужно вооружить коптер, и вы также должны быть в управляемом режиме. Вы выполнили оба этих условия?   -  person squilter    schedule 26.04.2017
comment
@squilter Да, сначала я включаю, затем переключаюсь в управляемый режим с помощью VehicleApi.getApi(this.drone).setVehicleMode(VehicleMode.COPTER_GUIDED);, а затем код выше.   -  person Seiran    schedule 26.04.2017
comment
Вы ждали подтверждения об успешном изменении режима?   -  person squilter    schedule 27.04.2017
comment
@squilter да, я жду, пока AttributeEvent.STATE_VEHICLE_MODE в onDroneEvent не изменится, а затем нажимаю кнопку взлета. Любые другие мысли? Кстати, тебе удалось взлететь на настоящем квадрокоптере? Спрашиваю, потому что для тестирования использую настоящий квадрокоптер с контроллером PX4.   -  person Seiran    schedule 27.04.2017
comment
О, Dronekit-android действительно предназначен только для работы с ArduCopter. Его определенно можно заставить работать с PX4, но я не ожидал, что он будет работать из коробки.   -  person squilter    schedule 28.04.2017
comment
@squilter У меня есть еще один вопрос о DroneKit, не могли бы вы взглянуть на него? stackoverflow.com/questions/43832575/   -  person Seiran    schedule 09.05.2017


Ответы (1)


[Решено]. Вот шаги, которые необходимо предпринять, чтобы код заработал:

1.

VehicleApi.getApi(this.drone).arm(true, new AbstractCommandListener() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError(int executionError) {

            }

            @Override
            public void onTimeout() {

            }
        });

Убедитесь, что вы получили правильный ответ в методе onSuccess.

2.

VehicleApi.getApi(drone).setVehicleMode(VehicleMode.COPTER_GUIDED);

Вот где была моя проблема. Каким-то образом мне удалось перевести коптер в режим Guided_NoGps. Согласно документации Arducopter, этот режим можно поставить без достаточного количества спутников GPS. Также вам понадобится 3DFix в GPS, чтобы переключиться в режим Guided. Вы должны убедиться, что у вас есть более 9 стабильных спутниковых замков, иначе этот код просто не будет работать.

3.

Запустите код ниже

ControlApi.getApi(this.drone).takeoff(10, new AbstractCommandListener() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError(int executionError) {
                alertUser("Error: " + executionError);
            }

            @Override
            public void onTimeout() {

                alertUser("timeout");

            }
        });

Я проверил это на реальном квадрокоптере на базе контроллера PX4. Также вам понадобится ArduCopter версии 3.4 (или выше)

person Seiran    schedule 29.04.2017