遥控器数据解析
本章以乐迪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);