if 语句有助于控制无人机

if statement help for controling a drone

我有一个 ardrone 可以检测人脸,给我发送人脸坐标等。

我在无人机追脸的阶段。我有脸部中心点和框架中心点,通过它们我可以计算出我向无人机发送什么命令。

但我的问题是当无人机看到一张脸时,它会发送第一个命令,例如go.left() 它一直向左移动直到崩溃。

我在这里做错了什么?这是我的一段代码

//if result positive on x move drone left
if(piccX - facecX > 50){
    drone.goLeft();                  
}

//if result negative on x move drone right
if(piccX - facecX < 50){
    drone.goRight();
}

//if result positiveon Y, move drone up
if(piccY - facecY > 50){
    drone.up();
}

//if result negative on Y, move drone Down
if(piccY - facecY > 50){
    drone.down();
}

我介绍sleep()吗?我想做一个 while 循环,但我认为我不能在这里。感谢任何帮助,谢谢。

根据我使用 ADrones 的经验,这些功能会不断地使无人机朝那个方向移动。 drone 对象中应该有其他方法可以调用。我认为有一个叫做 setPosition().

也许你可以引入状态。

enum Heading {
    None, Up, Down, Left, Right
}
Heading currentHeading = Heading.None;

//if result positive on x move drone left
if(piccX - facecX > 50 && currentHeading != Heading.Left){
    drone.goLeft();
    currentHeading = Heading.Left;                  
}

//if result negative on x move drone right
if(piccX - facecX < 50 && currentHeading != Heading.Right){
    drone.goRight();
    currentHeading = Heading.Right;                  
}

//if result positiveon Y, move drone up
if(piccY - facecY > 50 && currentHeading != Heading.Up){
    drone.up();
    currentHeading = Heading.Up;                  
}

//if result negative on Y, move drone Down
if(piccY - facecY > 50 && currentHeading != Heading.Down){
    drone.down();
    currentHeading = Heading.Down;                  
}

如果在当前方向上这还不够,也许创建一个 currentHeading 状态数组可以模拟斜坡上升或行进的距离。