(8)RC输入和输出

简介: (8)RC输入和输出

前言

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

可用的通道数量取决于具体主板的硬件。请注意,SBUS 和 Spektrum/DSM 是串行协议。SBUS 是一个 100kbaud 反相 UART 协议,Spektrum/DSM 是一个 115200 baud UART 协议。有些主板使用硬件 UART 来实现这些协议(如 PX4 上的),有些主板则是以位控的软件 UART 来实现这些协议(在 Linux 上)。

RC 输出是 ArduPilot 控制舵机和电机的方式。可用的输出通道的数量取决于主板的类型,甚至可以取决于飞行器类型和配置参数。RC 输出默认为 50Hz 的 PWM 值,但可以配置为一个更广泛的更新率。例如,Copter 代码设置了它的电机输出,以更高的速率驱动电调--通常超过 400Hz。

1 AP_HAL RCInput对象

第一个要了解的对象是 AP_HAL RCInput 对象,它可以作为 hal.rcin。它提供了对当前在主板上接收通道值的低级别访问。返回的值是以微秒为单位的 PWM 值。

去看看 libraries/AP_HAL/examples/RCInput/RCInput.cpp 示例,并在你的主板上试一试。 尝试在你的遥控器上移动摇杆,检查输出中的值是否正确变化。

2 AP_HAL RCOutput对象

AP_HAL RCOutput 对象(可作为 hal.rcout)对所有输出通道进行低级别控制。如何实现这一点是特定于主板的,可能涉及片上定时器的编程,或 I2C 外设,或通过协处理器(如 PX4IO 微控制器)输出。

去看看 libraries/AP_HAL/examples/RCOutput/RCOutput.cpp 示例概述。你会看到它只是设置了所有的通道,让舵机在几秒钟的时间内从最小到最大转动。在你的主板上挂载一些舵机,然后进行测试以确保它对你有用。

3 RC_Channel对象

上面讨论的 hal.rcin 和 hal.rcout 对象是低级别的函数。在 ArduPilot 中处理 RC 输入和输出的通常方式是通过一个叫做 RC_Channel 的高层对象。

该对象具有用户可配置的参数,用于每个通道的最小/最大/中值,以及支持辅助通道功能,输入和输出的缩放和许多其他功能。

去看看 libraries/RC_Channel/examples/RC_Channel/RC_Channel.cpp。这个例子显示了如何设置 RC 通道,读取输入和复制输入到输出值。在你的主板上运行这个例子,并检查遥控器的输入是否传递给了伺服舵机。

试着改变它以反向一个通道,并改变一个通道的最小/最大/中值。通过 RC_Channel.h 查看有哪些可用的 API 函数。

4 RC_Channel_aux对象

除了 RC_Channel 之外,在 libraries/RC_Channel 中还有一个重要的类。它就是 RC_Channel_aux 类,它是 RC_Channel 的一个子类。

RC_Channel_aux 对象是 RC_Channel 的一种类型,但具有允许用户指定其用途的附加属性。例如,用户希望 通道6 是相机支架的横滚稳定器。他们将参数 RC6_FUNCTION 设置为 21,也就是 "方向舵"。然后另一个库可以说:

RC_Channel_aux::set_servo_out(RC_Channel_aux::k_rudder, 4500);

任何通道的功能设置为 21 的都将移动到完全偏转(因为 k_rudder 被设置为以厘度为单位的角度,4500 是最大值)。注意,这是一个一对多的安排。如果用户愿意,可以设置多个通道的 FUNCTION 为 21,所有这些通道都会移动,每个通道都使用它们自己的最小/最大/中值。


相关文章
|
7月前
|
存储 C++
C++系列五:输入/输出
C++系列五:输入/输出
|
7月前
|
数据处理 C++ UED
C++程序中的输入与输出
C++程序中的输入与输出
78 2
|
5月前
输出到一个新文件C中
【7月更文挑战第9天】输出到一个新文件C中。
53 13
|
7月前
|
存储 C语言
c输入&输出
c输入&输出
35 1
|
7月前
|
C语言
输入&输出
【2月更文挑战第13天】输入&输出。
27 1
|
7月前
|
安全
通用电气 IS220PTURH1BF 涡轮机输入/输出(输入/输出组件)
通用电气 IS220PTURH1BF 涡轮机输入/输出(输入/输出组件)
通用电气 IS220PTURH1BF 涡轮机输入/输出(输入/输出组件)
|
7月前
|
编译器 C++
【c++】C++输入&输出
【c++】C++输入&输出
【c++】C++输入&输出
|
7月前
|
C++
58C++的输入和输出
58C++的输入和输出
46 0
|
编译器 C语言
C 输入 & 输出
C 输入 & 输出。
97 1