无人机在降落阶段,先cancleLanding,然后setGoHomeHeightInMeters设置新的返航高度,...

Completed

Comments

11 comments

  • DJI Developer Support
    你使用的机型是什么?pilot也是这样吗?
    0
    Comment actions Permalink
  • 红色石头

    机型:M300,pilot没有这个操作,是自己写的逻辑,所以setGoHomeHeightInMeters是什么条件吗?看着是设置成功了,但是没有生效

    0
    Comment actions Permalink
  • DJI Developer Support
    setGoHomeHeightInMeters的API文档中有提到当实际高度小于最小返航高度(20m),它将以实际高度返航。你cancleLanding的时候,无人机的高度大致是多少呢? setGoHomeHeightInMeters
    0
    Comment actions Permalink
  • 红色石头

    cancleLanding的时候,无人机高度是5m左右,然后设置setGoHomeHeightInMeters为30m,这时候在go home,没有上升而是直接飞到新的home点

    0
    Comment actions Permalink
  • 红色石头

    看文档,setGoHomeHeightInMeters如果时间高度高于最小返航高度,以当前高度返航。如果低于返航高度,没有说

    0
    Comment actions Permalink
  • DJI Developer Support
    询问了开发人员,M300上新开发了一个视觉导航功能,在视觉系统和避障系统正常有效工作的情况下,飞机会按照当前高度进行返航。这样就不用再升高然后飞行再降落以此来减少能耗,目前这个功能MSDK没有关闭接口,且这个功能仅在M300上。 文档的描述是按照你说的那样,5m的高度可能使得飞机启动了视觉导航功能,因此忽略了返航高度的设置。
    0
    Comment actions Permalink
  • 红色石头

    不止m300,行业进阶版也会出现,而且我是连接模拟器飞行的

    0
    Comment actions Permalink
  • DJI Developer Support
    是在航线任务过程中吗?可以描述一下你的使用场景吗? 如果有相关代码,例如航线,可以上传到这个链接:https://pan-sec.djicorp.com/s/F4gj8B5qX6Hts6M 密码是dji123 方便我们模拟你的使用场景来复现问题,定位问题。
    0
    Comment actions Permalink
  • DJI Developer Support
    我使用M2EA在模拟器测试了,初始返航高度是50m,降落到5m左右,重新设置返航高度为30m,并重新设置返航点。我已经将测试视频上传到了https://pan-sec.djicorp.com/s/F4gj8B5qX6Hts6M,密码是dji123。不知道你第二次设置的返航点坐标是多少呢?如果距离很近,可能就继续降落了。
    0
    Comment actions Permalink
  • 红色石头
    private boolean mExecute = false;//
    private FlightController flightController = null;

    /**
    * 5m左右的时候调用一次
    */

    public void test() {
    if (mExecute) {
    FsLog.d("mExecute true");
    return;
    }
    FsLog.d("test");
    mExecute = true;
    BaseProduct baseProduct = DJISDKManager.getInstance().getProduct();
    if (baseProduct instanceof Aircraft) {
    flightController = ((Aircraft) baseProduct).getFlightController();
    }
    if (null != flightController) {
    flightController.cancelLanding(new CommonCallbacks.CompletionCallback() {
    @Override
    public void onResult(DJIError djiError) {
    FsLog.d("cancelLanding djiError = " + djiError);
    flightController.setGoHomeHeightInMeters(30, new CommonCallbacks.CompletionCallback() {
    @Override
    public void onResult(DJIError djiError) {
    FsLog.d("setGoHomeHeightInMeters djiError = " + djiError);
    double baseLatitude = 22;
    double baseLongitude = 113;
    Object latitudeValue = KeyManager.getInstance().getValue((FlightControllerKey.create(HOME_LOCATION_LATITUDE)));
    Object longitudeValue = KeyManager.getInstance().getValue((FlightControllerKey.create(HOME_LOCATION_LONGITUDE)));
    double ONE_METER_OFFSET = 0.00000899322;

    if (latitudeValue != null && latitudeValue instanceof Double) {
    baseLatitude = (double) latitudeValue;
    }
    if (longitudeValue != null && longitudeValue instanceof Double) {
    baseLongitude = (double) longitudeValue;
    }
    flightController.setHomeLocation(new LocationCoordinate2D(baseLatitude + 10 * ONE_METER_OFFSET, baseLongitude + 10 * ONE_METER_OFFSET), new CommonCallbacks.CompletionCallback() {
    @Override
    public void onResult(DJIError djiError) {
    FsLog.d("setHomeLocation " + djiError);
    flightController.startGoHome(new CommonCallbacks.CompletionCallback() {
    @Override
    public void onResult(DJIError djiError) {
    FsLog.d("startGoHome = " + djiError);

    }
    });
    }
    });

    }
    });
    }
    });
    }
    }

    辛苦试试这个方法,是没有上升到30高度就直接飞过去了
    0
    Comment actions Permalink
  • DJI Developer Support
    您有试过将ONE_METER_OFFSET扩大100倍或者1000倍之后再进行一次模拟飞行吗?很可能是两个返航点之间距离较近,因此直接降落了。 ![](https://djisdksupport.zendesk.com/attachments/token/W7bUVUHMfSuou6PSqiqw6zdsX/?name=inline-419139187.png)​
    0
    Comment actions Permalink

Please sign in to leave a comment.