正在上传图片(0/1)

Joystick使用指南[9月22日重要更新]

置顶精华 3
手机看帖 32 70152
9月22日重要更新:

1. 水平方向控制是角度或者速度,roll/x, pitch/y可以选择地理坐标系解释或者机体坐标系解释。删除当水平方向控制是角度模式时,数值一定被解释成Body坐标系下的角度控制。
2. 修改yaw控制内容:角度模式是指地面坐标系下的目标角度角速度模式可以选择不同的坐标系。

Joystick 使用指南


Joystick目的是让开发者使用程序进行飞行控制,可以通过SDK实现遥控器模拟。相比于Waypoint的功能,Joystick显得更加灵活。
在使用这个方法前,请确保你对飞行动力学有一定了解。如果没有,我们也为你准备了一个理论速成指导。如果你已经是专业人士,那么请自动跳到后半部分直接阅读Joystick的使用方法。

理论:基础速成
飞机可以在两种坐标系下运动:地面坐标系(Ground Coordinate System)和机体坐标系(Body Coordinate System),为了区别,可以简单地理解为“绝对”坐标系和“相对”坐标系。“绝对”是指,在地面坐标系下,不管飞机怎么运动,东南西北的方向是“绝对”的,不会变动。而“相对”是指,在机体坐标系下,飞机在运动中机体本身相对地面的姿态改变。

  • 机体坐标系(Body Coordinate System)下
Note:这里讨论的不是严谨的机体坐标系,简单的说,是飞机在水平面上的投影。如果你想知道更详细的内容,可以参考Onboard SDK的文档
图1 机体坐标系(1)

如图1定义机体的坐标系,原点为飞机质心。
图2 机体坐标系(2)

飞机的姿态由坐标系上的三个转动的角度表示。我们又称Y Axis为Pitch Axis,X Axis为Roll Axis,Z Axis 为Yaw Axis,如图2所示,用你的右手,大拇指指向坐标轴(黑色箭头)的方向,想象用剩下四指握住坐标轴,这时四指所指的方向应与红色箭头方向一致,该方向是绕坐标轴转动的正方向
用上面说的右手定则,分别握住三个坐标轴Pitch Axis, Roll Axis和Yaw Axis,并沿红色箭头转动。 你会发现,pitch控制的是飞机机头上下摆动的角度(图3)。
图3 pitch控制

roll控制的是飞机机翼上下摆动的角度
图4 roll控制

yaw控制的是飞机机身水平旋转的角度
图5 yaw控制

控制角度可理解为给飞机相应的加速度。
若是控制飞机的速度,右手定则对于图1依然有效。在图1中,使用右手定则,控制X即让飞机在Y Axis上移动,控制Y即让飞机在X Axis上移动。控制Z依然是控制飞机机身水平的旋转。

  • 地面坐标系(Ground Coordinate System)下



该坐标系下,X Axis指向北,Y Axis指向东,至于Z Axis,我们把指向天空作为正方向。三个坐标轴依然满足上面的右手定则(请注意,地面坐标系的X,Y,Z与机体坐标系的X,Y,Z意义不同)。在这个坐标系下,定义航向向北为0,顺时钟到180°,逆时针到-180°。通过这两个数值,我们就可以知道飞机在空间的朝向。


实践:SDK使用
       在Mobile SDK里,一个发送给飞机的指令需要四个参数x或roll,y或pitch,yaw和throttle。x或roll,y或pitch归为水平控制,throttle是竖直控制。水平控制、竖直控制与yaw控制是三个方面的控制,互相不影响,但飞机实际运动的效果是三个方面的效果叠加。这四个参数在不同的模式下有不同的解释。例如x或roll,y或pitch这两个参数,在水平控制机体坐标系角度模式下,就会被解释成pitch和roll, 在速度模式下就会解释成y和x。 throttle可以被解释成高度,也可以被解释成速度。yaw可以被解释为角度,也可以是角速度。所以在发送指令前,必须要明确我们对每一个方面的控制模式。

Horizontal Control Coordinate System(坐标系控制):Ground Coordinate System或者Body Coordinate System。该坐标系只作用于水平控制和yaw控制。
Horizontal Control Mode(水平控制模式):仅作用于x(或roll),y(或pitch)。可以选择角度模式或者速度模式。
Vertical Control Mode:仅作用于z,即飞机在竖直方向(上升、下降)的运动。可以选择速度模式或位置模式。不受坐标系模式影响,都是相对地面。
Yaw Control Mode:仅作用于yaw。角度模式是指地面坐标系下的目标角度。角速度模式可以选择不同的坐标系。请注意坐标系的选择。

Joystick使用逻辑


Android:

1.        开启地面站。

/**
  * 使用地面站功能前请先开启地面站
  */
public void openGroundStation(DJIGroundStationExecuteCallBack mCallBack)

2.        请确保以下四个设置是你所需要的:
/**
  * 默认值是Body坐标系
  */
public void setHorizontalControlCoordinateSystem(DJIGroundStationTypeDef.DJINavigationFlightControlCoordinateSystem mYawControlCoordinateSystem)

/**
  * 默认值是角度模式(控制pitch和row)
  */
public void setHorizontalControlMode(DJIGroundStationTypeDef.DJINavigationFlightControlHorizontalControlMode mHorizontalControlMode)

/**
  * 默认值是速度模式
  */
public void setVerticalControlMode(DJIGroundStationTypeDef.DJINavigationFlightControlVerticalControlMode mVerticalControlMode)

/**
  * 默认值是角速度模式
  */
public void setYawControlMode(DJIGroundStationTypeDef.DJINavigationFlightControlYawControlMode mYawControlMode)

3. 使用sendFlightControlData(float mYaw, float mPitch, float mRoll, float mThrottle, DJIExecuteResultCallback mCallBack)方法对飞机进行控制。

iOS:

1. 首先调用DJINavigation以下方法开启地面站:
-(void) enterNavigationModeWithResult: (DJIExecuteResultBlock)result;

2. 然后设置以下四个参数值:
/**
*  Vertical control mode, 默认值是速度模式。
*/
@property(nonatomic, assign) DJIVerticalControlMode verticalControlMode;
/**
*  Horizontal control mode, 默认值是角度模式(控制pitch和row)。
*/
@property(nonatomic, assign) DJIHorizontalControlMode horizontalControlMode;
/**
*  Yaw control mode, 默认值是角速度模式。
*/
@property(nonatomic, assign) DJIYawControlMode yawControlMode;
/**
*  Horizontal control coordinate system, 默认值是Body坐标系。
*/
@property(nonatomic, assign) DJIFlightCoordinateSystem horizontalCoordinateSystem;

3. 接着创建好DJIFlightControlData结构:
typedef struct
{
    /**
     *  Aircraft's Pitch controlled quantity.
     */
    DJIFlightControlledQuantity mPitch;
    /**
     *  Aircraft's Roll controlled quantity.
     */
    DJIFlightControlledQuantity mRoll;
    /**
     *  Aircraft's Yaw controlled quantity.
     */
    DJIFlightControlledQuantity mYaw;
    /**
     *  Aircraft's Throttle controlled quantity.
     */
    DJIFlightControlledQuantity mThrottle;
} DJIFlightControlData;

再使用DJIFlightControl的以下方法对飞机进行控制:
/**
*  Send flight control data. The property 'isEnable' should be YES.
*
*  @param controlData Flight control data
*  @param result      Remote execute result callback.
*/
-(void) sendFlightControlData: (DJIFlightControlData)controlData withResult: (DJIExecuteResultBlock)result;






    Note:
  • yaw控制下的角度模式是指地面坐标系下的目标角度
  • 当竖直方向是位置模式时,数值一定是对地的高度;
  • 其他模式请注意坐标系的选择。

参数
模式
数值限制
x
速度模式
[-10 m/s, +10 m/s] 超过最大值,仍按最大值运动
角度模式
[-30°, +30 °]
y
速度模式
[-10 m/s, +10 m/s] 超过最大值,仍按最大值运动
角度模式
[-30°, +30 °]
z
速度模式
[-4 m/s, +4 m/s] 超过最大值,仍按最大值运动
位置模式
[0m, 100m]
yaw
角度模式
[-180°, +180 °]
角速度模式
[-100°/s, +100 °/s]

请留意指令发送的频率。如果指令只发送一次,飞控视为连接中断进入自动悬停状态。因此,可以用Timer去重复发送指令,建议频率是50Hz,最低5Hz以上。


FAQ:
  • 一定要同时设置4个模式吗?(4个模式指setHorizontalControlCoordinateSystem(),setHorizontalControlMode(),setVerticalControlMode()和setYawControlMode())如果我只需要飞机向前飞,不需要改变yaw,我也需要设置yaw的运动模式吗?
一定要同时设置。参数x,y,z,yaw是同时传给飞控的指令,如果不设置对应的运动模式,飞机不知道要如何解释参数的值,是速度,角度还是角速度。如果不需要改变yaw,可以设置yaw的模式为角度模式,传值的时候传0,即解释为yaw转动0度。由于SDK本身给四个模式设置了默认值(见上),开发者可以偷懒只改变一个或两个模式的值。但是为了代码质量起见,建议在代码中同时设置好4个模式。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
评论
上传
你需要登录之后才能回帖    登录 | 注册
lanyusea  Inspire 1认证用户 2015-9-11 3#
好顶赞!
SDK板块日常维护志愿者。
我没有QQ,我也不接受私信提问。有问题请去论坛发帖,利人利己。

我没有QQ,我没有QQ,我没有QQ。
重要的事情说三遍。
YeYe  Phantom 3 Professional认证用户 2015-9-12 4#
点个赞
YeYe  Phantom 3 Professional认证用户 2015-9-12 5#
设置为地面坐标系,用timer传X和Y就自动按照地面坐标系解析吗?也就是说可以直接让飞行器朝一个地理坐标方向飞行?
yasenhu   2015-9-12 6#
不错,支持下!
楼主  Phantom 3 Professional认证用户 2015-9-13 7#
YeYe 发表于 2015-9-12 11:37
设置为地面坐标系,用timer传X和Y就自动按照地面坐标系解析吗?也就是说可以直接让飞行器朝一个地理坐标方 ...
如果设置为地面坐标系,只有当horizontal control也同时设置为速度模式的时候,相应的参数"mPitch","mRoll", 才会分别被解析成地理坐标系下Y和X噢~! 如果horizontal control设置为角度模式,不管地面坐标系如何设置,都会被解释为机体坐标系下的pitch和roll的。
楼主  Phantom 3 Professional认证用户 2015-9-22 8#
YeYe 发表于 2015-9-12 11:37
设置为地面坐标系,用timer传X和Y就自动按照地面坐标系解析吗?也就是说可以直接让飞行器朝一个地理坐标方 ...
今天文档内容更新了噢~ 请查看标注出来的更新内容。可以使用地面坐标系去解释水平控制的两个方向分量噢~
pangjie   2015-10-9 9#
sendFlightControlData()方法跟添加航点飞行有直接冲突,sendFlightControlData有时候会莫名的实效。实际过程是这样:
1、航点任务执行结束后,我让飞机通过sendFlightControlData角速度进行旋转,飞机有时候后会旋转,有时候不会旋转。
2、我通过sendFlightControlData让飞机缓慢上升(timer设置值为100毫秒),上升到一定高度时让飞机进行自传(for循环执行sendFlightControlData,此时设置角速度旋转了),但是飞机执行的是每次上升0.5m,而不是每次自转一个角度,for循环执行七八次后,飞机才自转。
请求各位大仙指路。。。
楼主  Phantom 3 Professional认证用户 2015-10-9 10#
pangjie 发表于 2015-10-9 16:18
sendFlightControlData()方法跟添加航点飞行有直接冲突,sendFlightControlData有时候会莫名的实效。实际过 ...
joystick不能和航点任务同时使用哦。请确保使用joystick功能时,没有执行任何航点任务。另外一个问题,如果可以把代码贴出来,大家可以更好地帮助你噢~
pangjie   2015-10-12 11#
DJI-Shirley 发表于 2015-10-9 17:57
joystick不能和航点任务同时使用哦。请确保使用joystick功能时,没有执行任何航点任务。另外一个问题,如 ...
好的。我是先执行航点任务,到达航点时执行飞机旋转拍照任务。飞机旋转用该方法:public static void setAircraftTurnCornor(int cornor)
{
  //设为机身坐标系模式
DJIDrone.getDjiGroundStation().setHorizontalControlCoordinateSystem(DJIGroundStationTypeDef.DJINavigationFlightControlCoordinateSystem.Navigation_Flight_Control_Coordinate_System_Body);
    setHorizontalControlMode(mHorizontalControlMode);//默认模式
    setVerticalControlMode(mVerticalControlMode);//默认模式
    //yaw设为速度模式,DJIDrone.getDjiGroundStation().setYawControlMode
            (DJIGroundStationTypeDef.DJINavigationFlightControlYawControlMode.Navigation_Flight_Control_Yaw_Control_Palstance);
    DJIDrone.getDjiGroundStation().sendFlightControlData
            (cornor, 0, 0, 0,

                    new DJIExecuteResultCallback() {
                        @Override
                        public void onResult(DJIError djiError) {

                        }
                    });
}飞机到达航点handler处理方法: case STARTTAKEPHOTO:                    ...
                    //清除数据
PhantomUtils.removeGroundStationTask();
                    handler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            setResultToToast(getString(R.string.Waypoint_take_pictures) + "");//达到,拍摄
                            ...                            setAircraftTurnCornor ();                            ....                          
                    }, 8000);
问题现在是这样的:飞机到达航点后,我怕飞机还有飞行数据,所有先清除航点任务,之后再for循环执行setAircraftTurnCornor()方法。但是飞机回出现这样的情况,第一次的起飞时候,飞机不转的,之后飞机有时候转,有时候不转。

问题就是这样的。。期待你的解答。谢谢你

pangjie   2015-10-12 12#
DJI-Shirley 发表于 2015-10-9 17:57
joystick不能和航点任务同时使用哦。请确保使用joystick功能时,没有执行任何航点任务。另外一个问题,如 ...
还有另外一个想请教一下哈:我先设置飞机匀速上升,到达高度之后进行拍照,但是拍照时我使用sendFlightControlData()方法让飞机进行自转角度,但是飞机往上飞0.5m,往上飞很多次后才会进行飞机自转角度。代码如下:
SpeedTimer = new Timer();
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        while (speedFly) {
            PhantomUtils.setFlyUpSpeed(0.8f);
            if (actualHeight > towerHeight && speedFly) {
                speedFly = false;
                //到达航点,进行拍照
                handler.sendEmptyMessage(STARTTAKEPHOTO);
            }
        }
        if (!speedFly) {
            SpeedTimer.cancel();
        }
    }
};
SpeedTimer.scheduleAtFixedRate(timerTask, 0, 50);


public static void setFlyUpSpeed(float speed)
        {
            setHorizontalControlCoordinateSystem(mYawControlCoordinateSystem);//默认
            setHorizontalControlMode(mHorizontalControlMode);//默认
            setVerticalControlMode(mVerticalControlMode);//默认
            setYawControlMode(mYawControlMode);//默认
            DJIDrone.getDjiGroundStation().sendFlightControlData
                    (0, 0 ,0,speed,
            new DJIExecuteResultCallback() {
                @Override
                public void onResult(DJIError djiError) {
                }
            });
        }

楼主  Phantom 3 Professional认证用户 2015-10-12 13#
pangjie 发表于 2015-10-12 10:12
好的。我是先执行航点任务,到达航点时执行飞机旋转拍照任务。飞机旋转用该方法:public static void set ...
Hi,因为航点任务和joystick是无法同时使用的,否则会造成冲突,我建议你直接用航点任务里的action来实现飞机转向和拍照。具体可以看DJIGroundStationWayPointAction类的文档,详细的使用方法参照DEMO来~ 我们的文档中Ground Station部分已经全部更新,文档很详细噢~ 希望可以帮助到你~
pangjie   2015-10-12 14#
DJI-Shirley 发表于 2015-10-12 11:37
Hi,因为航点任务和joystick是无法同时使用的,否则会造成冲突,我建议你直接用航点任务里的action来实现 ...
好的。感谢哈!其实在航点里面拍照的话,有个很重的一点是没有回调方法。没法执行一些另外任务,所以就没有这样做。另外的,我还想问下噢,sendFlightControlData()往上飞,飞到一定高度之后我再让飞机自转,但是飞机却依然是飞每次上升0.5m,执行多次后飞机才会自转。
有没有一种方法,清除给飞机的飞行数据的队列信息呢。



楼主  Phantom 3 Professional认证用户 2015-10-12 15#
pangjie 发表于 2015-10-12 15:38
好的。感谢哈!其实在航点里面拍照的话,有个很重的一点是没有回调方法。没法执行一些另外任务,所以就没 ...
在你的代码里,我看到你用的都是都是默认值.
public void setHorizontalControlCoordinateSystem;
public void setHorizontalControlMode;
public void setVerticalControlMode;
public void setYawControlMode.
如果使用的是默认值,坐标系是body坐标系,vertical control是速度控制。
我建议你调成Ground 坐标系下vertical control为位置控制,这样可以实现到上升到一定高度之后,再给指令进行转动
pangjie   2015-10-12 16#
DJI-Shirley 发表于 2015-10-12 17:03
在你的代码里,我看到你用的都是都是默认值.
public void setHorizontalControlCoordinateSystem;
publi ...
不是噢。用vertical control是速度控制,目的就是匀速上升进行拍视频的。按照你这样的话就控制不了速度了。
timer控制sendFlightControlData数据上传,跟只单独调用sendFlightControlData方法,两者结合使用需要注意什么吗,
最后感谢你的用心解答啊。
楼主  Phantom 3 Professional认证用户 2015-10-12 17#
pangjie 发表于 2015-10-12 17:59
不是噢。用vertical control是速度控制,目的就是匀速上升进行拍视频的。按照你这样的话就控制不了速度了 ...
噢 我明白你的意思了~ 这确实是个局限性。因为控制速度就没有办法精确地控制上升的高度
pangjie   2015-10-12 18#
DJI-Shirley 发表于 2015-10-12 18:05
噢 我明白你的意思了~ 这确实是个局限性。因为控制速度就没有办法精确地控制上升的高度
...
楼主不要这样。。获取高度的话,我是通过主控回调信息进行判断。
达到一定高度后我就执行飞机自转的方法,不知道是不是受timer上传飞行数据的影响,我执行自转,飞机都是往上飞0.5m。执行多次之后,飞机才自转。
我一直找不到其中的原因。是不是飞机执行上传的飞行数据是一个队列,里面数据乜有清空
楼主  Phantom 3 Professional认证用户 2015-10-12 19#
pangjie 发表于 2015-10-12 18:14
楼主不要这样。。获取高度的话,我是通过主控回调信息进行判断。
达到一定高度后我就执行飞机自转的 ...
对的,我的意思就是因为使用timer,需要持续发指令给飞控,所以没有办法很精确地控制sendFlightDataControl()~ 你可以试试用高度做个判断,当到达某个高度就把timer cancel掉~
pangjie   2015-10-13 20#
DJI-Shirley 发表于 2015-10-12 18:56
对的,我的意思就是因为使用timer,需要持续发指令给飞控,所以没有办法很精确地控制sendFlightDataContro ...
SpeedTimer = new Timer();
TimerTask timerTask = new TimerTask() {
    @Override
    public void run() {
        while (speedFly) {
            PhantomUtils.setFlyUpSpeed(0.8f);
            if (actualHeight > Height && speedFly) {
                speedFly = false;
                //到达航点,进行拍照
                handler.sendEmptyMessage(STARTTAKEPHOTO);
            }
        }
        if (!speedFly) {
            SpeedTimer.cancel();
        }
    }
};
SpeedTimer.schedule(timerTask, 0, 50);

是啊。前面贴出代码来了的。现在的问题就是我匀速飞行执行完毕后,要执行飞机拍照,然后自转,然后在拍照,然后自转,但是飞机执行自转方法是确实往上飞0.5m,执行很多次之后,飞机才执行自转,我delay很久再执行飞机自转都没有用。我想是不是飞控执行timer往上飞的指令没有执行完毕。如何清楚飞控的执行数据呢。使得飞机能立马自转。
谢谢你哈。


楼主  Phantom 3 Professional认证用户 2015-10-13 21#
pangjie 发表于 2015-10-13 09:21
SpeedTimer = new Timer();
TimerTask timerTask = new TimerTask() {
    @Override
高度信息要从飞控那边提取过来,有个updateTimer,两次提取信息最短时间间隔不会小于100ms,不知道你对这个有没有设置。你的Timer设置的是50ms, 也就是说你在判断的时候,有的时候是还没有更新的信息,所以Timer会继续执行,等信息更新了,你到达的高度也已经超过了想要的高度。这样描述清楚嘛?
pangjie   2015-10-15 22#
DJI-Shirley 发表于 2015-10-13 11:17
高度信息要从飞控那边提取过来,有个updateTimer,两次提取信息最短时间间隔不会小于100ms,不知道你对这 ...
DJI-Shirley兄,已经解决了。sendFlightControlData的问题跟timer周期没有很大关联的,我设置2000也没有效果的,看到sendFlightControlData()的频率建议是50hz,才设置为50;现在用航点任务来实现了。通过DJIGroundStationExecutionPushInfo回调,判断航点任务执行完毕后,再使用sendFlightControlData方法。/抱拳   非常感谢!


楼主  Phantom 3 Professional认证用户 2015-10-16 23#
pangjie 发表于 2015-10-15 11:07
DJI-Shirley兄,已经解决了。sendFlightControlData的问题跟timer周期没有很大关联的,我设置2000也没有 ...
是的,用sendFlightControlData没有办法很好的控制执行的时间。解决就好了~ 最后我并不是男生。。。
VoltWu   2015-10-18 24#
DJI-Shirley 发表于 2015-10-16 11:17
是的,用sendFlightControlData没有办法很好的控制执行的时间。解决就好了~ 最后我并不是男生。。。:shut ...
有一个很基础的问题想问一下 如果我设计一个非常简单的操控飞机运行的app 可不可以先开dji go让飞机起飞 然后转到我自己的app操控
最后要降落时再转到dji go开启自动降落?
楼主  Phantom 3 Professional认证用户 2015-10-19 25#
VoltWu 发表于 2015-10-18 15:45
有一个很基础的问题想问一下 如果我设计一个非常简单的操控飞机运行的app 可不可以先开dji go让飞机起飞  ...
你完全可以手动起飞呀~ 为什么要在两个app之间换来换去呢? 或者你可以使用main controller里的startTakeoff()方法自动起飞。
pangjie   2015-10-19 26#
DJI-Shirley 发表于 2015-10-16 11:17
是的,用sendFlightControlData没有办法很好的控制执行的时间。解决就好了~ 最后我并不是男生。。。:shut ...
哈哈。。。。
pangjie   2015-10-20 27#
DJI-Shirley同志,你好。请教一个问题,现在我使用最基本的飞机上升,下降。如下。
DJIDrone.getDjiGroundStation().sendFlightControlData
                (0, 0, 0, speed,
                        new DJIExecuteResultCallback()
飞机怎么有时候会往左飘,或往右飘的。
机型是:inspire1,四个模式都使用默认,模拟器是没有问题的,好急人!
pangjie   2015-10-20 28#
扫了几遍aip,控制飞机慢速往上升,就是微调上升,除了sendFlightControlData方法,还有其他方法吗。 鄙人不才,尚未找到。请多多指教。
楼主  Phantom 3 Professional认证用户 2015-10-21 29#
pangjie 发表于 2015-10-20 14:28
DJI-Shirley同志,你好。请教一个问题,现在我使用最基本的飞机上升,下降。如下。
DJIDrone.getDjiGroundS ...
目前发现用yaw转动航向的话,实飞是会有一些水平漂移,DJI的工程师们已经在处理啦~ 其他的没有发现问题噢
rizhaoyunhai   2015-10-23 30#
楼主你好,我还没用过真机,我想问下,在设置水平旋转时,水平旋转的最小角度能精确到多少,也就是我最少最少能控制飞机旋多少度角,有这方面的数据吗
VoltWu   2015-11-9 31#
DJI-Shirley 发表于 2015-10-19 11:28
你完全可以手动起飞呀~ 为什么要在两个app之间换来换去呢? 或者你可以使用main controller里的startTake ...
Shirley姐!再问两个问题:1. DJI SDK官方文档为什么说openGroundStation 需要F mode? 那样岂不是用不了GPS了?
public void openGroundStation(DJIGroundStationExecuteCallBack mCallBack)Open ground station. Before you get start to use ground station functions please make sure that you have already open ground station.

Precondition:
1. The aircraft has to be in the air.
2. Remote Controller should be in the F mode.



2. 我现在想控制飞机运动 我用了一个按钮来发送水平旋转的指令 可是按下这个按钮后飞机(模拟器里的)确实转了一点点 但是这之后我的安卓程序就卡住了  并且飞机也不转了 有可能是什么原因呢?
Left = (Button) findViewById(R.id.left);
Left.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if(event.getAction() == MotionEvent.ACTION_DOWN){
            //handler.sendMessage(handler.obtainMessage(SHOWTOAST, "Down!"));
            left_spin = true;
            new Thread(){
                public void run(){
                    while (left_spin == true && gndStation == true){
                        DJIDrone.getDjiGroundStation().sendFlightControlData(20,0,0,0,new DJIExecuteResultCallback(){
                            @Override
                            public void onResult(DJIError djiError) {

                            }
                        });
                        handlerTimer.postDelayed(this,25);
                    }
                }
            }.start();
        }
        if(event.getAction() == MotionEvent.ACTION_UP){
            //handler.sendMessage(handler.obtainMessage(SHOWTOAST, "Up!"));
            left_spin = false;
        }
        return false;
    }
});

VoltWu   2015-11-10 32#
DJI-Shirley 发表于 2015-10-21 10:18
目前发现用yaw转动航向的话,实飞是会有一些水平漂移,DJI的工程师们已经在处理啦~ 其他的没有发现问题噢 ...
我可能知道哪里错了。。。
楼主  Phantom 3 Professional认证用户 2015-11-13 33#
VoltWu 发表于 2015-11-10 00:09
我可能知道哪里错了。。。
把解决方案post上来呗~
我跟你拼了哦   2017-5-22 34#
楼主你好,为什么当我在使用VirtualStick功能的时候,发送的Roll,Pitch数值始终都为零,但飞机在悬停一段时间后就一直向后飞。设置的HorizontalControlCoordinateSystem为Body,HorizontalControlMode为Angle; VerticalControlMode为Velocity;
YawControlMode为Angle。实在是想不到问题出在哪了
取消 点赞 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表