如何获取飞行器状态

Completed

Comments

6 comments

  • Boerma

    pushMode是推送策略,0代表以0.5Hz频率推送(osd主题),1代表只在状态内容发生变化时推送(state主题)。

    accessMode 是该状态可读写状态。r代表可读,w代表可写(即控制端可以下发指令修改无人机该状态)

    0
    Comment actions Permalink
  • 久伴

    但是我启动无人机,关闭无人机,启动机翼,关闭机翼都没有收到mode_code字段

      当pushMode=0时。不是会按照将以 0.5HZ 的频率定时上报吗,但是怎么没有上报mode_code字段呢?

    @Override
    @Router(inputChannel = ChannelName.INBOUND)
    protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
    MessageHeaders headers = message.getHeaders();
    String topic = headers.get(MqttHeaders.RECEIVED_TOPIC).toString();
    byte[] payload = (byte[])message.getPayload();

    log.debug("received topic: {} \t payload =>{}", topic, new String(payload));

    CloudApiTopicEnum topicEnum = CloudApiTopicEnum.find(topic);
    MessageChannel bean = (MessageChannel) SpringBeanUtils.getBean(topicEnum.getBeanName());

    return Collections.singleton(bean);
    }

    这一段代码是会收到所有的topic吗?  如果不是,请问是在哪里接收,如果是,请问为什么没有mode_code的字段。

    •  
    0
    Comment actions Permalink
  • Boerma

    是能收到osd上报,但是没有mode_code字段是吗?

    如果是上面的情况,有可能是因为无人机状态字段是分几次上报,导致你没注意到。由于无人机状态数据太多,所有状态数据分3条消息上报。每条消息data结构不一样。

    0
    Comment actions Permalink
  • 久伴

    好的已经找到了,还有个问题 mqtt发送的数据,如果某个字段的值是空的,就不会推送到服务器上是吗?

    0
    Comment actions Permalink
  • 久伴

    还有个问题 ,为什么飞行器的longitude当前位置经度latitude当前位置纬度 都是 0 呢?

     

    0
    Comment actions Permalink
  • Boerma

    字段是固定的,即使获取不到也会给一个非法值。无人机是需要有gps信号或者rtk正常情况下才会有位置。室内是不行的

    0
    Comment actions Permalink

Please sign in to leave a comment.