Управляйте dji mavic enterprise через виртуальные палочки - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь управлять дроном командой sendVirtualStickFlightControlData. Для перемещения дрона влево я использую следующий код.

    sendVirtualStickDataTask = new SendVirtualStickDataTask(0, -5, 0, 0);
    sendVirtualStickDataTimer = new Timer();
    sendVirtualStickDataTimer.schedule(sendVirtualStickDataTask, 100, 200);

    private class SendVirtualStickDataTask extends TimerTask {

    private float pitch;
    private float roll;
    private float yaw;
    private float throttle;
    private long startTime = System.currentTimeMillis();

    public SendVirtualStickDataTask(float inputPitch, float inputRoll, float inputYaw, float inputThrottle) {
        pitch = inputPitch;
        roll = inputRoll;
        yaw = inputYaw;
        throttle = inputThrottle;
    }

    @Override
    public void run() {
        if (System.currentTimeMillis() - startTime > 300) {
            mFlightController.sendVirtualStickFlightControlData(new FlightControlData(0, 0, 0, 0),
                                                                new CommonCallbacks.CompletionCallback() {
                @Override
                public void onResult(final DJIError djiError) {

                }
            });
            cancel();
        } else {
            mFlightController
                    .sendVirtualStickFlightControlData(new FlightControlData(pitch,
                                                                             roll,
                                                                             yaw,
                                                                             throttle),
                                                       new CommonCallbacks.CompletionCallback() {
                @Override
                public void onResult(final DJIError djiError) {
                }
            });
        }
    }
    }

Однако дрон двигается влево, а затем резко падает.

В чем причина такого поведения дронов?

1 Ответ

0 голосов
/ 24 мая 2019

Понятия не имею, почему он резко падает вниз, поскольку вы не меняете значения газа. Обязательно включите виртуальные палочки перед использованием. Это может быть связано с тем, что вам нужно установить максимальные значения. Этот код прекрасно работает для меня.

    /* controllers virtual sticks command and triggers drone movement */
    private void sendVirtualStickCommands(final float pX, final float pY, final float pZ, final float pYaw){

        //maximum amounts
        float verticalJoyControlMaxSpeed = 2;
        float yawJoyControlMaxSpeed = 30;
        float pitchJoyControlMaxSpeed = 10;
        float rollJoyControlMaxSpeed = 10;

        //set yaw, pitch, throttle, roll
        float mYaw = (float)(yawJoyControlMaxSpeed * pYaw);
        float mThrottle = (float)(verticalJoyControlMaxSpeed * pZ);
        float mPitch = (float)(pitchJoyControlMaxSpeed * pX);
        float mRoll = (float)(rollJoyControlMaxSpeed * pY);

        if (mFlightController != null){
            //if virtual sticks are enabled, send the command, otherwise turn them on
            if (virtualSticksEnabled){
                mFlightController.sendVirtualStickFlightControlData(
                        new FlightControlData(
                                mPitch, mRoll, mYaw, mThrottle
                        ), new CommonCallbacks.CompletionCallback() {
                            @Override
                            public void onResult(DJIError djiError) {
                                if (djiError!=null){
                                    setResultToToast(djiError.getDescription());
                                }
                            }
                        }
                );
            } else {
                setResultToToast("flight controller virtual mode off");
                //if not enabled, enable
                mFlightController.setVirtualStickModeEnabled(true, new CommonCallbacks.CompletionCallback() {
                    @Override
                    public void onResult(DJIError djiError) {
                        if (djiError != null){
                            setResultToToast(djiError.getDescription());
                        }else
                        {
                            setResultToToast("Enable Virtual Stick Success");
                            virtualSticksEnabled = true;
                            sendVirtualStickCommands(pX, pY, pZ, pYaw);

                        }
                    }
                });
            }

        } else{
            setResultToToast("Flight Controller Null");
        }

    }

Затем, чтобы двигаться в направлении:

sendVirtualStickCommands(0.1f, 0, 0, 0);//move right
sendVirtualStickCommands(-0.1f, 0, 0, 0);//move left
sendVirtualStickCommands(0, 0.1f, 0, 0);//move forward
sendVirtualStickCommands(0, -0.1f, 0, 0);//move backwards
sendVirtualStickCommands(0, 0, 0.1f, 0);//move upwards
sendVirtualStickCommands(0, 0, -0.1f, 0);//move downwards
...