大疆上云API连接遥控器和无人机

文章目录

1、部署大疆上云API

关于大疆上云API的部署,可以看我写的另一篇文章,大疆上云API基于源码部署-CSDN博客。或者看官网上云API (dji.com),里面也有相关的部署教程。注意了,阅读本篇文章,需要看一下大疆上云API基于源码部署-CSDN博客,这篇文章。不然本文章提到的上云API后台管理界面,EMQX管理界面是什么可能都一头雾水。

关于如何连接我们自己部署的上云API

关于如何连接我们自己部署的上云API,大家可以看官网上云API (dji.com),官网有视频教程,建议先看一遍官网,然后再看以下这篇文章,这篇文章也是根据官网来进行学习的,只不过是记录了我在连接遥控器的这个过程中遇到的一些问题,方便我后面排查问题。


2、开启无人机和遥控器并连接自己部署的上云API

下面是遥控器的界面,打开 pilot 2,进入主页面,点击云服务进入。

屏幕像手机一样下拉,保证遥控器跟电脑连的是同一个WiFi或者热点!!!保证遥控器跟电脑连的是同一个WiFi或者热点!!!保证遥控器跟电脑连的是同一个WiFi或者热点!!!

点击类似云的那个图标

输入前端访问地址(默认地址:http://ip:8080/pilot-login ,此处"ip"需要替换为用户实际使用的ip地址。),点击右上角的"连接"按钮进入。

输入完成版之后,点击右上角的连接按钮。

连接成功之后,会进入一个登录界面,如果是源码部署,用户名和密码默认会帮我们填上的。直接点击几登录即可。

这段文字说明结合下面的一张图片看,如果主页面显示 Connected,说明已经登录成功,遥控器已经连接上 emqx 服务器,并且开始推送数据。现在demo 就已经跑起来了,你可以点击遥控器上的返回按钮返回主页面了,只要不点击右上角的 Log Out 按钮,你就仍然处于登录状态。当Test Group One中出现Connected。说明遥控器成功连接到我们部署的上云API了。

如果遥控器和无人机没有对频的情况下即只有遥控器没有无人机的情况下

如果出现device not connect说明遥控器没有连接无人机。也就是说无人机可能没开机。

电脑端,登录后台管理界面http://localhost:8080/project,然后在后台管理界面也可以看到无人机没有连接,遥控器连接上了。

回到遥控器,点击返回按钮,回到登录界面。然后,我们开启无人机,让遥控器和无人机拦截上。

如果遥控器和无人机已经对频好了的情况下

你已经可以在主页面看到工作空间的信息了,只要字体是深黑色,说明你依旧处于登录状态,遥控器以及飞机的数据会持续的推送中。如果想要退出工作空间,只需要再次点击进入,然后点击右上角的退出按钮就可以退出了,遥控器和飞机就不会再推送数据了。连接上遥控器之后,根据下面的图片步骤,重新进入登录界面。

因为没有点击退出登录,所以上面图片那里直接点击的时候,就直接省去了登录步骤了,能够直接进入下面的图片界面,这段后面的文字结合下面的图片看,刚进入的时候可以看到Remote Control Sn:遥控器的SN码。Aircraft Sn:飞机的SN码。然后点击图片中红色箭头指的那里,绑定无人机。

如果不绑定,电脑端的页面看到的还是,遥控器连接了,飞机还是没有连接上。

绑定成功之后,在后端即电脑端的页面看到的还是,遥控器连接了,飞机也连接上了。

到这里说明无人机和遥控器都连接上我们自己部署的上云API了。

4、订阅无人机或遥控器的主题信息

4.1、订阅无人机实时返回的数据如经纬度信息等

登录emqx的管理界面,http://localhost:18083/,在首页我们可以看到20多个主题和订阅数

我们点击26主题数那里,可以发现对应的主题列表。看到主题列表的时候,我们可以到官网找对应的主题说明进行查找订阅。

上云API (dji.com),可以到官网这里找对应的主题说明。

官网上说的类似thing/product/{device_sn}/osd这个,{device_sn} 表示该物模型属性的所属设备的 SN ,这里可以是遥控器、也可以是无人机的SN。所以,在emqx管理页面中直接搜索osd可以看到,对应的主题会有两个,一个是遥控器的主题,一个是无人机的主题。如下图所示,图片中的SN码我模糊处理了,如果想要订阅的主题是,无人机还是遥控器的主题,通过遥控器那里看一下就知道了,文章上面连接的时候也说过这个,具体看一下就知道了,总之这个SN码可以通过遥控器找到。可以在emqx管理界面直接找到对应的主题赋值即可。

使用MQTTX客户端订阅,至于MQTTX客户端如何使用,看我的另一篇文章EMQX允许匿名访问和关闭匿名访问_emqx匿名访问-CSDN博客,可以看到对应的信息内容。

订阅成功之后,每隔一段时间就会收到无人机返回的信息

以下是无人机返回的信息详细字段

javascript 复制代码
{
  "bid": "00000000-0000-0000-0000-000000000000",
  "data": {
    "66-0-0": {
      "gimbal_pitch": 0,
      "gimbal_roll": 0,
      "gimbal_yaw": -79,
      "payload_index": "66-0-0",
      "zoom_factor": 0.56782334384858046
    },
    "activation_time": 1684465935,
    "attitude_head": -79,
    "attitude_pitch": 4.3,
    "attitude_roll": 0,
    "battery": {
      "batteries": [
        {
          "capacity_percent": 60,
          "firmware_version": "08.75.02.17",
          "high_voltage_storage_days": 0,
          "index": 0,
          "loop_times": 34,
          "sn": "4ERPKCSEA1941Q",
          "sub_type": 0,
          "temperature": 35.2,
          "type": 0,
          "voltage": 15568
        }
      ],
      "capacity_percent": 60,
      "landing_power": 0,
      "remain_flight_time": 0,
      "return_home_power": 0
    },
    "cameras": [
      {
        "camera_mode": 0,
        "liveview_world_region": {
          "bottom": 0.572773039340973,
          "left": 0.41576647758483887,
          "right": 0.547674596309662,
          "top": 0.4417940080165863
        },
        "payload_index": "66-0-0",
        "photo_state": 0,
        "record_time": 0,
        "recording_state": 0,
        "remain_photo_num": 4464,
        "remain_record_duration": 0,
        "wide_calibrate_farthest_focus_value": 26,
        "wide_calibrate_nearest_focus_value": 75,
        "wide_exposure_mode": 1,
        "wide_exposure_value": 16,
        "wide_focus_mode": 0,
        "wide_focus_state": 0,
        "wide_focus_value": 24,
        "wide_iso": 7,
        "wide_max_focus_value": 75,
        "wide_min_focus_value": 26,
        "wide_shutter_speed": 26,
        "zoom_calibrate_farthest_focus_value": 26,
        "zoom_calibrate_nearest_focus_value": 75,
        "zoom_exposure_mode": 1,
        "zoom_exposure_value": 16,
        "zoom_factor": 7,
        "zoom_focus_mode": 0,
        "zoom_focus_state": 0,
        "zoom_focus_value": 24,
        "zoom_iso": 7,
        "zoom_max_focus_value": 75,
        "zoom_min_focus_value": 26,
        "zoom_shutter_speed": 26
      }
    ],
    "distance_limit_status": {
      "distance_limit": 8000,
      "is_near_distance_limit": 0,
      "state": 1
    },
    "elevation": 0,
    "exit_wayline_when_rc_lost": 0,
    "firmware_version": "10.01.0017",
    "gear": 1,
    "height": 1881.01611328125,
    "height_limit": 500,
    "home_distance": 0,
    "horizontal_speed": 0,
    "is_near_height_limit": 0,
    "latitude": 0,
    "longitude": 0,
    "maintain_status": {
      "maintain_status_array": [
        {
          "last_maintain_flight_sorties": 0,
          "last_maintain_flight_time": 0,
          "last_maintain_time": 0,
          "last_maintain_type": 1,
          "state": 0
        },
        {
          "last_maintain_flight_sorties": 0,
          "last_maintain_flight_time": 0,
          "last_maintain_time": 0,
          "last_maintain_type": 2,
          "state": 0
        },
        {
          "last_maintain_flight_sorties": 0,
          "last_maintain_flight_time": 0,
          "last_maintain_time": 0,
          "last_maintain_type": 3,
          "state": 0
        }
      ]
    },
    "mode_code": 0,
    "night_lights_state": 0,
    "obstacle_avoidance": {
      "downside": 1,
      "horizon": 1,
      "upside": 1
    },
    "position_state": {
      "gps_number": 0,
      "is_fixed": 0,
      "quality": 0,
      "rtk_number": 0
    },
    "rc_lost_action": 2,
    "rth_altitude": 100,
    "storage": {
      "total": 60082000,
      "used": 14325000
    },
    "total_flight_distance": 899443.07084439753,
    "total_flight_sorties": 204,
    "total_flight_time": 123809.71723263711,
    "track_id": "",
    "vertical_speed": 0,
    "wind_direction": 0,
    "wind_speed": 0
  },
  "tid": "00000000-0000-0000-0000-000000000000",
  "timestamp": 1736411578239,
  "gateway": "5YSZKCC00212VA"
}

4.2、订阅遥控器返回的数据如经纬度等


以下是遥控器返回的信息详细字段

javascript 复制代码
{
  "bid": "00000000-0000-0000-0000-000000000000",
  "data": {
    "app_version": "170507",
    "capacity_percent": 73,
    "height": 0,
    "latitude": 25.071488888301314,
    "longitude": 102.7189911396629,
    "wireless_link": {
      "4g_freq_band": 5.8,
      "4g_gnd_quality": 0,
      "4g_link_state": 0,
      "4g_quality": 0,
      "4g_uav_quality": 0,
      "dongle_number": 0,
      "link_workmode": 0,
      "sdr_freq_band": 5.8,
      "sdr_link_state": 1,
      "sdr_quality": 5
    }
  },
  "tid": "00000000-0000-0000-0000-000000000000",
  "timestamp": 1736411740242,
  "gateway": "5YSZKCC00212VA"
}

后续会考虑写一篇JS如何订阅EMQX发布的主题的文章,毕竟拿到无人机这个实时的经纬度信息,我们如果在三维地图或者二维地图开发时,可以让无人机飞行,将实时拿到的无人机经纬度在地图上更新显示,类似地图中的某一点根据无人机飞行实时移动位置。还是需要使用到的。