如何在Ardupilot中实现RC超控并使其在特定条件下/秒停止



我对此有点困惑。据我所知,rc channel_overrides是一行代码,它发送一个命令三秒钟(正如我所观察到的。我尝试只运行rc channel-overrides,命令也实现了三秒钟。(

我试着做循环,看看循环结束后它是否会停止,但没有。即使我已经将RC信号覆盖了1500,在它停止之前,总会有三秒的偏移(我的估计(。我的最小值和最大值分别为1100和1900。这是示例代码。

counter = 0
while counter != 1000:
vehicle.channels.overrides = {'3':1900}
counter += 1

vehicle.channels.overrides = {'3':1500}

现在,当我尝试做递归函数时,它是有效的。这是我的示例代码:

def forward(seconds):
if seconds <= 3:
vehicle.channels.overrides = {'3':1900}
time.sleep(seconds)
vehicle.channels.overrides = {'3':1500}
else:
vehicle.channels.overrides = {'3':1900}
time.sleep(3)
forward(seconds - 3)

现在,我很好奇为什么它不能在while循环下工作,而在递归函数中工作。此外,我正在尝试发送一个rc信号,并在满足条件后完全停止,这就是为什么我需要理解使用循环的问题。感谢

您的"而";循环不起作用,因为您的逻辑错误。

看看第一个例子中的前两行逻辑。首先,将计数器设置为100。然后,如果计数器不是100,则将rc通道覆盖到1900最大值。读取vehicle.channels.overrides = {'3':1900}的行不会运行,因为计数器的值设置为100。

此外,要注意,覆盖rc信道有点像"错误";"黑客";解决方案根据dronekit python文档:

强烈建议通道超控(也称为"RC超控"((它们主要用于模拟用户输入和实现某些类型的操纵杆控制时(。

相反,使用适当的MAVLink命令,如DO_SET_SERVO/DO_SET_REAY,或者更一般地设置所需的位置或方向/速度。

如果您别无选择,只能使用通道覆盖,请在Github问题中解释原因,我们将尝试找到更好的替代方案。

因此,我还建议您不要依赖持续3秒的RC覆盖。

最新更新