RC输入是任何自动驾驶仪的关键部分,给予机身的先导控制,允许它们改变模式,并给予它们控制辅助设备,例如摄像机支架。
ArduPilot支持多种不同类型的RC输入,具体取决于硬件类型:
- PPMSum - on PX4, Pixhawk, Linux and APM2
- SBUS - on PX4, Pixhawk and Linux
- Spektrum/DSM - on PX4, Pixhawk and Linux
- PWM - on APM1 and APM2
- RC Override (MAVLink) - all boards
可用通道的数量取决于特定板的硬件。注意,sbu和spektrum/dsm是串行协议。sbus是100k波特的反向uart协议,spektrum/dsm是115200波特的uart协议。有些电路板使用硬件uart(如在px4上)实现这些,有些电路板将它们在软件上实现为uart(在linux上)。
RC输出是ArduPilot控制伺服和马达的方式。可用输出通道的数量取决于电路板的类型,甚至可以取决于车辆类型和配置参数。rc输出默认为50赫兹的pwm值,但可以配置为一个广泛的更新率。例如,直升机代码设置其电机输出,以更高的速率驱动ESC——通常超过400Hz。
AP_HAL RCInput object
首先要理解的对象是ap_hal rcinput对象,它可以作为hal.rcin使用。它提供对当前在板上接收到的信道值的最底层的访问。返回值是以微秒为单位的脉宽调制值。
在libraries/ap_hal/examples/rcinput/rcinput.cpp目录下,然后在板上试试。试着移动遥控器上的手柄,检查输出值是否正确变化。
AP_HAL RCOutput object
ap_hal rcoutput对象(可用作hal.rcout)提供对所有输出通道最底层的控制。如何实现这一点是非常具体的电路板,可能涉及对片上定时器或i2c外设的编程,或通过协处理器(如px4io微控制器)输出。
在libraries/ap-hal/examples/rcoutput/rcoutput.cpp目录下。会发现它只是设置了所有的通道,在几秒钟内将伺服系统从最小值转换到最大值。连接一些伺服到你的电机,然后测试,以确保它工作。
The RC_Channel object
上面讨论的hal.rcin和hal.rcout对象是低层函数。在ArduPilot中处理RC输入和输出的常用方法是通过一个称为RC_Channel的更高级别对象。该对象具有用于每个信道的最小/最大/中位的用户可配置参数,以及辅助信道功能的支持、输入和输出的缩放以及许多其他特征。
在libraries/rc_channel/examples/rc_channel/rc_channel.cpp目录。该示例演示如何设置rc通道、读取输入并将输入复制到输出值。在你的电路板上运行这个程序,检查传送器的输入是否通过伺服系统。尝试将其更改为反转通道,并更改通道上的最小/最大/中位。通过rc_channel.h查看有哪些api函数可用。