iNavFlight之RC遥控MSP协议

news2024/11/25 2:55:27

iNavFlight之RC遥控MSP协议

  • 1. RC摇杆MSP协议
  • 2. 地面站配置 & MSP遥控器
    • 2.1 iNav地面站-配置
    • 2.2 iNav地面站-MSP遥控器
  • 3. RC摇杆总体逻辑框架
  • 4. RC摇杆代码设计框架
  • 5. MSP摇杆代码设计
    • 5.1 rxMspInit
    • 5.2 rxMspFrameStatus
    • 5.3 rxMspReadRawRC
    • 5.4 rxMspFrameReceive
  • 6. 整体Rx业务逻辑处理(processRx)
  • 7. 参考资料

1. RC摇杆MSP协议

iNav在地面站配置工具中,有一个MSP遥控器。该遥控器模拟了一个RC遥控器,通过MSP协议将RC摇杆信息的发送给飞控。

因此,这里也就给第三方提供了遥控控制MSP协议接口,通过这个链路将可以给飞控发送RC摇杆信息。

2. 地面站配置 & MSP遥控器

2.1 iNav地面站-配置

使能MSP遥控器的方法,需要在iNav地面站配置软件里面选择接受模式为MSP。

iNav地面站配置

2.2 iNav地面站-MSP遥控器

通过iNav地面站提供的遥控器UI界面,我们可以基本操作飞机。当然相对来说不是很方便 :)

但是不管如何,我们可以基于MSP协议,通过MSP遥控器来操作飞机。当然如果换成自己的接收机就可以控制飞机了(无需修改任何开源代码)。
MSP遥控器

3. RC摇杆总体逻辑框架

以RC摇杆信息为中心,从逻辑角度,需要三个步骤:

  1. 摇杆信息获取
  2. 摇杆信息处理
  3. 摇杆处理初始化
taskHandleSerial  //摇杆信息获取
 └──> mspFcProcessCommand
     └──> mspFcProcessInCommand  //case MSP_SET_RAW_RC
         └──> rxMspFrameReceive

#define MSP_SET_RAW_RC                         200

taskUpdateRxMain  //摇杆信息处理
 └──> processRx
     └──> calculateRxChannelsAndUpdateFailsafe

main  //摇杆处理初始化
 └──> init
     └──> rxInit

4. RC摇杆代码设计框架

鉴于摇杆信息从使用场景上看,主要是两种类型和十三种串行遥控器协议。所以,从整体上设计上需要考虑这些种类的摇杆信息输入。

typedef enum {
    RX_TYPE_NONE = 0,
    RX_TYPE_SERIAL,
    RX_TYPE_MSP
} rxReceiverType_e;

typedef enum {
    SERIALRX_SPEKTRUM1024 = 0,
    SERIALRX_SPEKTRUM2048,
    SERIALRX_SBUS,
    SERIALRX_SUMD,
    SERIALRX_IBUS,
    SERIALRX_JETIEXBUS,
    SERIALRX_CRSF,
    SERIALRX_FPORT,
    SERIALRX_SBUS_FAST,
    SERIALRX_FPORT2,
    SERIALRX_SRXL2,
    SERIALRX_GHST,
    SERIALRX_MAVLINK,
} rxSerialReceiverType_e;

经过整理和抽象以后,每种摇杆信息的使用过程无不离开如下五个步骤:

  1. rcInit
  2. rcFrameStatus
  3. rcProcessFrame
  4. rcReadRaw
  5. rcFrameReceive

5. MSP摇杆代码设计

本章重点介绍MSP摇杆的代码设计,当然我们依然按照逻辑思路和抽象化设计概念走。

  1. rcInit ==> rxMspInit
  2. rcFrameStatus ==> rxMspFrameStatus
  3. rcProcessFrame ==> 无,这里不展开,因为有些rc摇杆信息要做CRC校验等等之类操作。
  4. rcReadRaw ==> rxMspReadRawRC
  5. rcFrameReceive ==> rxMspFrameReceive

5.1 rxMspInit

基于MSP协议的RC摇杆初始化

  1. 将rxMspReadRawRC和rxMspFrameStatus两个处理函数挂上统一处理框架
  2. 支持18个RC摇杆通道
  3. 支持200ms超时处理
void rxMspInit(const rxConfig_t *rxConfig, rxRuntimeConfig_t *rxRuntimeConfig)
{
    UNUSED(rxConfig);

    rxRuntimeConfig->channelCount = MAX_SUPPORTED_RC_CHANNEL_COUNT;
    rxRuntimeConfig->rxSignalTimeout = DELAY_5_HZ;
    rxRuntimeConfig->rcReadRawFn = rxMspReadRawRC;
    rxRuntimeConfig->rcFrameStatusFn = rxMspFrameStatus;
}

#define MAX_SUPPORTED_RC_CHANNEL_COUNT              18
#define DELAY_5_HZ (1000000 / 5)

5.2 rxMspFrameStatus

这个不难理解,无非就是MSP协议的RC摇杆只有两种状态:PENDING or COMPLETE

static uint8_t rxMspFrameStatus(rxRuntimeConfig_t *rxRuntimeConfig)
{
    UNUSED(rxRuntimeConfig);

    if (!rxMspFrameDone) {
        return RX_FRAME_PENDING;
    }

    rxMspFrameDone = false;
    return RX_FRAME_COMPLETE;
}

5.3 rxMspReadRawRC

获取当前某个通道的摇杆值。

static uint16_t rxMspReadRawRC(const rxRuntimeConfig_t *rxRuntimeConfigPtr, uint8_t chan)
{
    UNUSED(rxRuntimeConfigPtr);
    return mspFrame[chan];
}

5.4 rxMspFrameReceive

收到报文直接进行复制,且报文数据按照0 - MAX_SUPPORTED_RC_CHANNEL_COUNT 依次排列。

注:

void rxMspFrameReceive(uint16_t *frame, int channelCount)
{
    for (int i = 0; i < channelCount; i++) {
        mspFrame[i] = frame[i];
    }

    // Any channels not provided will be reset to zero
    for (int i = channelCount; i < MAX_SUPPORTED_RC_CHANNEL_COUNT; i++) {
        mspFrame[i] = 0;
    }

    rxMspFrameDone = true;
}

6. 整体Rx业务逻辑处理(processRx)

略:详见void processRx(timeUs_t currentTimeUs)

注:这里就不再将代码一一罗列出来,看一遍加注释了。如果真有朋友有兴趣,请评论留言,我有机会一一整理。

7. 参考资料

【1】Multiwii Serial Protocol Version 2
【2】BetaFlight模块设计之三十二:MSP协议模块分析
【3】iNavFlight之MSP Sensor报文格式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90725.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中医药信息网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 网站前台&#xff1a;关于我们.、联系我们.、宣传资料、中药信息、方剂信息、名医信息 管理员功能&#xff1a; 1、管理…

科技向善:用OpenVINO减少食物浪费

作者&#xff1a;Anisha Udayakumar 翻译&#xff1a;张晶 项目背景 您是否知道每年大约有2300亿美元的食物被浪费&#xff0c;其中高达五分之一属于可食用农产品&#xff1f;我们都在自己的家中经历过某种类型的食物浪费&#xff0c;但最大量的浪费发生在杂货店的新鲜食品和…

多网点跨区域远程监测?银行监测一步到位,太方便了

随着人民生活水平不断提高&#xff0c;金融行业得到不断发展&#xff0c;同时对其业务能力提出更高的要求&#xff0c;因此银行的组织架构也不断扩充&#xff0c;各大银行的基本架构可为总行、省分行、市支行、分理处、ATM网点组成。 建设一套数据中心与分行及营业网点的机房监…

Polygon zkEVM 审计及递归证明

1. 引言 Polygon zkEVM自2022年12月1日已开始审计&#xff0c;为未来的主网上线做准备。审计公司有2个&#xff1a;Spearbit和Hexens&#xff0c;审计的内容有&#xff1a; Polygon zkEVM采用模块化设计&#xff0c;审计的内容主要分为&#xff1a; client端&#xff1a;包括…

类加载器、类加载器的过程、类加载的分类、双亲委派模型

文章目录1.类加载器1.1类加载器1.2类加载的过程1.3类加载的分类1.4 双亲委派模型1.5 ClassLoader 中的两个方法1.类加载器 1.1类加载器 作用 负责将.class文件&#xff08;存储的物理文件&#xff09;加载到内存中 1.2类加载的过程 类加载时机 创建类的实例&#xff08;对象…

【内网安全-通讯上线】通讯上线基础知识

目录 一、基础知识 1、关键词&#xff1a; 2、代理技术 3、IP隧道技术 4、使用场景 二、示例 1、不出网上线 1&#xff09;理论&#xff1a; 2&#xff09;示例&#xff1a; 三、代理技术 1、dome 2、第一步&#xff1a;网络通讯 3、第二步&#xff1a;控制上线 …

word插件grammerly,边写论文边修改语法

下载网址&#xff1a;报错信息 下载网址&#xff1a;Grammarly for MS Office | Grammarly 官网安装提示&#xff1a; Install Grammarly for all users by following these steps: Uninstall your current version of the Grammarly add-in via Control Panel > Program…

叶酸偶联壳聚糖载多西他赛纳米粒(FA-CTS/DTX)纳米粒

叶酸偶联壳聚糖载多西他赛纳米粒(FA-CTS/DTX)纳米粒 中文名称&#xff1a;叶酸偶联壳聚糖载多西他赛纳米粒纳米粒 英文名称&#xff1a;FA-CTS/DTX 纯度&#xff1a;95% 存储条件&#xff1a;-20C&#xff0c;避光&#xff0c;避湿 外观:固体或粘性液体 包装&#xf…

大学生网页作业成品——基于HTML网上书城项目的设计与实现

常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他等网页设计题目, A…

不带www的顶级域名跳转到www域名上

背景:百度收录有时候会收录不带www的顶级域名,这个时候如果不做处理就会导致域名权重分散,尤其是当本身域名权重不高的时候,更不容易让网站参加排名或者排名好一些.这个时候就需要进行301重定向的配置了,本次带来的是主要是通过伪静态文件进行301跳转的方法. 伪静态文件配置方…

苹果电脑数据库管理Navicat Premium中文

Navicat Premium中文是一款好用的数据库管理工具。将此工具连接数据库&#xff0c;可以从中看到各种数据库的详细信息。包括报错&#xff0c;等等。当然&#xff0c;你也可以通过他&#xff0c;登陆数据库&#xff0c;进行各种操作。Navicat Premium是一个可多重连线资料库的管…

易基因|NSUN2介导RNA m5C修饰促进食管鳞状细胞癌进展的表观调控机制 | 肿瘤研究

大家好&#xff0c;这里是专注表观组学十余年&#xff0c;领跑多组学科研服务的易基因。 2021年8月3日&#xff0c;中山大学肿瘤防治中心华南肿瘤学国家重点实验室研究团队在《Oncogene》杂志发表了《NSUN2-mediated RNA 5-methylcytosine promotes esophageal squamous cell …

C盘容量不足,怎么增加c盘空间?看这5个方法

在电脑磁盘中&#xff0c;C盘属于系统磁盘&#xff0c;许多应用软件的默认安装路径都是C盘。随着时间的推移&#xff0c;C盘的可用空间会越来越小&#xff0c;系统会越来越卡&#xff0c;甚至影响电脑的运行效率。因此&#xff0c;我们必须采取行动来增加C盘空间&#xff0c;以…

创米数联创业板IPO被终止:曾拟募资6.44亿 小米是重要股东

雷递网 雷建平 12月13日上海创米数联智能科技发展股份有限公司&#xff08;简称&#xff1a;“创米数联”&#xff09;日前IPO被终止&#xff0c;其曾在2022年6月递交招股书&#xff0c;准备在深交所创业板上市。创米数联曾计划募资6.44亿元&#xff0c;其中&#xff0c;4.06亿…

Go项目实战:01-聊天室

实现一个聊天室&#xff08;群&#xff09;&#xff1a; 功能分析&#xff1a; 1、上线下线2、聊天&#xff1a;其他人和自己都可以看到聊天消息3、查询当前的聊天室用户所有人的名字4、可以修改自己的名字5、超时潜水踢出机制 技术点分析&#xff1a; 1、socket tcp编程2、…

ADI Blackfin DSP处理器-BF533的开发详解51:图像处理专题-CMOS摄像头采集图像(含源码)

硬件准备 ADSP-EDU-BF533&#xff1a;BF533开发板 AD-HP530ICE&#xff1a;ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 板卡上设计了一个摄像头接口&#xff0c;可以连接与板卡匹配的 ADSP-EDU-CMOS 子卡板。摄像头接口采用 20PIN 插针接入&#xff0c;将插…

基于android的二手车交易系统app-计算机毕业设计

项目介绍 该二手车信息软件采用JSP Tomcat MysqlAndroid开发环境开发&#xff0c;是一款展示二手车信息&#xff0c;并提供卖方联系方式&#xff0c;让买家更方便地找到合适的二手车主的软件&#xff0c;系统分为前端和后端&#xff0c;前端采用了安卓技术开发&#xff0c;在…

jfinal整合IJPay paypal支付

这里写目录标题环境准备1.注册paypal账户2.登录开发者中心3.创建沙箱账户4.在沙箱模式创建一个app&#xff0c;平台默认创建好了一个4.1填写信息4.2绑定某个沙箱账号4.3Client ID及Secret支付代码1.pom2.实例化配置3.支付订单3.1用sandbox的personal的账号登录&#xff0c;并支…

你说精通MySQL其实很菜jī(1):你不一定会的基本技巧或知识点(值得一看)

你说精通MySQL其实很菜jī&#xff08;1&#xff09;&#xff1a;你不一定会的基本技巧或知识点&#xff08;值得一看&#xff09;《你说精通MySQL其实很菜jī》系列文章&#xff08;持续更新&#xff09;一、前言二、技巧或知识点汇总1、MySQL客户端&#xff08;Client&#x…

HID设备的报告描述符

HID设备类定义文档中明确指出&#xff0c;一个报告描述符必须包含但不仅限于以下数据项&#xff1a; 输入&#xff08;输出或特征&#xff09; 指明了报告的类型&#xff0c;其中隐含了报告的传输方向以及报告数据所具有的数学特性。 用法&#xff08;也可用“用法最小值与最大…