视频AR无人机的随机帧为空,然后无法使用OpenCV获取新图像



我正在做一个非常简单的程序,在我的电脑上打印飞行过程中的AR.Drone视频。

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

下面是我的简单代码:
int main(void)
{
  cv::VideoCapture cap;
  cv::Mat image;
  if (!cap.open("tcp://192.168.1.1:5555"))
    {
      printf("AR.Drone ERROR CONNECTn");
      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…

任何想法?

当我想用AR.Drone 2.0获得稳定的视频流时,我也遇到了同样的问题这花了一些时间,但我意识到帧丢失是因为无人机认为连接在没有AT命令的2秒后丢失。所以如果你打开流,不做更多的是好的(流将是好的),但在你发送任何AT命令后,2秒后无人机将断开。因此,如果没有其他命令发送以保持连接存活,则需要发送例如悬停命令给无人机。

相关内容

  • 没有找到相关文章

最新更新