【问题标题】:Random frame of Video AR Drone is empty and then can't get a new image with OpenCVVideo AR Drone的随机帧为空,然后无法使用OpenCV获取新图像
【发布时间】:2014-05-16 18:36:25
【问题描述】:

我正在做一个非常简单的程序,在我的计算机上打印飞行期间的 AR.Drone 视频。

它在几秒钟内运行良好,然后程序随机中止,因为框架为空。我决定测试一下,但是现在,当一个框架为空时,后面的所有框架也都是空的。

这是我的简单代码:

int main(void)
{
  cv::VideoCapture cap;
  cv::Mat image;

  if (!cap.open("tcp://192.168.1.1:5555"))
    {
      printf("AR.Drone ERROR CONNECT\n");
      return -1;
    }

  takeoff();

  while (42)
    {
      cap >> image;

      if (!image.empty())
        {
           cv::imshow("AR.Drone", image);
           std::cout << "OK" << std::endl;
        }
      else
        std::cout << "ERROR" << std::endl;
      cv::waitKey(1);
    }    
  return 0;
}

我的输出是:

>OK
>OK
>[...]
>OK
>ERR
>ERR
>ERR

但应该是:

>OK
>OK
>[...]
>OK
>ERR   // okay you got an error ? ...
>OK    // ... I give you a new frame :)
>OK

为什么会永远失败?

如果我不保护它,我会收到错误“OpenCV 错误:错误标志”并且它中止。 AR.Drone 上的连接是 TCP 的,所以我无法减慢 waitKey...

有什么想法吗?

【问题讨论】:

  • 可能是同步问题?您可能需要考虑使用大于 1 毫秒的 waitKey 时间。
  • 我尝试使用更高的 waitKey 时间,但它仍然崩溃......谢谢您的提议,先生!
  • 那是一个网络摄像机。如果您失去联系,就没有神奇的重新连接。您将不得不释放()旧捕获并打开一个新捕获。
  • 感谢您的回答 :) 不幸的是,它每 3 秒失败一次,需要 5 秒重新连接.. o.O 有没有办法避免这种断开连接?

标签: c++ opencv tcp ar.drone


【解决方案1】:

当我想使用 AR.Drone 2.0 获得稳定的视频流时遇到了同样的问题 花了一些时间,但我意识到帧丢失是因为无人机在没有 AT 命令的情况下 2 秒后认为连接丢失。因此,如果您打开流并且什么都不做,那很好(流会很好),但是在您发送任何 AT 命令之后,无人机将在 2 秒后断开连接。因此,如果没有发送其他命令来保持连接处于活动状态,您需要做的就是向无人机发送例如悬停命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多