Search in sources :

Example 1 with Consumer

use of dji.thirdparty.io.reactivex.functions.Consumer in project uav_mobile_app by jiushuokj.

the class MainActivity method startRecordingTrace.

private void startRecordingTrace() {
    if (makeTraceDisposable != null && !makeTraceDisposable.isDisposed()) {
        return;
    }
    Log.i(TAG, "startRecordingTrace: " + "开始记录航线");
    makeTraceDisposable = Observable.interval(500, TimeUnit.MILLISECONDS).observeOn(AndroidSchedulers.mainThread()).subscribe(new Consumer<Long>() {

        @Override
        public void accept(Long aLong) throws Exception {
            if (!DoubleComparer.considerEqual(droneLocationLatForTrace, mFlightController.getState().getAircraftLocation().getLatitude(), DELTA) || !DoubleComparer.considerEqual(droneLocationLngForTrace, mFlightController.getState().getAircraftLocation().getLongitude(), DELTA)) {
                // 坐标转换
                // final LatLng oldLatlng = new LatLng(droneLocationLatForTrace, droneLocationLngForTrace);
                final LatLng oldLatlng = CoordinateTransUtils.getGDLatLng(droneLocationLatForTrace, droneLocationLngForTrace);
                droneLocationLatForTrace = mFlightController.getState().getAircraftLocation().getLatitude();
                droneLocationLngForTrace = mFlightController.getState().getAircraftLocation().getLongitude();
                // 坐标转换
                // final LatLng newLatlng = new LatLng(droneLocationLatForTrace, droneLocationLngForTrace);
                final LatLng newLatlng = CoordinateTransUtils.getGDLatLng(droneLocationLatForTrace, droneLocationLngForTrace);
                Polyline polyline = aMap.addPolyline(new PolylineOptions().addAll(Arrays.asList(oldLatlng, newLatlng)).width(4).color(Color.argb(255, 255, 1, 1)));
                mTracePolylines.put(mTracePolylines.size(), polyline);
                Log.d(TAG, "startRecordingTrace: " + mTracePolylines.size() + "次轨迹");
            }
        }
    });
}
Also used : Consumer(dji.thirdparty.io.reactivex.functions.Consumer) Polyline(com.amap.api.maps.model.Polyline) LatLng(com.amap.api.maps.model.LatLng) PolylineOptions(com.amap.api.maps.model.PolylineOptions)

Example 2 with Consumer

use of dji.thirdparty.io.reactivex.functions.Consumer in project uav_mobile_app by jiushuokj.

the class MyMqttService method sendStateData.

/**
 * 发送无人机状态数据
 */
private void sendStateData() {
    if (mqttAndroidClient.isConnected()) {
        ToastUtils.setResultToToast("开始发送Mqtt消息");
        if (disposable != null && !disposable.isDisposed()) {
            return;
        }
        if (aircraft == null) {
            Log.i(TAG, "sendStateData: aircraft实例为空");
            return;
        }
        disposable = Observable.interval(100, TimeUnit.MILLISECONDS).observeOn(Schedulers.newThread()).subscribe(new Consumer<Long>() {

            @Override
            public void accept(Long aLong) throws MqttException {
                if (mqttAndroidClient.isConnected()) {
                    if (serialNumber != null && flightController.isConnected()) {
                        // Log.d(TAG, "发送第" + (aLong++) + "次Mqtt消息");
                        LocationCoordinate3D aircraftLocation = flightControllerState.getAircraftLocation();
                        Attitude flightControllerStateAttitude = flightControllerState.getAttitude();
                        ProtoFlightController.FlightController.Builder builder = ProtoFlightController.FlightController.newBuilder().setAreMotorsOn(flightControllerState.areMotorsOn()).setIsFlying(flightControllerState.isFlying()).setLatitude(aircraftLocation.getLatitude()).setLongitude(aircraftLocation.getLongitude()).setAltitude(aircraftLocation.getAltitude()).setTakeoffLocationAltitude(flightControllerState.getTakeoffLocationAltitude()).setPitch(flightControllerStateAttitude.pitch).setRoll(flightControllerStateAttitude.roll).setYaw(flightControllerStateAttitude.yaw).setVelocityX(flightControllerState.getVelocityX()).setVelocityY(flightControllerState.getVelocityY()).setVelocityZ(flightControllerState.getVelocityZ()).setFlightTimeInSeconds(flightControllerState.getFlightTimeInSeconds()).setFlightMode(ProtoFlightController.FlightController.FlightMode.values()[flightControllerState.getFlightMode().ordinal()]).setGPSSatelliteCount(flightControllerState.getSatelliteCount()).setGPSgSignalLevel(ProtoFlightController.FlightController.GPSSignalLevel.values()[flightControllerState.getGPSSignalLevel().ordinal()]).setFlightWindWarning(ProtoFlightController.FlightController.FlightWindWarning.values()[flightControllerState.getFlightWindWarning().ordinal()]).setRemainingFlightTime(flightControllerState.getGoHomeAssessment().getRemainingFlightTime()).setRemainingFlightTime(flightControllerState.getGoHomeAssessment().getTimeNeededToGoHome()).setAirSenseWarningLevel(ProtoFlightController.FlightController.AirSenseWarningLevel.values()[airSenseSystemInformation.getWarningLevel().ordinal()]);
                        if (rtkState != null) {
                            builder.setMobileStationAltitude(rtkState.getMobileStationAltitude()).setFusionMobileStationAltitude(rtkState.getFusionMobileStationAltitude()).setBaseStationAltitude(rtkState.getBaseStationAltitude());
                        }
                        ProtoFlightController.FlightController flightInformation = builder.build();
                        String topic = publishTopic + "/FlightController";
                        byte[] tosendbytes = flightInformation.toByteArray();
                        MqttMessage flightInformationMessage = new MqttMessage(tosendbytes);
                        flightInformationMessage.setQos(1);
                        if (mqttAndroidClient.isConnected()) {
                            mqttAndroidClient.publish(topic, flightInformationMessage);
                        // Log.d(TAG,"ltz send out flightInformationMessage "+ tosendbytes.length);
                        } else {
                        // Log.d(TAG,"ltz not send out flightInformationMessage");
                        }
                    }
                    if (aggregationState != null) {
                        ProtoBattery.Battery batteryInfo = ProtoBattery.Battery.newBuilder().setChargeRemaining(aggregationState.getChargeRemaining()).setChargeRemainingInPercent(aggregationState.getChargeRemainingInPercent()).setVoltage(aggregationState.getVoltage()).setCurrent(aggregationState.getCurrent()).build();
                        String topic = publishTopic + "/Battery";
                        MqttMessage batteryInfoMessage = new MqttMessage(batteryInfo.toByteArray());
                        batteryInfoMessage.setQos(1);
                        if (mqttAndroidClient.isConnected())
                            mqttAndroidClient.publish(topic, batteryInfoMessage);
                    }
                    if (gimbalState != null) {
                        dji.common.gimbal.Attitude gimbalAttitude = gimbalState.getAttitudeInDegrees();
                        MqttMessage gimbalInfoMessage = new MqttMessage(ProtoGimbal.Gimbal.newBuilder().setGimbalMode(ProtoGimbal.Gimbal.GimbalMode.values()[gimbalState.getMode().ordinal()]).setPitch(gimbalAttitude.getPitch()).setRoll(gimbalAttitude.getRoll()).setYaw(gimbalAttitude.getYaw()).build().toByteArray());
                        gimbalInfoMessage.setQos(1);
                        String topic = publishTopic + "/Gimbal";
                        if (mqttAndroidClient.isConnected())
                            mqttAndroidClient.publish(topic, gimbalInfoMessage);
                    }
                    if (rtkState != null) {
                        MqttMessage rtkInfoMessage = new MqttMessage(ProtoRTK.RTK.newBuilder().setIsConnected(rtk.isConnected()).setIsRTKBeingUsed(rtkState.isRTKBeingUsed()).setHeadingSolution(ProtoRTK.RTK.HeadingSolution.values()[rtkState.getHeadingSolution().ordinal()]).build().toByteArray());
                        rtkInfoMessage.setQos(1);
                        String topic = publishTopic + "/RTK";
                        if (mqttAndroidClient.isConnected())
                            mqttAndroidClient.publish(topic, rtkInfoMessage);
                    }
                } else {
                    Log.i(TAG, "发送State数据: mqttAndroidClient is disconnected");
                }
            }
        });
    // isStarted.getAndSet(true);
    }
}
Also used : MqttMessage(org.eclipse.paho.client.mqttv3.MqttMessage) Attitude(dji.common.flightcontroller.Attitude) ProtoFlightController(com.jskj.mobile.state.ProtoFlightController) ProtoFlightController(com.jskj.mobile.state.ProtoFlightController) FlightController(dji.sdk.flightcontroller.FlightController) Consumer(dji.thirdparty.io.reactivex.functions.Consumer) ProtoBattery(com.jskj.mobile.state.ProtoBattery) LocationCoordinate3D(dji.common.flightcontroller.LocationCoordinate3D)

Aggregations

Consumer (dji.thirdparty.io.reactivex.functions.Consumer)2 LatLng (com.amap.api.maps.model.LatLng)1 Polyline (com.amap.api.maps.model.Polyline)1 PolylineOptions (com.amap.api.maps.model.PolylineOptions)1 ProtoBattery (com.jskj.mobile.state.ProtoBattery)1 ProtoFlightController (com.jskj.mobile.state.ProtoFlightController)1 Attitude (dji.common.flightcontroller.Attitude)1 LocationCoordinate3D (dji.common.flightcontroller.LocationCoordinate3D)1 FlightController (dji.sdk.flightcontroller.FlightController)1 MqttMessage (org.eclipse.paho.client.mqttv3.MqttMessage)1