Java 使气球飞到指定高度/高度的算法

Java 使气球飞到指定高度/高度的算法,java,height,balloon,altitude,Java,Height,Balloon,Altitude,我在寻找一种让机器人气球飞到某个高度的方法/算法。该机器人由树莓Pi控制,并配有螺旋桨。螺旋桨速度可以设置为几个值(它使用PWM,因此技术上有1024个不同的功率输出)。 气球有一个指向下方的距离传感器,因此每秒可以多次获得当前高度。 到目前为止,我唯一的想法就是不断地测量高度,并根据剩下的行程高度设置为最大速度。虽然这似乎不是最好的选择,但无法确定如何将所有电源输出都安装到电源中 任何想法都欢迎。我正在使用Java编写项目代码,但是任何高级算法/描述都将非常棒 Thx 魔术伪代码 whil

我在寻找一种让机器人气球飞到某个高度的方法/算法。该机器人由树莓Pi控制,并配有螺旋桨。螺旋桨速度可以设置为几个值(它使用PWM,因此技术上有1024个不同的功率输出)。 气球有一个指向下方的距离传感器,因此每秒可以多次获得当前高度。 到目前为止,我唯一的想法就是不断地测量高度,并根据剩下的行程高度设置为最大速度。虽然这似乎不是最好的选择,但无法确定如何将所有电源输出都安装到电源中

任何想法都欢迎。我正在使用Java编写项目代码,但是任何高级算法/描述都将非常棒

Thx

魔术

伪代码

  while(true){
    val height = getHeight(); // from sensor

    // Get the difference between the current height and
    // the TARGET height.  Positive values mean too low
    // while negative values mean too high
    val offset = TARGET_VALUE - height;

    // Set the power to some direct ratio of the offset
    // When the baloon is at 0 height, the offset should 
    // be relatively high, so the power will be set 
    // high.  If the offset is negative, the power will be 
    // set negative from the current power.
    setPower(offset);// I'll leave it up to you to figure out the ratio
}
有一个很好的“游戏”可以让你尝试解决这个问题:(现在似乎是开源的)。创建一个有翼抓取器(如果你是FPS类型的人,也可以是射手),并尝试让它只使用高度和马达控制飞行到特定的目的地

一般来说,MadConan的伪代码是可行的,但是主要任务在于编写一个smart setPower函数。最后,您需要一些平滑功能,以降低与您离理想高度的距离有关的功率,但是该功能的精确值完全取决于您的硬件和最终系统的重量


根据最终设置的价值和/或脆弱程度,您可能需要开发一个学习系统,以欠/超调为基础,在平滑功能运行时调整平滑功能。确保在计算中考虑上下风等因素。

你确定使用Java吗?@nipkon:为什么不使用Java?当然,对于R-Pi来说,C可能是更好的选择,但它也支持Java。很好的解释。我的算法(粗略地)考虑了这一点。它将取决于每秒执行多少次测量。随着引出序号越来越接近目标值,偏移量将越来越小,因此功率也应降低。我同意,虽然,这不是很简单,因为它实际上可能永远不会达到的高度。同样,这取决于采样频率。采样不是问题,因为您可以根据速度、加速度和时间轻松插值当前位置。传感器只是对你假设的修正,特别是对于风等外部因素。我强烈建议试试那个游戏。起初我认为控制这样的机器人应该非常容易,但后来第一次(幸运的是数字)崩溃教会了我另外一个道理我一直认为它是真正垂直的,但现在我想起来了,风会引起俯仰,使传感器与地面成一定角度,这将从实际高度产生巨大的三角。因此,需要一个完整的x、y和z坐标传感器进行补偿。谢谢您的回答。这个周末我会玩弄这个建议的节目,去感受一下。这个气球主要是在室内使用的,所以我不认为风会是个大问题。你认为每秒多少次测量能提供足够的信息?这取决于气球的加速能力。它加速得越快,您就越需要进行采样。实际上,一开始可能是1/10秒或更快。