遥控器数据解析

本文详细介绍了如何通过Freertos获取遥控器数据的间隔,对数据进行单位化、去除死区,以及处理通道值,包括通道位置状态和连接状态判断。重点展示了如何使用SBUS和PPM协议解析遥控器数据并确保接收的健壮性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

遥控器数据解析

本章以乐迪AT9S(已停产)为代表举例,如有不同,请根据所持遥控器查看厂商说明书。
在这里插入图片描述

一、遥控器简介

遥控器是一种用于控制无人系统操作的设备。它通常由一个手持的控制器和一个接收器组成。遥控器上配有各种按钮、摇杆和滑块,用于控制无人系统的各种功能,如起飞、降落、悬停、前进、后退、左转、右转等。

无人系统遥控器使用无线信号将操作指令传输给无人系统的接收器。接收器将信号解码后发送给无人系统的飞行控制系统,从而实现用户的指令

二、遥控器通道

遥控器一般具有多个通道,具体数量取决于遥控器的设计和用途。
AT9S有十个通道,其中前四个通道对应摇杆,5通道以上为拨扭开关,可以自定义。其自定义概念为可以将任意拨扭开关映射到5通道以上任意通道上。

三、遥控器协议解析

遥控器协议分为SBUS、PPM等
SBUS协议详见另一篇文章:遥控器协议解析—SBUS篇

四、遥控器数据解析

接收机接收到遥控器数据后进行处理后会得到各个通道值,不同协议接收机接收到的数据范围是不一样的,比如SBUS传来的每个通道值的数据大概范围为300~1700,PPM传来的每个通道值的数据大概范围为500~1500等。其具体的通道值数据范围可以通过将数据读出来查看。

1、得到遥控器数据上一次接收到的和这一次接收到数据的间隔(freertos版,也可以通过定时器来获取)

_Bool get_rc_sbus_health()
{
   
	//rc_connect_flag为接收机接收到的数据中标志着遥控器和接收机是否失去连接
    if( (xTaskGetTickCountFromISR() - last_sbus_update_ms > 100) || rc_connect_flag == false){
   
        return  false;
    }
    else  return  true;
}

2、遥控数据单位化和去除死区

死区(deadband)有时也称为中性区(neutral zone)或不作用区,是指控制系统的传递函数中,对应输出为零的输入信号范围。

float data_to_deadzone(float x,float ref,float zoom)
{
   
    float t;
    if(x>ref)
    {
   
        t = x - zoom;   //x不管在ref~ref+zoom之间怎么变,输出t始终为ref
        if(t<ref)
        {
   
            t = ref;
        }
    }
    else
    {
   
        t = x + zoom;
        if(t>ref)
        {
   
            t = ref;
        }
    }
	return (t);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值