【问题标题】:if statement help for controling a droneif 语句有助于控制无人机
【发布时间】:2015-05-17 14:47:50
【问题描述】:

我有一个 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循环,但我认为我不能在这里。任何帮助表示赞赏,谢谢。

【问题讨论】:

  • if(piccY - facecY &gt; 50){ 条件用于向上和向下。

标签: java if-statement controls conditional-statements


【解决方案1】:

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

【讨论】:

  • 我看到的唯一会停止的是drone.wait()。但我认为这不会有帮助;/
【解决方案2】:

也许你可以引入状态。

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 状态数组可以模拟斜坡上升或行进距离。

【讨论】:

    猜你喜欢
    • 2019-07-02
    • 1970-01-01
    • 2016-04-07
    • 2017-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多