iNavFlight之MSP v2 Sensor报文格式

2023-05-16

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
         └──> mspProcessSensorCommand

main
 └──> 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 setups
    uint16_t gpsWeek;                   // GPS week, 0xFFFF if not available
    uint32_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;       // cm
    int32_t  nedVelNorth;       // cm/s
    int32_t  nedVelEast;
    int32_t  nedVelDown;
    uint16_t groundCourse;      // deg * 100, 0..36000
    uint16_t trueYaw;           // deg * 100, values of 0..36000 are valid. 65535 = no data available
    uint16_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, front
    int16_t  magY; // mGauss, right
    int16_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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iNavFlight之MSP v2 Sensor报文格式 的相关文章

  • iNavFlight之MSP v2 Sensor报文格式

    iNavFlight之MSP v2 Sensor报文格式 1 MSP v2传感报文介绍2 MSP v2协议格式3 MSP v2传感代码流程4 MSP v2 传感器4 1 光流传感报文 MSP2 SENSOR RANGEFINDER4 2 测
  • iNavFlight之RC遥控CRSF协议

    iNavFlight之RC遥控CRSF协议 1 遥控器电传框架设计1 1 场景分析1 2 逻辑框架1 2 1 电传信息获取1 2 2 电传信息处理1 2 3 电传初始化 1 3 模块化设计 2 CRSF电传报文2 1 CRSF电传报文格式2
  • iNavFlight之电传MAVLink协议

    iNavFlight之电传MAVLink协议 1 业务逻辑框架2 MAVLink电传报文2 1 MAVLink电传报文格式2 2 iNav支持地面站报文 接收 2 3 iNav支持飞控报文 发送 3 MAVLink报文处理4 参考资料 本章
  • ​ros中激光雷达的消息类型( sensor_msgs/LaserScan Message)说明​

    转载自 xff1a ros中激光雷达的消息类型 xff08 sensor msgs LaserScan Message xff09 说明 ultimate1212的博客 CSDN博客 ros中激光雷达的消息类型 xff08 sensor m
  • sensor配置项解释

    主要介绍 sensor 的配置项 json 里面的 data 类型 都是 10进制的 以 a 43 g sensor 介绍 所有平台特定的配置文件在 JSON 文件顶层均包含 config 组 json 开头的 就是 config 组 这里
  • PX4:【sensor_combined】

    功能介绍消息内容sensor combined 产生机制 amp 代码流程 功能介绍 sensor combined 是一个冗余传感器集合的消息 xff0c 通过订阅多个传感器的数据 xff0c 将冗余的数据经过VoteSensorsUpd
  • __asm void MSR_MSP(uint32_t addr) 提示:error:expected '(' after 'asm'

    SYSTEM sys sys c 33 7 error expected 39 39 before 39 void 39 ASM void MSR MSP u32 addr 在STM32中的sys c文件编译报出这个错误时 xff1a AS
  • ur3+robotiq ft sensor+robotiq 2f 140+realsense d435i配置rviz,gazebo仿真环境

    ur3 43 robotiq ft sensor 43 robotiq 2f 140 43 realsense d435i配置rviz xff0c gazebo仿真环境 搭建环境 xff1a ubuntu 20 04 ros Nonetic
  • PX4源码分析__传感器数据“sensor_combined”的来龙去脉

    注 xff1a 本讲解基于V1 10 2源码版本 一 sensor combined 的来源 module cpp src templates module line 166 struct sensor combined s sensor
  • 传感器融合sensor fusion

    自动控制系统中的传感器融合 传感器融合的4个作用 xff1a 1 增加数据质量 比如减少噪声 xff1b 2 增加可靠性 多传感器互为备份 xff1b 3 估计预测状态 xff1b 4 可增加被测范围 相对于单个传感器来说 xff0c 多传
  • 高通SDM845平台Sensor学习——3.SLPI(Physical Sensor)

    三 xff1a Sensor SLPI层代码分析 在学习SLPI侧代码前我们先了解下SEE的registry amp config registry 放在 persist sensors registry registry中 xff0c 它
  • sensor数据格式

    raw10 一个像素的一个颜色分量 xff0c 占10bit
  • CAN的报文格式

    CAN的报文格式 在总线中传送的报文 xff0c 每帧由7部分组成 CAN协议支持两种报文格式 xff0c 其唯一的不同是标识符 xff08 ID xff09 长度不同 xff0c 标准格式为11位 xff0c 扩展格式为29位 在标准格式
  • CMOS图像传感器——TDI CIS(2)

    在之前的文章 CMOS图像传感器 TDI CIS tdi相机的工作原理 沧海一升的博客 CSDN博客时间延迟积分 Time Delay Integration TDI 技术是一种特殊的成像模式https blog csdn net qq 2
  • 一、新建第一个工程——51、STM32、MSP432

    目录 一 51单片机 二 STM32 三 MSP432E401R 一 51单片机 步骤1 如图 双击桌面Keil5图标 打开keil5 点击 Project 点击New uvision project 步骤2 如图 找到合适的存放工程的位置
  • ADXL345传感器介绍

    今天小白给大家介绍一款当下比较流行的三轴加速度传感器 ADXL345 通过本文的介绍让大家学会如何使用这款功能强大的三轴加速度传感器 欢迎一起交流学习 1 ADXL345传感器简介 该款传感器如下图 ADXL345 是 ADI 公司推出的基
  • Android Automotive-sensor服务详解

    本章将会详细介绍Android原生车辆服务的传感器处理流程 同时还会介绍Mananger lt lt gt gt Service之间数据传输协议 即Manager如何与Service进行交互 Car Sensor数据传递时序 车辆控制之Se
  • 高通 ADSP sensor SSC

    1 添加入口函数 adsp sensors dd qcom inc sns dd h extern sns ddf driver if s sns dd
  • 关于6轴传感器LSM6DSLTR的调试说明

    关于6轴传感器LSM6DSLTR的调试说明 AP的检测脚需要配置为pull down的 不能配置为pull up 否则中断脚一直是高 sensor的int1脚配置为open drain模式 可以配置wakeup中断 阈值设置为1 2g产生中
  • Windows 安装程序补丁失败 - 执行序列在第一个操作后停止并安装进程重置

    我发现我们的一个补丁在几个客户站点上出现了异常的零星故障 最终错误代码为 1648 找不到该组补丁的有效序列 这是因为尝试从其中一个补丁转换读取摘要信息流时出现错误 2219 无效的安装程序数据库格式 但我怀疑这只是早期无声错误的副作用 我

随机推荐

  • BetaFlight深入传感设计之六:四元数计算方法

    BetaFlight深入传感设计之六 xff1a 四元数计算方法 1 四元数理论1 1 定义1 2 基本运算1 2 1 矢量加减1 2 2 标量乘法 1 3 矢量点叉乘1 3 1 矢量点乘1 3 2 矢量叉乘 1 4 除法求逆 2 程序四元
  • 【杭州】户外航模试飞地踩点

    杭州 户外航模试飞地踩点 1 拱墅区 飞地踩点1 1 城北公园1 2 善贤地铁站口 东侧 1 3 善贤地铁站口 东侧 43 城北公园 2 西湖区 飞地踩点2 1 梅林南路 隧道出口 2 2 十里琅珰2 3 双峰2 4 梅坞春早 3 钱塘区
  • BetaFlight深入传感设计之七:GPS&Baro高度数据融合

    BetaFlight深入传感设计之七 xff1a GPS amp Baro高度数据融合 1 现象2 分析2 1 程序逻辑2 2 GPS精度2 3 数值分析 3 总结 传感器数据融合最主要的目的是为了数据的精准 同时也可以通过多个传感数据源来
  • BetaFlight深入传感设计之八:坐标系

    BetaFlight深入传感设计之八 xff1a 坐标系 1 坐标系统应用1 1 Geographic Coordinate System LLH Longitude Latitude Height1 2 Navigation Coordi
  • 树莓派(Raspberry Pi)FTP服务搭建

    64 TOC 树莓派 Raspberry Pi FTP服务搭建 由于家里使用下载电影 迅雷 xff0c 存储电影 树莓派 43 移动硬盘 xff0c 简易NAS xff1b PC下载的电影可以通过家里的有线主干网络100MB带宽通过samb
  • 四轴飞控DIY Mark4 - 整理&参数优化

    四轴飞控DIY Mark4 整理 amp 参数优化 1 历程2 参数优化2 1 固件BF4 3 12 2 动态怠速值2 3 滤波参数2 4 电调PWM频率2 5 GPS高度配置2 6 返航速度和高度2 7 线性推力修正2 8 图传频道调整
  • BetaFlight深入传感设计之九:传感坐标系/机体坐标系/导航坐标系/经纬度坐标系

    BetaFlight深入传感设计之九 xff1a 传感坐标系 机体坐标系 导航坐标系 经纬度坐标系 1 问题症结2 入手分析2 1 传感坐标系2 2 机体坐标系2 3 导航坐标系2 4 经纬坐标系 3 CF BF iNav代码3 1 机体坐
  • BetaFlight深入传感设计之十:传感器物理特性方向对齐

    BetaFlight深入传感设计之十 xff1a 传感器物理特性方向对齐 1 对齐定义2 常见对齐方式3 自定义对齐方式4 总结5 参考资料6 补充 xff1a gyro 43 mag对齐方式 AHRS Attitude and Headi
  • ArduPilot飞控AOCODARC-H7DUAL固件编译

    ArduPilot飞控AOCODARC H743DUAL固件编译 1 编译目标 xff08 AOCODARC H743DUAL xff09 2 硬件支持包 xff08 APM AOCODARC H743DUAL xff09 3 编译步骤3
  • 四轴FPV手动训练进阶步骤

    四轴FPV手动训练进阶步骤 1 目的2 训练2 1 基本操作训练2 1 1 滞空训练2 1 2 基本动作2 1 3 位置保持 2 2 基本控制训练2 2 1 转弯 Turn 2 2 2 翻滚 Roll 2 2 3 翻转 Flips 2 3
  • 数据库binlog(二进制日志binary log)

    二进制日志中存储的内容称之为事件 xff0c 每一个数据库更新操作 Insert Update Delete xff0c 不包括Select 等都对应一个事件 mysql binlog基本原理 简书 jianshu com https ww
  • 四轴异常炸机分析讨论集锦

    四轴异常炸机分析讨论集锦 0 异常 amp 炸机 汇总目的1 AT9SPro 43 R12DSM 300米信号丢失炸机2 PID参数异常 起飞 Takeoff Runaway 炸机3 接收机信号干扰 炸机4 GPS救援 RC控制信号丢失炸机
  • Github工程中的Markdown语言应用

    Github工程中的Markdown语言应用 1 介绍2 工具2 1 下载链接2 2 编辑界面2 3 插件安装 3 基本操作3 1 标题编写3 2 正文编写3 3 代码块编写3 4 加粗倾斜3 5 有序列表3 6 无序列表3 7 行内代码编
  • iNavFlight之MSP DJI协议分析

    iNavFlight之MSP DJI协议分析 1 iNav串行口通信1 1 iNav 串口任务1 2 调用逻辑 2 iNav串行抽象2 1 框架代码2 2 MSP DJI 协议处理 3 DJI协议相关实现3 1 DJI串口初始化3 2 DJ
  • iNavFlight之MSP DJI协议天空端请求报文

    iNavFlight之MSP DJI协议天空端请求报文 1 报文格式 请求 2 报文标志 flag 3 报文命令 cmd 4 参考资料 MSP DJI协议是用于DJI天空端与飞控端之间的通信协议 xff0c 其工作模式符合C S经典设计 这
  • iNavFlight之MSP DJI协议飞控端请求应答

    iNavFlight之MSP DJI协议飞控端请求应答 1 报文格式2 报文标志 flag 3 报文命令 cmd 4 请求应答 amp 反馈报文4 1 DJI MSP API VERSION4 2 DJI MSP FC VARIANT4 3
  • 大疆Tello UDP控制协议接口

    大疆Tello UDP控制协议接口 1 设计架构2 UDP报文格式2 1 控制报文2 2 查询报文2 3 状态报文 3 命令集3 1 控制报文 控制命令3 2 控制报文 设置命令3 3 查询报文 读取命令 4 状态报文 这里介绍了大疆Tel
  • 蓝牙无线自制串口模块连接穿越机配置工具

    蓝牙无线自制串口模块连接穿越机配置工具 1 目的2 验证环境3 BLE SPP验证4 BT SPP验证5 参考资料6 补充资料 windows10配置全过程截图6 1 添加设备 搜索蓝牙串口设备6 2 连接 选中SnapAirUnit设备6
  • 传感模块:MATEKSYS Optical Flow & LIDAR 3901-L0X

    传感模块 xff1a MATEKSYS Optical Flow amp LIDAR 3901 L0X 1 模块介绍2 规格参数3 使用方法Step1 接线方式Step2 安装方式Step3 使用范围 4 存在问题 思考 4 1 MATEK
  • iNavFlight之MSP v2 Sensor报文格式

    iNavFlight之MSP v2 Sensor报文格式 1 MSP v2传感报文介绍2 MSP v2协议格式3 MSP v2传感代码流程4 MSP v2 传感器4 1 光流传感报文 MSP2 SENSOR RANGEFINDER4 2 测