RC模块APM官方文档也有相关介绍:RC Input and Output — Dev documentation (ardupilot.org)
但其实用到的主要是 RC_Channel 类和RC_Channels类
我所使用的是四旋翼无人机,所以主要初始化与起作用的代码是在Copter类中,找到读取遥控器相关的函数:
跳转后:
再次跳转:
最后可以看到:
radio_in参数即为ch_in对应的通道值,有一个注意点,往下翻
可以通过无人机APM学习(二):使用串口调试、接收、发送消息-CSDN博客这个章节所使用到的串口信息,在该函数下利用串口输出拿到通道值的数据
本人的开发需根据多个通道值进行判断,但此函数只能拿到单一的通道值,并且每次循环都会进行读取覆盖,无法满足开发需求,故退回至上一层:
可以看到channel(i)返回的是RC_Channel类,在该类中的get_radio_in()方法可以拿到该通道的通道值:
故在这一层中,可以通过get方法,拿到多个通道的通道值,进行二次开发:
注意:
radio_in并不是最终控制无人机的数值,而是control_in:
经过pwm_to_range()和pwm_to_angle()函数的转换,radio_in最终转换为control_in进而控制无人机,若开发中需要测试通道值,可以将红框部分代码注释,这样操作遥控时既能拿到遥控输入的数据,又不会造成无人机的启动。