Как работают датчики обнаружения препятствий в DJI Windows SDK? - PullRequest
1 голос
/ 17 апреля 2020

Я хочу получить расстояние от препятствий сзади и спереди Мави c Воздух. Я использую VissionDetectionStateChanged, и он возвращает значения в 4 секторах, но все они меняются только с препятствиями сзади. Если я положу руку вперед, ничего не произойдет.

VisionSensorPosition всегда возвращает TAIL, а когда я подношу руку очень близко к хвосту самолета, она меняется на NOSE. Не должно ли быть наоборот?

Прямо сейчас я просто отображаю информацию, но я хотел бы иметь возможность обнаруживать препятствия сзади и спереди самолета, чтобы попытаться удержать их в середине двух. объекты и избегать столкновений.

Это мой код в случае:

private async void FlightAssistant_VissionDetectionStateChanged(object sender, VissionDetectionState? value)
        {
            if (value.HasValue)
            {
                if (txtPosition.Dispatcher.HasThreadAccess)
                {
                    txtPosition.Text = value.Value.position.ToString();

                    for (int i = 0, count = value.Value.detectionSectors.Count; i < count; i++)
                    {
                        ObstacleDetectionSector sector = value.Value.detectionSectors[i];
                        TextBox txtWarning = this.FindControl<TextBox>("txtWarning" + i.ToString());

                        if (txtWarning != null)
                            txtWarning.Text = sector.warningLevel.ToString();

                        TextBox txtObstacleDistance = this.FindControl<TextBox>("txtObstacleDistance" + i.ToString());

                        if (txtObstacleDistance != null)
                            txtObstacleDistance.Text = sector.obstacleDistanceInMeters.ToString();
                    }
                }
                else
                {
                    await txtPosition.Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
                    {
                        txtIsSensorBeingUsed.Text = value.Value.isSensorBeingUsed.ToString();
                        txtPosition.Text = value.Value.position.ToString();

                        for (int i = 0, count = value.Value.detectionSectors.Count; i < count; i++)
                        {
                            ObstacleDetectionSector sector = value.Value.detectionSectors[i];
                            TextBox txtWarning = this.FindControl<TextBox>("txtWarning" + i.ToString());

                            if (txtWarning != null)
                                txtWarning.Text = sector.warningLevel.ToString();

                            TextBox txtObstacleDistance = this.FindControl<TextBox>("txtObstacleDistance" + i.ToString());

                            if (txtObstacleDistance != null)
                                txtObstacleDistance.Text = sector.obstacleDistanceInMeters.ToString();
                        }
                    });
                }

            }
        }
...