首页 > 其他分享 >[大疆航线] 系列(2) 基于KML或WPML文件的航点动作设计与自定义航线

[大疆航线] 系列(2) 基于KML或WPML文件的航点动作设计与自定义航线

时间:2024-07-03 23:43:09浏览次数:18  
标签:文件 航线 航点 自定义 KML KMZ WPML

关键词:无人机航线航点动作kml航线文件wpml航线软件 作者:ludwig1860 日期:2024.7.3

1. KML的高级使用

如果需要精准控制每个航点以及航点处的动作,就需要对KML文件进行调整。怎么调整呢?

    1. 从DJI Pilot地面站软件中自行编辑一个满足自己所有调整需求的航线(仅包含几个航点即可,目的是为了导出KML文件后查看各个动作标签是什么,该怎么写)
    1. 导出KML后,按照该KML文件的格式,自行写代码生成KML文件
    1. 将自定义的KML文件导入至DJI Pilot 或者GS PRO,即可执行该航线。

特别注意:目前该种方式生成的KML文件支持DJI Pilot, DJI Pilot 2,可能在GS PRO上存在些问题(GS PRO导入KML文件的功能是额外收费的哦)。不支持GS RTK。

以下截取了该种KML文件的一部分,可以看到,对于航点1,无人机的偏航角被调整为135°,云台的俯仰角被调整为-30°,飞行高度的模式为相对地面高度。

<Placemark>
     <name>Waypoint1</name>
     <visibility>1</visibility>
     <description>Waypoint</description>
     <styleUrl>#waypointStyle</styleUrl>
     <ExtendedData xmlns:mis="www.dji.com">
      <mis:useWaylineAltitude>false</mis:useWaylineAltitude>
      <mis:turnMode>Auto</mis:turnMode>
      <mis:heading>135</mis:heading>
      <mis:gimbalPitch>-30</mis:gimbalPitch>
      <mis:actions>ShootPhoto</mis:actions>
     </ExtendedData>
     <Point>
      <altitudeMode>relativeToGround</altitudeMode>
      <coordinates>114.22104084422674,39.82171229314839,100.14499999999998</coordinates>
     </Point>
    </Placemark>

注意:以上KML文件每个航点的坐标顺序:经度纬度高程

2. KML与WPML文件

先给大家看一段大疆给出的一个背景:

在过去很长的一段时间里,航线仅能在单一设备上编辑、执行,跨设备跨机型应用困难重重。航线文件格式不公开、不共享,用户难以独立完成二次编辑、业务调优的工作。

本着为行业和用户解放重复生产力的愿景,大疆正式对外发布航线文件格式标准——WPML (WayPoint Markup Language 的缩写)。

一头雾水是吧,我刚一开始也意识不到,其实大家可以想象这样一个场景,当你费了很大劲设计了一条航线,用在你的御3无人机上挺好的,但是自己或者别人也想用一下这个航线,并且用在经纬M300上时,那就又需要重新画一次航线,这不就是重复劳动了嘛。

所以大疆想着将这些机型的航线格式进行统一,也就是标准化,进而推出了WPML文件。

特别注意:WPML 航线文件格式标准基于 KML(Keyhole Markup Language)的定义进行扩展。WPML 航线文件遵循 KMZ 归档要求,所有航线文件以 “.kmz” 后缀结尾。

KMZ文件实质是使用 ZIP 格式打包的归档文件,也就是说,直接将压缩包的后缀名zip更改为kmz。

WPML 航线文件解压后的文件结构(res文件夹可以没有):

waypoints_name.kmz
└── wpmz
  ├── res  // 资源文件
  ├── template.kml  // 模板文件
  └── waylines.wpml  // 执行文件

注意

  • 航线文件内部各文件或文件夹的命名请遵循此规范,否则可能导致航线文件读取失败。
  • 航线名称即航线文件的文件名。如new_waypoints.kmz的航线名称是new_waypoints
  • 该WPML文件目前仅支持御3行业版、多光谱版、经纬300 RTK、经纬350 RTK等行业用途无人机。

有关该航线文件的详细介绍,请查阅:Link,还有一些MSDK的航线编辑教程:Link。如果需要自己开发航线规划软件,可以参考大疆的说明,把各个字段搞清楚,通过参数控制无人机的指令。

特别注意

  • 当导入WPML的KMZ文件到Pilot 2地面站时,KMZ文件中的template.kml是必须的,而waylines.wpml不是必须的。 当Pilot 2生成具体执行航线时,会自动在该KMZ文件中生成对应的waylines.wpml

  • 当导入WPML的KMZ文件到司空 2 (英文名为Flighthub 2)地面站时, KMZ文件中必须在wpmz文件夹中同时包含template.kmlwaylines.wpml,方能被司空2识别和解析。

司空2是在线的Link,目前可以免费使用哦。

如下展示了template.kml文件中某个航点的飞行动作指令,确实有点复杂了。

<Placemark>
        <Point>
          <coordinates>116.25419,40.25471</coordinates>
        </Point>
        <wpml:index>1</wpml:index>
        <wpml:ellipsoidHeight>74.3602094162653</wpml:ellipsoidHeight>
        <wpml:height>74.3602094162653</wpml:height>
        <wpml:gimbalPitchAngle>-32.0</wpml:gimbalPitchAngle>
        <wpml:waypointHeadingParam>
          <wpml:waypointHeadingMode>smoothTransition</wpml:waypointHeadingMode>
          <wpml:waypointHeadingAngle>39.0</wpml:waypointHeadingAngle>
          <wpml:waypointPoiPoint>0.000000,0.000000,0.000000</wpml:waypointPoiPoint>
          <wpml:waypointHeadingPathMode>followBadArc</wpml:waypointHeadingPathMode>
          <wpml:waypointHeadingPoiIndex>0</wpml:waypointHeadingPoiIndex>
        </wpml:waypointHeadingParam>
        <wpml:waypointSpeed>4</wpml:waypointSpeed>
        <wpml:useGlobalHeight>1</wpml:useGlobalHeight>
        <wpml:useGlobalSpeed>0</wpml:useGlobalSpeed>
        <wpml:useGlobalTurnParam>1</wpml:useGlobalTurnParam>
        <wpml:useStraightLine>0</wpml:useStraightLine>
        <wpml:actionGroup>
          <wpml:actionGroupId>2</wpml:actionGroupId>
          <wpml:actionGroupStartIndex>1</wpml:actionGroupStartIndex>
          <wpml:actionGroupEndIndex>1</wpml:actionGroupEndIndex>
          <wpml:actionGroupMode>sequence</wpml:actionGroupMode>
          <wpml:actionTrigger>
            <wpml:actionTriggerType>reachPoint</wpml:actionTriggerType>
          </wpml:actionTrigger>
          <wpml:action>
            <wpml:actionId>0</wpml:actionId>
            <wpml:actionActuatorFunc>zoom</wpml:actionActuatorFunc>
            <wpml:actionActuatorFuncParam>
              <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
              <wpml:focalLength>36.0</wpml:focalLength>
            </wpml:actionActuatorFuncParam>
          </wpml:action>
          <wpml:action>
            <wpml:actionId>1</wpml:actionId>
            <wpml:actionActuatorFunc>rotateYaw</wpml:actionActuatorFunc>
            <wpml:actionActuatorFuncParam>
              <wpml:aircraftHeading>51.0</wpml:aircraftHeading>
              <wpml:aircraftPathMode>counterClockwise</wpml:aircraftPathMode>
            </wpml:actionActuatorFuncParam>
          </wpml:action>
          <wpml:action>
            <wpml:actionId>2</wpml:actionId>
            <wpml:actionActuatorFunc>gimbalRotate</wpml:actionActuatorFunc>
            <wpml:actionActuatorFuncParam>
              <wpml:gimbalRotateMode>absoluteAngle</wpml:gimbalRotateMode>
              <wpml:gimbalPitchRotateEnable>1</wpml:gimbalPitchRotateEnable>
              <wpml:gimbalPitchRotateAngle>-32.0</wpml:gimbalPitchRotateAngle>
              <wpml:gimbalRollRotateEnable>0</wpml:gimbalRollRotateEnable>
              <wpml:gimbalRollRotateAngle>0.0</wpml:gimbalRollRotateAngle>
              <wpml:gimbalYawRotateEnable>0</wpml:gimbalYawRotateEnable>
              <wpml:gimbalYawRotateAngle>0.0</wpml:gimbalYawRotateAngle>
              <wpml:gimbalRotateTimeEnable>0</wpml:gimbalRotateTimeEnable>
              <wpml:gimbalRotateTime>0.0</wpml:gimbalRotateTime>
              <wpml:payloadPositionIndex>0</wpml:payloadPositionIndex>
            </wpml:actionActuatorFuncParam>
          </wpml:action>
        </wpml:actionGroup>
      </Placemark>

标签:文件,航线,航点,自定义,KML,KMZ,WPML
From: https://www.cnblogs.com/ludwig1860/p/18282760

相关文章

  • java使用sshd 实现sftp 自定义显示目录
       pom.xml<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-core</artifactId><version>5.8.28</version></dependency>......
  • Vue3实战笔记(64)—Vue 3自定义指令的艺术:实战中的最佳实践
    文章目录前言一、一些简单的Vue3自定义指令超实用案例总结前言书接上文,在Vue3中,自定义指令是一种强大的工具,允许我们扩展HTML元素的功能。通过自定义指令,我们可以创建可重用的行为,并将它们绑定到任何元素上。下面,本文备份一些简单的Vue3自定义指令超实用案例,并解释......
  • 关于自定义unordered_set\unordered_map中Hash和KeyEqual:函数对象和lambda表达式简单
    以unordered_set为例,首先在cppreference中查看其模板定义:可以看到Hash类默认是std::hash<Key,KeyEqual类似,本文将Hash以函数对象写出,将KeyEqual以lambda写出。classhashvec{ public: size_toperator()(constvector<int>&vec)const{ returnhash<int>()(vec[0])+hash......
  • 调用自定义模块出现ModuleNotFoundError
    产生问题的原因:IDE(pycharm)没有将自定义模块所在目录添加到工作目录中,导致在搜索目录中找不到要调用的模块。Python会在以下路径中搜索它想要寻找的模块:程序所在的文件夹标准库的安装路径操作系统环境变量PYTHONPATH所包含的路径解决方法1:在调用自定义模块前先将自定义模块/......
  • 企业微信hook,自定义工具,收发消息
    协议版本示例:    企业微信协议开发,配置服务器开启服务端,接口开发企业微信协议接口开发,接收发送json数据即可;接口调用:http请求      接下来拿uuid去调用其他接口即可例:发送位置      请求方式POSTContentType:”application/jso......
  • Django 自定义用户表
    当默认的用户表中字段不足以满足我们的业务需求时,可以自己继承和重写用户表,增加想要的字段。1.自定义用户表模型fromdjango.dbimportmodelsfromdjango.contrib.auth.modelsimportAbstractUser#重新定义用户表classUserProfile(AbstractUser):avatar=model......
  • 从零开始带你上手体验Sermant自定义插件开发
    本文分享自华为云社区《Sermant自定义插件开发上手体验》,作者:华为云开源。一、研究缘由由于目前我们所处的行业是汽车行业,项目上进行云服务的迁移时使用到了Sermant中的相关插件,为了加深对Sermant开发和运行机制的了解,我们从零开始体验Sermant自定义插件的开发。下面我们就Se......
  • cesium 添加 Echarts图层(航线图)
    cesium添加Echarts航线图(下面附有源码)1、实现思路1、在scene上面新增一个canvas画布2、通坐标转换,将经纬度坐标转为屏幕坐标来实现3、将ecarts中每个series数组中元素都加coordinateSystem:‘cesiumEcharts’2、示例代码<!DOCTYPEhtml><htmllang=......
  • 自定义ORM框架
    手撕ORM框架1.创建Maven工程2.导入依赖<dependencies><!--引入jdbc的依赖--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><versi......
  • Dockerfile语法,自定义镜像
    我们一直在使用别人准备好的镜像,那如果我要部署一个Java项目,把它打包为一个镜像该怎么做呢?镜像结构要想自己构建镜像,必须先了解镜像的结构。镜像之所以能让我们快速跨操作系统部署应用而忽略其运行环境、配置,就是因为镜像中包含了程序运行需要的系统函数库、环境、配置、依......