DJI MSDK waypoint mission开发

DJI MSDK waypoint mission开发DJIMSDKwaypo 开发前言 因为公司有一个需要飞机飞到某个点的需求 所以在此记录一下开发过程 文章目录 DJIMSDKwaypo 开发一 waypointmiss 介绍 二 Waypoint 构造 nbsp nbsp 1 飞行任务的航点 nbsp nbsp nbsp 1 Waypoint doublelatitu doublelongit floataltitud nbsp nbsp 2 航点航向 amp nbs

DJI MSDK waypoint mission开发


前言:因为公司有一个需要飞机飞到某个点的需求,所以在此记录一下开发过程。

文章目录

一、waypoint mission介绍:

Waypoint mission是可以通过设置好的waypoint(坐标点、高度航向、角半径、转弯模式、俯仰角、航点动作等)执行飞行任务。

二、Waypoint构造:

  1、飞行任务的航点:

   1.Waypoint(double latitude, double longitude, float altitude)

  2、航点航向:

   1.int heading

    飞机到达航点时,飞机将旋转到的航向。范围在-180-180,0代表真实的北。如果航向任务的航向不同,飞机的航向将逐渐设置为下一个航向,同时在两个相邻的航路点之间飞行。

  3、角半径:

   1.float cornerRadiusInMeters

    默认情况下路径的拐角半径未0.2m

  4、转弯模式:

   1.WaypointTurnMode turnMode

  5、俯仰角:

   1.float gimbalPitch

        设置到达航点的时候,万向节的俯仰角范围在[-90,0]。

  6、路径点动作(waypointaction):

   1.WaypointAction(WaypointActionType actionType, int actionParam)

        当飞机到达路点时,飞机将执行此操作。所有可能的操作都在WaypointActionType enum中定义。

   (1)WaypointActionType:
      1)STAY:

        让飞机保持在航路点的位置,参数将确定飞机停留在[0,32767]毫秒范围内的时间(毫秒)。

      2)START_TAKE_PHOTO

        开始拍照片,执行此方法点操作的最大时间设置为6秒。如果执行航向点动作的时间超过6秒,飞机将停止执行航向点动作,如果存在,飞机将继续执行下一个航向点动作。

      3)START_RECORD

        开始录音,执行此方法点操作的最大时间设置为6秒。如果执行航向点动作的时间超过6秒(例如,摄像机不存在),则飞机将停止执行航向点动作,如果存在方向点动作,飞机将继续前进到下一个航向点动作。

      4)ROTATE_AIRCRAFT

        旋转飞机的偏航,旋转方向由上面设置的turnmode决定,范围在[-180,180].

      5)GIMBAL_PITCH

        旋转万向节的角度,范围在[-90,0]。

   (2)actionParam:

        路径点动作的动作参数

      1)STAY:

        参数将确定飞机停留在[0,32767]毫秒范围内的时间(毫秒)。

      2)START_TAKE_PHOTO

        开始拍照片,执行此方法点操作的最大时间设置为6秒。

      3)START_RECORD

        开始录音,执行此方法点操作的最大时间设置为6秒。

      4)ROTATE_AIRCRAFT

        范围在[-180,180]

      5)GIMBAL_PITCH

        旋转万向节的角度,范围在[-90,0]。

 Waypoint waypoint1 = new Waypoint(v, v1, v2); Waypoint waypoint2 = new Waypoint(v, v1, v2); //航向 waypoint1.heading =50; //角半径 waypoint1.cornerRadiusInMeters =0.2f wp.getWaypocornerRadiusInMeters(); //转弯模式 顺时针:WaypointTurnMode.CLOCKWISE 逆时针WaypointTurnMode.COUNTER_CLOCKWISE waypoint1.turnMode=WaypointTurnMode.COUNTER_CLOCKWIS; //俯仰角 waypoint1.gimbalPitch = -50; //航点动作 waypoint1.addAction(new WaypointAction(WaypointActionType.STAY,100)); 

三、WaypointMission构造:

  1、添加航点:

   1.addWaypoint(waypoint)

        传入一组wayPoint的list,就是传入一组航点,然后任务按照航点顺序去执行,一个wayPoint代表一个航点。飞机会按照上面制定的航点按顺序去执行任务,目前消费级无人机最多支持99个航点设置。

    至少要添二个点否则loadmission的时候会出错。

  2、定义飞机如何前往第一个航点:

   1.gotoFirstWaypointMode()
   (1)SAFELY:

        安全地去路上。如果当前的高度较低,则飞机将上升到航向点的同一高度。然后,它从当前高度进入路径点坐标,然后继续到路径点的高度。

   (2)POINT_TO_POINT:

        从当前的飞机点直接转到航路点。

  3、定义飞机执行所有的航点后的动作:

   1.finishedAction()
   (1)NO_ACTION:

        在完成任务后,将不再采取进一步行动。此时,飞机可由遥控器控制。

   (2)GO_HOME:

        任务完成后,飞机将返航。如果飞机离返回点有超过20米的距离,它就会回家着陆。否则,它将直接降落在目前的位置。

   (3)AUTO_LAND:

        飞机将在最后一个方向自动着陆。

   (4)GO_FIRST_WAYPOINT:

        飞机将返回其第一个航向,并在适当位置盘旋。。

   (5)CONTINUE_UNTIL_END:

        当飞机到达最后一个航点时,它将在不结束任务的情况下盘旋。操纵杆仍然可以用来把飞机沿着以前的航向向后拉。唯一能结束这一任务的方法就是召唤停止任务。

  4、航点间的航线设置:

   1.headingMode()
   (1)AUTO:

        飞机的航向总是在飞行方向。

   (2)USING_INITIAL_DIRECTION:

        当到达第一个航向点时,飞机的航向将被设置为航向。在到达第一个航向点之前,飞机的航向可以由遥控器控制。当飞机到达第一个航向点时,航向将固定。

   (3)CONTROL_BY_REMOTE_CONTROLLER:

        飞机的航向将由遥控器控制。

   (4)USING_WAYPOINT_HEADING:

        飞机的航向将逐渐设置为下一个航向,同时在两个相邻的航路点之间飞行。

   (5)TOWARD_POINT_OF_INTEREST:

        飞机的航向总是指向感兴趣的点。

  5、飞行路径模式:

   1.flightPathMode()
   (1)NORMAL:

        飞行路线将是正常的,飞机将从一个方向移动到下一个直线。

   (2)CURVED:

        飞行路径将是弯曲的,飞机将以弯曲运动从一个路径点移动到下一个路径点。但是需要配合 waypoint 的 cornerRadiusInMeters。

  6、最大飞行速度:

   1.maxFlightSpeed()

        当飞机在航路点之间飞行时,你可以使用遥控器上的油门操纵杆来抵消它的速度。getMaxFlightSpeed这是当操纵杆被推到最大偏转时的偏移量。例如,如果最大飞行速度为10米/秒,那么一路推油门操纵杆会使飞机速度增加10米/秒,而向下推则会从飞机速度中减去10米/秒。如果遥控器杆没有最大挠度,那么偏移速度将在[0,getMaxFlightSpeed]分辨率为1000步。如果偏移速度为负值,则飞机将返回到以前的航向点。当它到达第一个路径点时,它将在适当的位置盘旋,直到正速度被应用。getMaxFlightSpeed范围为[2,15]米/秒。

  7、校验设置的参数:

   1.checkParameters()
 WaypointMission waypointMission = new WaypointMission.Builder() //航点 //一定要加入俩个点以上否则不能成功执行航线任务 .addWaypoint(waypoint1) .addWaypoint(waypoint2) .waypointCount(2) //定义飞机如何前往第一个航点 .gotoFirstWaypointMode(WaypointMissionGotoWaypointMode.SAFELY) //定义飞机执行所有的航点后的动作 .finishedAction(WaypointMissionFinishedAction.GO_HOME) //航点间的航线设置 .headingMode(WaypointMissionHeadingMode.AUTO) //飞行路径模式 .flightPathMode(WaypointMissionFlightPathMode.NORMAL) .maxFlightSpeed(10) .build(); if (waypointMission.checkParameters()!=null){ 
     Log.d(TAG,"misson任务无效:"+waypointMission.checkParameters()); } 

四、WaypointMission的上传和执行和状态监听:

         operator是管理的。控制、运行和监视Waypoint任务的唯一对象。可以从MissionControl获取。

   1、加载任务

   1.loadMission()

        加载WaypointMission到设备内存中。这也验证了任务的所有信息。如果有不正确的地方,callback.result()将被调用并伴有错误。否则,callback.result()将以空值调用。即使在WaypointMission执行完成后,任务对象仍将留在设备内存中。

   2、上传任务

   1.uploadMission()

        开始向飞机上传getLoadedMission。它只能在getLoadedMission完成且getCurrentState为READY_TO_UPLOAD时被调用。如果在上一个上传过程中发生超时错误,上传操作将从上一个断点恢复。成功上传任务后,WaypointMissionState将变为READY_TO_EXECUTE。

   3、开始任务

   1.startMission()

        开始执行上传的任务。它只能在getCurrentState是READY_TO_EXECUTE时调用。任务成功启动后,getCurrentState变成EXECUTING。

   4、暂停任务

   1.pauseMission()

        暂停执行任务。只能在WaypointMissionState为EXECUTING的时候。任务成功暂停后,getCurrentState会变成EXECUTION_PAUSED。

   5、恢复暂停的任务

   1.resumeMission()

        恢复暂停的任务。只能在getCurrentState是EXECUTION_PAUSED的时候。任务成功恢复后,getCurrentState会变成EXECUTING。

   6、设置飞行速度

   1.setAutoFlightSpeed(float speed,callback)

   7、任务状态监听

   1.addListener()
   (1)onUploadUpdate:

        当上传事件发生时调用。

   (2)onDownloadUpdate:

        当上传事件发生时调用。

   (3)onExecutionStart:

        当上传事件发生时调用。

   (4)onExecutionUpdate:

        当上传事件发生时调用。

   (5)onExecutionFinish:

        当上传事件发生时调用。

 DJIError loadError= Operator.loadMission(waypointMission); if (loadError!=null){ 
     Log.d(TAG,"任务加载失败"+loadError.toString()); }else { 
     Operator.uploadMission(new CommonCallbacks.CompletionCallback() { 
     @Override public void onResult(DJIError djiError) { 
     if (djiError!=null){ 
     Log.d(TAG,"任务上传失败"+djiError.toString()); }else { 
     Log.d(TAG,"任务上传成功"); } } }); } Operator.addListener(new WaypointMissionOperatorListener() { 
     @Override public void onDownloadUpdate(WaypointMissionDownloadEvent waypointMissionDownloadEvent) { 
     } public void onUploadUpdate(WaypointMissionUploadEvent waypointMissionUploadEvent) { 
     Log.d(TAG,waypointMissionUploadEvent.getCurrentState().toString()); if (waypointMissionUploadEvent.getCurrentState().equals(WaypointMissionState.READY_TO_EXECUTE)){ 
     Operator.startMission((DJIError djiError) -> { 
     if (null == djiError) { 
     Toast.makeText(getApplicationContext(), "任务开始执行", Toast.LENGTH_SHORT).show(); Log.d(TAG, "任务开始执行"); } else { 
     Log.d(TAG, "任务执行失败" + djiError.toString()); } }); } } @Override public void onExecutionUpdate(WaypointMissionExecutionEvent waypointMissionExecutionEvent) { 
     } @Override public void onExecutionStart() { 
     } @Override public void onExecutionFinish(DJIError djiError) { 
     } }); 

Tags:DJI WapointMission

五、

   1、两个航点之间允许设定的最大距离为2km,最小距离为0.5m,最多设定99个航点,但是P4R可以设定200个航点,单条航线最长距离为40km。

   2、DJI用的坐标系为WGS84。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/205590.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月19日 下午5:40
下一篇 2026年3月19日 下午5:40


相关推荐

  • WPF Visifire 图表控件「建议收藏」

    WPF Visifire 图表控件「建议收藏」VisifireWPF图表控件激活成功教程可能用WPF生成过图表的开发人员都知道,WPF虽然本身的绘图能力强大,但如果每种图表都自己去实现一次的话可能工作量就大了,尤其是在开发时间比较紧的情况下。这时候有必要借助一种专业的图表工具。Visifire是专为WPF、SliverLight、WP开发人员制定的一套图表控件,实现了一系列的专业图表(如:柱图、…

    2022年7月21日
    18
  • Flink的sink实战之二:kafka

    Flink的sink实战之二:kafka

    2020年11月19日
    183
  • nvaicat15激活码【中文破解版】

    (nvaicat15激活码)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html0YQJ1128OW-eyJsaWNlbnNlSWQi…

    2022年3月27日
    89
  • STS将SpringBoot打包成jar包

    STS将SpringBoot打包成jar包1 先在 poml xml 添加 plugins 要使生成的 jar 可运行 需要加入此插件 plugin groupId org apache maven plugins groupId artifactId maven surefire plugin artifactId plugin plugins

    2026年3月18日
    2
  • dubbo负载均衡策略

    dubbo负载均衡策略121212dubbo负载均衡策略RandomLoadBalance–随机负载均衡默认情况下,dubbo是RandomLoadBalance,随机调用实现负载均衡,可以对不同provider设置不同

    2022年7月4日
    20
  • ajax 跨域请求api_java跨域请求的三种方法

    ajax 跨域请求api_java跨域请求的三种方法让ajax请求访问servlet,可以让ajax请求跨域,通过直接本应用中的资源servlet,ajax可以不跨域访问本应用中的servlet,让java程序发送Get,Post请求,来访问2号服务器中的的servlet。ProxyServlet发送get请求,访问b站点TargerServlet,请求响应回来数据在进行响应。首先把架包导入创建lib目录,复制进去选中右键Addaslibrary。(2)ajax跨域解决方案之代理机制的代码实现。引入架包httpclient架包。…

    2022年8月24日
    8

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号