大疆无人机安卓Mobile Sdk开发(三)制定航点任务WaypointMission

article/2025/10/13 9:30:45

大疆无人机安卓Mobile Sdk开发(一)简单介绍

大疆无人机安卓Mobile Sdk开发(二)连接无人机,获取无人机信息

大疆无人机安卓Mobile Sdk开发(三)制定航点任务WaypointMission

大疆无人机安卓Mobile Sdk开发(四)读取飞机的图片和视频并下载

大疆无人机安卓Mobile Sdk开发(五)解决M300Rtk H20相机无法获取图片视频的问题

qq505057618

        mobile sdk提供了很多种任务类型,有WaypointMission,FollowMeMission,PanoramaMission,HotPointMission,TapFlyMission等,其中最主要也是最常用的就是WaypointMission,我们可以提前根据坐标规划好航点,每个航点除了坐标外还可以设置高度、航向、自定义动作等,飞机会按照制定的航点按顺序去执行任务,目前消费级无人机最多支持99个航点设置。

dji.common.mission.waypoint.WaypointMission.Builder builder = new dji.common.mission.waypoint.WaypointMission.Builder();builder.autoFlightSpeed(rawMission.getFlySpeed());builder.finishedAction(toDJI(rawMission.getFinishedAction()));builder.flightPathMode(WaypointMissionFlightPathMode.NORMAL);builder.gotoFirstWaypointMode(WaypointMissionGotoWaypointMode.SAFELY);builder.headingMode(toDJI(rawMission.getHeadingMode()));builder.maxFlightSpeed(15);builder.setExitMissionOnRCSignalLostEnabled(rawMission.exitMissionOnRCSignalLost);builder.setGimbalPitchRotationEnabled(true);builder.repeatTimes(1);

这是初始化一个WaypointMission,下面解释每个方法的含义

autoFlightSpeed

如果没有设置航点速度那么会按照任务的 autoFlightSpeed 速度飞行。与航点速度只能是正数不同,任务自动飞行速度可以是负数,取值范围是 -15 到 15 m/s。当速度是负数时,无人机会朝着前一个航点往回飞。在任务过程中,用户手中的遥控器拨杆也可以调整无人机的飞行速度。遥控器也可以让飞机往回飞。
总结一下,航点间速度只能是正数,autoFlightSpeed 和遥控器调整的速度可以是负数,可以让无人机往回飞。那么这三种方式都可以控制飞行速度,那么优先级是怎样的呢?遥控器 > 航点速度 > autoFlightSpeed。无人机优先响应遥控器的控制,其次是按照每个航点预设好的速度飞行,如果没有设置航点速度使用 autoFlightSpeed

maxFlightSpeed

前面提到的执行任务时的默认速度属性是 autoFlightSpeed。与之相关的还有 maxFlightSpeed。因为执行任务期间遥控器可以调整当前飞行速度。maxFlightSpeed 的值用来限制遥控器影响飞行速度时的最大偏移量。比如当前 autoFlightSpeed 是 5,maxFlightSpeed 的值是 10。这个时候遥控器提高飞行速度,那么速度到 10 m_s 后就不会再提高了。遥控器还可以降低飞机速度到负数,所以也同时限制了无人机往回飞的时候速度最快是 -10 m_s。往回飞如果到底第一个点飞机就会悬停。

finishedAction

FinishedAction 指的是无人机飞到最后一个航点后要进行什么操作。有五个 action 可供选择:

  • NoAction:什么都不做
  • GoHome:任务结束后返航
  • AutoLand:到达最后一个航点后自动降落
  • GoFirstWaypoint:回到第一个航点
  • ContinueUntilStop:任务的状态不会自动结束(可以继续手动控制无人机做一些操作),直到调用 stopMission 任务才会结束

headingMode

无人机在航点间飞行时的航向。有以下 5 种选择:

  • Auto:和无人机飞行方向一致
  • UsingInitialDirection:使用无人机到达第一个航点时的航向。在到达第一个航点前遥控器可以控制航向,到达第一个点后航向就固定不再改变。
  • ControlledByRemoteController:遥控器控制
  • UsingWaypointHeading:使用每个航点设置的航向
  • TowardPointOfInterest:总是朝向设置的兴趣点
    默认航向的策略是 auto。

flightPathMode

航点间的路径。默认是 normal ,使用直线飞行。如果希望按照曲线飞行,设置为 Curved,但是需要配合 waypoint 的 cornerRadiusInMeters

曲线飞行时的弧度:cornerRadiusInMeters

通常 waypoint 间的路径都是直线飞行,不过如果 pathMode 是 DJIWaypointMissionFlightPathCurved 时航点间就是以曲线飞行。在按照曲线飞行的模式下,不同航点间的弧度通过 cornerRadiusInMeters 属性调整。航点设置了航点圆角半径后,无人机就不会飞过航点的坐标,而是按照航点的设置的半径弧线飞行

gotoFirstWaypointMode

无人机如何到达第一个航点。有两种方式:

  • PointToPoint:起飞后径直朝第一个航点以最短距离飞过去。
  • Safely:无人机先垂直上升到和第一个航点同样的高度后水平飞过去。
    假设起飞地点和第一个航点的路线中有一栋楼,如果采用 Safely 模式则可以避过这栋楼,所以安全一些。

exitMissionOnRCSignalLost

无人机丢失遥控器信号后是否停止任务。Waypoint 任务航点是一次性上传好的,如果刚好某个位置遥控器信号差,只要 GPS 信号正常无人机还是可以按照规划好的航点飞行。默认值是 false,如果遥控器信号丢失,无人机继续执行任务。
如果在航点过程中需要手动控制航向,或者一些拍照动作,遥控器信号丢失肯定数据采集的就有问题了,这种场景下就会把 exitMissionOnRCSignalLost 设置成 true。

rotateGimbalPitch

布尔值,飞行过程中云台角度是否可以被设置。如果设置为 true,航点的 gimbalPitch 可以控制云台角度。

repeatTimes

任务结束后是否重复一次。默认值是 0,表示任务只执行一次。1 表示任务结束后再重复一次,那么就是总共执行两次任务。

waypointList

传入一组wayPoint的list,就是传入一组航点,然后任务按照航点顺序去执行,一个wayPoint代表一个航点。

下面我们看如何添加WayPoint

List<Waypoint> resultList = new ArrayList<>(rawList.size());for (int i = index; i < rawList.size(); i++) {DIYWaypoint item = rawList.get(i);Waypoint waypoint = new Waypoint(item.getLatLng().getLat(), item.getLatLng().getLng(), item.getAltitude());waypoint.gimbalPitch = item.getGimbalPitch();waypoint.heading = item.getHeading();waypoint.turnMode = toDJI(item.getTurnMode());waypoint.altitude = item.getAltitude();List<DIYWaypoint.DIYWaypointAction> rawActionList = item.getWaypointActions();if (rawActionList != null && rawActionList.size() > 0) {for (DIYWaypoint.DIYWaypointAction action : rawActionList) {waypoint.addAction(new WaypointAction(toDJI(action.getmActionType()), action.getmActionParam()));}}resultList.add(waypoint);}builder.waypointList(resultList);builder.waypointCount(resultList.size());

 这里我的代码是是用我自定义的类转换成大疆的WayPoint,大家可以参考官方的文档,这里wayPoint可以设置很多参数,比如设置云台的角俯仰角,飞机的航向角,飞机的高度,最主要的是到了航点飞机要执行的动作WaypointAction

Action 的执行时间最多只有 6 秒时间(除了 stay action,因为 stay 是用户主动表示要飞机停留的 action),如果一个 aciton 超过 6 秒没有执行完,这个 action 会被停止,无人机继续往下一个航点飞行。

一个 waypoint 中 action 数量没有限制,但是对所有 action 执行总时长是有限制的。DJI 也提供了actionTimeoutInSeconds 属性来自定义 action 的执行总时长限制,取值范围是 0 - 999 秒,默认是 60 秒。如果有一组 action 是重复执行的,可以设置 waypoint 的 actionRepeatTimes 来实现。actionRepeatTimes 表示配置 action 的执行次数,默认是 1 次。

 

任务的上传,开始和监听

在 DJI SDK 中 Mission 的执行是由各自对应的 operator 管理的,WaypointMission 的生命周期由 DJIWaypointMissionOperator 管理。

当WaypintMission定义完成之后,我们可以调用operator.uploadMission()去上传任务,同时我们可以监听任务的上传进度

 private void uploadMission(WaypointMission mission) {DJIError checkError = mission.checkParameters();if (checkError != null) {passResult(MISSION_UPLOAD, VALUE_FAILED, checkError.getDescription());} else {DJIError loadError = operator.loadMission(mission);if (loadError != null) {passResult(MISSION_UPLOAD, VALUE_FAILED, loadError.getDescription());} else {operator.uploadMission(djiError -> {if (djiError != null) {passResult(MISSION_UPLOAD, VALUE_FAILED, djiError.getDescription());} else {passResult(MISSION_UPLOAD, VALUE_STARTED, "");}});}}}

 

当任务上传完成之后,我们可以调用operator.startMission()去执行任务,在任务执行的过程中我们可以通过WaypointMissionOperatorListener监听任务执行的进度,同时我们也可以通过operator.startMission()去暂定任务的执行,通过operator.resumeMission会继续执行任务。

 @Overridepublic void startMission() {operator.startMission(djiError -> {if (djiError == null) {passResult(MISSION_START, VALUE_SUCCEED, "");} else {passResult(MISSION_START, VALUE_FAILED, djiError.getDescription());}});}@Overridepublic void pauseMission() {operator.pauseMission(djiError -> {if (djiError == null) {passResult(MISSION_PAUSE, VALUE_SUCCEED, "");} else {passResult(MISSION_PAUSE, VALUE_FAILED, djiError.getDescription());}});}@Overridepublic void resumeMission() {operator.resumeMission(djiError -> {if (djiError == null) {passResult(MISSION_RESUME, VALUE_SUCCEED, "");} else {passResult(MISSION_RESUME, VALUE_FAILED, djiError.getDescription());}});}

以上是一个航点任务定义和执行的流程,有不懂的欢迎交流。


http://chatgpt.dhexx.cn/article/AFgJ37Al.shtml

相关文章

ROS学习记录(四)基于ROS的A*算法仿真

代码来源:https://github.com/KailinTong/Motion-Planning-for-Mobile-Robots/tree/master/hw_2. 文章目录 前言一、获取代码二、过程演示1.启动roscore2.打开rviz3.打开rviz文件4.新建终端加载地图5.进行路径搜索 三、ROS包node.hAstar_searcher.hAstar_searcher.cppdemo_node…

利用Random Waypoint Model生成室内轨迹数据

利用Random Waypoint Model生成室内轨迹数据 1 模型简介1.1 Random Waypoint Model1.2 Random Walk Model1.3 Random Direction Model 2 生成轨迹数据链接 在做室内定位方面的实验时&#xff0c;打算利用RNN进行室内定位&#xff0c;而利用RNN做定位则需要室内行人的轨迹数据做…

pinpoint和skyWalking

首先&#xff0c;上个别人的研究成果&#xff0c;我也是踩着巨人的肩膀继续前进的。 随着pinpoint版本的迭代更新&#xff0c;这图上的结论有些已经过时了&#xff0c;比如pinpoint方面&#xff1a; 1.协议&#xff0c;最新2.1.0版本也是默认使用gRPC的&#xff1b; 2.TraceI…

航迹大师(Waypoint Master)怎么样

WayPoint Master(航迹大师)是一款针对大疆无人机倾斜摄影测量的专业级航线定制软件。 主要可分为&#xff1a;环绕航线、仿地航线、仿面航线、Lidar航线、电力航线。 1.区域环绕&#xff1a;生成区域交叉环绕航线&#xff0c;可以增强模型细节并有效减少外业照 片数量&#xff…

Autoware学习笔记waypoint_follower之pure_pursuit

1.pure_pursuit的launch文件如下。 <!-- --> <launch><arg name"is_linear_interpolation" default"True"/> <arg name"publishes_for_steering_robot" default"False"/> <!-- rosrun waypoint_fol…

寻路 Waypoint 与 NavMesh 比较

正文 1. WayPoint寻路 下图是一个典型的路点寻路 另一种方法是使用多边形来记录路径信息&#xff0c;它可以提供更多的信息给ai角色使用。下图就是一个navigation mesh。 以下列出几个WayPoint的不足之处&#xff1a; 一些复杂的游戏地图需要的WayPoint数量过于庞大有时会使角色…

CARLA 笔记(07)— 地图和导航(Landmarks、Waypoints、Lanes、Junctions、Environment Objects、路径点导航、地图导航、分层和非分层地图)

1. 地图 地图包括城镇的 3D 模型和道路定义。地图的道路定义基于 OpenDRIVE 文件&#xff0c;这是一种标准化的带注释的道路定义格式。 OpenDRIVE 定义道路、车道、路口等的方式决定了 Python API 的功能以及做出决策背后的原因。 1.1 更换地图 要改变地图&#xff0c;世界…

【Autoware】三、ROSBAG生成waypoint

1.启动Autoware cd ~/autoware.ai/ source install/setup.bash roslaunch runtime_manager runtime_manager.launch2.切换到Simulation模块 点击右侧的Ref&#xff0c;选择文件&#xff1a; /.autoware/sample_moriyama_150324.bag点击Play按钮以后&#xff0c;立马点击Paus…

第五篇:AWS deepracer student 赛道分析(Ace speedway)最佳路径,数据分析,waypoint分析(初步

文章目录 前言一,为什么需要分析赛道二&#xff0c;分析赛道需要的东西三&#xff0c;如何获得waypoint数据四&#xff0c;正式开始1.获取waypoint的数据2.处理数据 三&#xff0c;导入excel表绘图1.将txt文件导入excel表2.插入散点图3.成品图带有标识的版本最佳路径图&#xf…

unity3d WayPoint路点寻路,AI

前言 一个简单的人工智能WayPoint WayPoint: 游戏中敌人根据几个巡逻点自动巡逻&#xff0c;在巡逻过程中&#xff0c;时刻监听英雄&#xff08;敌人&#xff09;和自己距离是否达到追击范围&#xff08;不巡逻&#xff0c;追击英雄&#xff09;&#xff0c;在追击过程中&…

Unity中的AI算法和实现1-Waypoint

本文分享Unity中的AI算法和实现1-Waypoint 在Unity中, 我们有一些有趣且常见的AI算法可以研究和使用, 其中最常见的就是怪物的简单AI, 比如在RPG游戏里, 怪物在某些点定点巡逻, 当玩家进入检测区域时, 怪物会主动追击玩家, 追击到玩家后对玩家进行伤害, 或者在超过最大距离后脱…

统计中的“不相关”与“线性无关”

以上思维导图&#xff0c;看完即可理解。下述是文字介绍。 这二者是统计新手与老手都很容易混淆的两个概念&#xff0c;以下辨明一下&#xff1a; 两变量“不相关” 不相关是指二者互相独立&#xff0c;没有相关关系。注如森林里每棵树的树叶个数与村子里每个村民的体重...二…

辨析“正交”与“不相关”。

①不相关的定义是&#xff1a; ②正交的定义是&#xff1a; 若两个向量的点积为零&#xff08;即对应元素相乘之后求和为零&#xff09;&#xff0c;则称两个向量正交。 ③一对正交向量一定是不相关的&#xff0c;即正交的两个向量中&#xff0c;一个向量绝不可能用另一个向量…

【数理统计】随机变量X和Y独立一定不相关,不相关不一定独立

假设(X,Y) 均匀分布在单位元 x 2 y 2 1 x^2 y^2 1 x2y21上&#xff1a; X和Y的&#xff08;线性&#xff09;相关系数是0。为什么呢&#xff1f;直观来说&#xff0c;因为是个圆&#xff0c;如果你画一条线性回归的线&#xff0c;线的斜率是正的还是负的都不合适&#xf…

mysql的相关子查询和不相关子查询

概念介绍 嵌套在其他查询中的查询即子查询&#xff0c;子查询也叫内部查询。子查询中有相关子查询和不相关子查询&#xff1a;相关子查询是指查询结果依赖于外部查询的子查询&#xff0c;外部查询每执行一次&#xff0c;内部子查询也会执行一次&#xff1b;而不相关子查询是指…

MySQL中不相关子查询和相关子查询

嵌套在其它查询中的查询称之为子查询或内部查询。 包含子查询的查询称之为主查询或外部查询 student表 course表 score表 不相关子查询 内部查询的执行独立于外部查询&#xff0c;内部查询仅执行一次&#xff0c;执行完毕后将结果作为外部查询的条件使用 select * from sco…

《数据库系统概论》之相关子查询与不相关子查询

文章目录 前言数据表一、子查询&#xff08;subquery&#xff09;二、不相关子查询&#xff08;unrelated subqueries&#xff09;1.概念2.查询逻辑 三、相关子查询&#xff08;related subqueries&#xff09;1.概念2.查询逻辑3.带有EXISTS谓词的子查询 总结 前言 开篇感言 …

变量之间的相关性研究

目录 1 什么是相关性&#xff1f;协方差及协方差矩阵相关系数&#xff08;1&#xff09;简单相关分析&#xff08;2&#xff09;偏相关分析&#xff08;3&#xff09;复相关分析&#xff08;4&#xff09;典型相关分析 2 对已有数据的预分析2.1 绘制变量相关的热力图2.2 对热力…

独立=>不相关

独立 ⇒ \Rightarrow ⇒不相关 文章目录 独立 ⇒ \Rightarrow ⇒不相关判定定理独立性 F ( x , y ) F X ( x ) F Y ( y ) F(x,y)F_X(x)F_Y(y) F(x,y)FX​(x)FY​(y)证明不独立只需要用P(AB)≠P(A)P(B)举反例离散型连续型 不相关 ρ x y 0 \rho_{xy}0 ρxy​0(协方差为0) 性质…

MySQL 不相关子查询怎么执行?

1. 概述 从现存的子查询执行策略来看&#xff0c;半连接 (Semijoin) 加入之前&#xff0c;不相关子查询有两种执行策略&#xff1a; 策略 1&#xff0c;子查询物化&#xff0c;也就是把子查询的执行结果存入临时表&#xff0c;这个临时表叫作物化表。 explain select_type …