[大疆航线] 系列(2) 基于KML或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>
posted @ 2024-07-03 23:36  李二的阳台  阅读(785)  评论(0编辑  收藏  举报