iNavFlight之MSP v2 Sensor报文格式

  • 1. MSP v2传感报文介绍
  • 2. MSP v2协议格式
  • 3. MSP v2传感代码流程
  • 4. MSP v2 传感器
    • 4.1 光流传感报文-MSP2_SENSOR_RANGEFINDER
    • 4.2 测距传感报文-MSP2_SENSOR_OPTIC_FLOW
    • 4.3 GPS传感报文-MSP2_SENSOR_GPS
    • 4.4 磁力计传感报文-MSP2_SENSOR_COMPASS
    • 4.5 气压计传感报文-MSP2_SENSOR_BAROMETER
    • 4.6 空速计传感报文-MSP2_SENSOR_AIRSPEED
  • 5. 参考资料

1. MSP v2传感报文介绍

鉴于飞控近年来发展历程及趋势

  1. 设计成熟度的提升
  2. 大量传感器的应用
  3. 传感器干扰问题分析
  4. 硬件接口多样化问题
  5. 软件设计复杂度的提高
  6. 配置&使用的简洁化要求

在传感器应用领域,期望更多的标准化设计,MSPv2协议在拓展v1时,就考虑了这方面的需求。

  1. 硬件接口:Rx/Tx/VCC/GND (UART)
  2. 软件接口:MSP v2协议格式
  3. 报文解析:根据command来表征和区分不同传感器数据

2. MSP v2协议格式

  +---+---+--------+---------+--------+------+---------+------------------------------+-------------+|                            Multiwii Serial Protocol V2                length = 9 + payload size |+---+---+--------+---------+--------+------+---------+------------------------------+-------------+| $ | X | < ! >  | flag(1) | cmd(2)        | size(2) | payload(16bit len)           | checksum_v2 |+---+---+--------+---------+--------+------+---------+------------------------------+-------------+
  • ‘$’:表示SOF(Start Of a frame)
  • ‘X’:表示V2
  • ‘<’: 表示request
  • ‘>’:表示response
  • ‘!’:表示error
  • payload: 传感数据

这里要注意的一个问题是网络字节序,尤其是对通信比较熟悉的朋友。常规的逻辑是这样的:

发送端CPU字节序 — Host2Network转换字节序 —> 网络传输(大端字节序) — Network2Host转换字节序 —> 接收端CPU字节序
上述两个逻辑转换:Host2Network/Network2Host来确保发送和接受CPU能根据本地的存储字节序来解析多字节变量

【但是】飞控代码上看,串口收到报文以后,直接将buffer一个指针强行变换到定义的结构体上了。

【好嘛,这么粗暴处理!!!】STM32可是小端字节序的呀,这么大胆??? 猜测这些传感模块大都是小端字节序或者8位单片机,所以整个系统都是小端的,就没有大系统这么复杂了。

3. MSP v2传感代码流程

iNav应用代码从main开始进入,根据配置信息使能串口;当串口收到传感器MSP v2传感报文时,将信息送到mspProcessSensorCommand进行解析。

taskHandleSerial└──> mspSerialProcess└──> mspFcProcessCommand└──> mspProcessSensorCommandmain└──> init└──> fcTasksInit   //setTaskEnabled(TASK_SERIAL, true);

4. MSP v2 传感器

截止发稿日,在MSP v2协议上支持的传感器根据cmd(2),有如下几种:

src/main/msp/msp_protocol_v2_sensor.h

#define MSP2_IS_SENSOR_MESSAGE(x)   ((x) >= 0x1F00 && (x) <= 0x1FFF)#define MSP2_SENSOR_RANGEFINDER     0x1F01
#define MSP2_SENSOR_OPTIC_FLOW      0x1F02
#define MSP2_SENSOR_GPS             0x1F03
#define MSP2_SENSOR_COMPASS         0x1F04
#define MSP2_SENSOR_BAROMETER       0x1F05
#define MSP2_SENSOR_AIRSPEED        0x1F06

4.1 光流传感报文-MSP2_SENSOR_RANGEFINDER

mspSensorOpflowDataMessage_t

typedef struct __attribute__((packed)) {uint8_t quality;    // [0;255]int32_t motionX;int32_t motionY;
} mspSensorOpflowDataMessage_t;

4.2 测距传感报文-MSP2_SENSOR_OPTIC_FLOW

mspSensorRangefinderDataMessage_t

typedef struct __attribute__((packed)) {uint8_t quality;    // [0;255]int32_t distanceMm; // Negative value for out of range
} mspSensorRangefinderDataMessage_t;

4.3 GPS传感报文-MSP2_SENSOR_GPS

mspSensorGpsDataMessage_t

typedef struct __attribute__((packed)) {uint8_t  instance;                  // sensor instance number to support multi-sensor setupsuint16_t gpsWeek;                   // GPS week, 0xFFFF if not availableuint32_t msTOW;uint8_t  fixType;uint8_t  satellitesInView;uint16_t horizontalPosAccuracy;     // [cm]uint16_t verticalPosAccuracy;       // [cm]uint16_t horizontalVelAccuracy;     // [cm/s]uint16_t hdop;int32_t  longitude;int32_t  latitude;int32_t  mslAltitude;       // cmint32_t  nedVelNorth;       // cm/sint32_t  nedVelEast;int32_t  nedVelDown;uint16_t groundCourse;      // deg * 100, 0..36000uint16_t trueYaw;           // deg * 100, values of 0..36000 are valid. 65535 = no data availableuint16_t year;uint8_t  month;uint8_t  day;uint8_t  hour;uint8_t  min;uint8_t  sec;
} mspSensorGpsDataMessage_t;

4.4 磁力计传感报文-MSP2_SENSOR_COMPASS

mspSensorCompassDataMessage_t

typedef struct __attribute__((packed)) {uint8_t  instance;uint32_t timeMs;int16_t  magX; // mGauss, frontint16_t  magY; // mGauss, rightint16_t  magZ; // mGauss, down
} mspSensorCompassDataMessage_t;

4.5 气压计传感报文-MSP2_SENSOR_BAROMETER

mspSensorBaroDataMessage_t

typedef struct __attribute__((packed)) {uint8_t  instance;uint32_t timeMs;float    pressurePa;int16_t  temp; // centi-degrees C
} mspSensorBaroDataMessage_t;

4.6 空速计传感报文-MSP2_SENSOR_AIRSPEED

mspSensorAirspeedDataMessage_t

typedef struct __attribute__((packed)) {uint8_t  instance;uint32_t timeMs;float    diffPressurePa;int16_t  temp;              // centi-degrees C
} mspSensorAirspeedDataMessage_t;

5. 参考资料

【1】BetaFlight模块设计之三十二:MSP协议模块分析
【2】Multiwii Serial Protocol Version 2
【3】传感模块:MATEKSYS Optical Flow & LIDAR 3901-L0X

iNavFlight之MSP v2 Sensor报文格式相关推荐

  1. iNavFlight之MSP DJI协议飞控端请求应答

    iNavFlight之MSP DJI协议飞控端请求应答 1. 报文格式 2. 报文标志(flag) 3. 报文命令(cmd) 4. 请求应答 & 反馈报文 4.1 DJI_MSP_API_VE ...

  2. ARP协议的报文格式

    结构ether_header定义了以太网帧首部:结构arphdr定义了其后的5个字段,其信息 用于在任何类型的介质上传送ARP请求和回答:ether_arp结构除了包含arphdr结构外, 还包含源主 ...

  3. tcp报文格式_面试必备TCP(一):三次握手

    TCP大家都知道是什么东西,这个协议的具体报文格式如下: 标志位 URG:指示报文中有紧急数据,应尽快传送(相当于高优先级的数据). PSH:为1表示是带有push标志的数据,指示接收方在接收到该报文 ...

  4. 四、HTTP响应报文格式

    一.响应报文格式 HTTP的响应报文的通用格式如下 主要包括状态行.首部行.空行和实体体,和请求报文的结构类似 示例 状态行 HTTP/1.1 200 OK\r\n 常见的状态码的类别如下 常用状态码 ...

  5. MQTT——控制报文格式

    了解控制报文格式是学习MQTT中,笔者认为最为重要的一个知识点.MQTT的所有行为都离不开他.控制报文可以分为三个部分组成,分别为:固定报头.可以变报头.有效载荷部分. 注意:上面的说的报文的类型.是 ...

  6. RLC协议简单理解1-RLC报文格式

    RLC协议简介 RLC(Radio Link Control)在无线协议架构中属于数据面协议中的一部分,数据传输从基站到终端的过程中,一共要经历UDP/SCTP-->SDAP/RRC--> ...

  7. webservice发送xml报文_海关总署公告2020年第120号(关于发布进出境公路运输工具货运舱单电子传输报文格式V1.1的公告)...

    点击上方蓝色字体,关注我们 为切实加强公路进出境运输工具及货运舱单管理,进一步规范相关电子数据申报传输要求,根据海关总署2020年第113号公告,我署对进出境公路运输工具货运舱单电子传输报文中部分数据 ...

  8. DNS报文格式(RFC1035)

    2.资源记录定义(RR definitions)     2.1 格式         后面分析报文的时候详细解释.     2.2 类型值(TYPE values)         类型主要用在资源 ...

  9. 【计算机网络】HTTP 与 HTTPS ( HTTP 发展过程 | HTTP/1.1 与 HTTP/2 对比 | HTTP 报文格式 )

    文章目录 前言 一.HTTP 发展过程 二.HTTP/1.1 与 HTTP/2 对比 三.HTTP 报文格式 前言 目前如果在浏览器中访问 http 网站 , 浏览器会提示不安全 , 如下图 : 如果 ...

最新文章

  1. Paddle Release Note
  2. 2016.4.2 动态规划练习--讲课整理
  3. 「Python」ubuntu使用make命令安装python(带详细解释和防坑指南)
  4. linux 定时器 代码,linux C++ 定时器代码
  5. linux 如何取执行一个脚本5000次,【shell笔记脚本】嵌套、控制循环以及处理循环输出...
  6. 使用sersync实现多台服务器实时同步文件
  7. 北理计算机未来,2021北理计算机专硕889考研经验分享
  8. 尚硅谷设计模式-观察者模式
  9. 使用正则表达式实现网页爬虫的思路详解
  10. 小学计算机专业说课稿模板,小学信息技术说课稿模板汇总八篇
  11. mariadb相关说明
  12. 短期盈利无望,Uber到底值多少钱?
  13. web渗透--vnc密码破解
  14. 安全检查监理项目部材料清单
  15. 微信公众号开发(五)个性化菜单
  16. 参考文献格式国家标准GB T7714-2015
  17. 怎么将几张pdf合并成一张_如何将多个pdf文件合并成一个pdf文件?
  18. 0.96寸OLED显示屏驱动手册(SSD1306)
  19. spring boot车辆管理系统毕业设计源码031034
  20. 同一张表查询一个字段为空则取另一个字段

热门文章

  1. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java宠物医院管理系统fy9ez
  2. opencv学习笔记十八:模板匹配(cv2.matchTemplate、cv2.minMaxLoc)
  3. 后浪HTML5推前浪Flash:2020,为何大家都不支持Flash了?
  4. static变量和普通变量的区别
  5. 解决 Vmware 虚拟机安装linux系统无法联网的的问题
  6. 2-44 JQuery
  7. 异常:getInputStream() has already been called for this request
  8. 《石头迷阵》游戏业务数据设计、游戏功能制作、游戏界面绘制
  9. 55 非谓语动词语法
  10. 对比学习-SimSiam-论文精读解析