【问题标题】:IP camera setup and control from a C++ application从 C++ 应用程序设置和控制 IP 摄像机
【发布时间】:2013-04-22 12:46:52
【问题描述】:

我想通过 WIFI 从 PC 上控制一个基于 arduino 和 IP 摄像头的小型机器人,但是我已经浏览了很长一段时间的互联网,但我仍然不知道如何设置它。

我想在机器人上安装一个 WIFI 路由器,例如 this one,通过以太网连接到控制电机的 arduino,还通过 WIFI 连接到旁边的 IP motorised camera(我找不到这么小的路由器有几个端口)。我会将我的笔记本电脑连接到这个路由器广播的网络(我不能使用我学校的网络)向相机或 arduino 发送命令,并从相机中检索视频。

现在,我到处寻找,但找不到如何从笔记本电脑上的客户端应用程序 (C++/Qt/Windows) 与相机交互? OpenCV 听起来很适合直播,但它的马达呢?

【问题讨论】:

  • 理想情况下,我会寻找更简单的 PELCO PTZCameraWrapper 之类的东西,但我认为它特定于他们的网络和摄像头:pdn.pelco.com/content/continuous-panning
  • 不清楚这里问的是什么。似乎是一个很酷的项目,但其中很多可能与问题根本无关。也许你应该把它分成两个问题,一个是关于网络的,一个是关于控制相机的。正在寻找具有 C++ API 的相机,还是为您链接的相机寻找 API?
  • 感谢您的回答。你说得对,我至少应该坚持最微妙的方面:我已经有了相机(上面链接的型号),并且有一个很好的软件甚至可以访问相机的网站,但我想有一个 API 来控制相机并从中检索视频。 OpenCV 已经存在用于检索视频,但我不知道如何控制电机......它应该与检索视频一样常规,不是吗?
  • 已删除,因为我的建议已在下方提出。

标签: network-programming wifi arduino


【解决方案1】:

IP 摄像头无需与 Arduino 软件链接。有时最好使用最简单的解决方案来达到良好的效果。我在我的一个机器人上做了同样的事情,我将 IP 摄像头与 Arduino 网络分开运行,这样我就可以使用拥有自己应用程序的摄像头的所有功能。 可以从定制的应用程序运行机器人,该应用程序还在同一应用程序的单独窗口中启动相机应用程序。通过这种方式,您可以控制运动电机,并在应用程序的窗口中托管相机软件并统一客户体验。只需处理您的控件和颜色,以协调表单的布局。 您可以找到更多关于如何对其进行编码的参考资料 here 和 here 开始。

【讨论】:

  • 这是一个很好的观点,我实际上打算这样做,但是来自一个统一的自定义界面。目标是用屏幕上的按钮以外的其他东西来控制电机,所以我必须想办法自己发送信号。
  • @MisterMystère,我已经详细阐述了我的原始答案,以便为您提供有关如何实现目标的参考。看答案的第二部分。
  • 谢谢,即使我找到了解决方法,并且因为链接是针对 C# 应用程序的,它仍然是我没有想到的替代方案,如果无法绕过应用程序,我以后可以使用它。再加上你正处于声誉的早期成长阶段,所以我很高兴奖励你这个赏金:)
  • @MisterMystère 谢谢!!高度赞赏。我是一个 c# 人,但是,同样可以在 c++ 中完成。好看。
【解决方案2】:

尚不完全清楚您要做什么(具体如范围;重点是构建硬件或使用硬件),您已经拥有什么硬件(例如,您是否已经拥有机器人等) ,以及您的经验水平。

如果您正在谈论带摄像头的移动机器人,我建议您查看Scribbler/Fluke 组合(该链接适用于两者的早期版本 - 较新的版本功能更全面),无论是解决方案还是您可以从中构建的想法和示例代码。

Scribbler/Fluke 使用蓝牙与主机通信,并且 Fluke 具有用于成像的板载摄像头。范围为@ 100 米。 Fluke 运行一个 linux 版本,因此它可以处理视频处理和许多其他操作。

【讨论】:

  • 感谢您的回答。那么让我澄清一下:我正在尝试通过嵌入式 WIFI 路由器(上面链接的模型)在笔记本电脑和 PTZ 摄像机(上面链接的模型)之间通过 WIFI 进行通信。由于涉及的数据速率和范围(> 100m),没有蓝牙。该机器人由几块即将被购买的板(其中包括arduino)组成;我现在只有相机,但通常就足够了。最后,我完成了机电一体化工程研究,曾在一家著名的汽车制造商从事电子行业工作,并在一家国家电力供应商从事 C++ 编程工作。
  • 如上所述,我正在寻找用于控制相机电机的 API(从中检索视频似乎是 OpenCV 相当优雅的功能),或者帮助我自己做.它似乎是基于 HTTP 协议的,我可能应该提一下,我只有它的概念。
【解决方案3】:

知道了!我用 WireShark 嗅探了与我的相机建立的通信端口(使用“HTTP 端口 99”过滤捕获),并注意到 HTTP 请求“/decoder_control.cgi?command=0”、“/decoder_control.cgi?command=2”等。从我的浏览器发送它们后:“192.168.1.99:99/decoder_control.cgi?command=0”等,结果这个 IP 摄像机的命令与 this address 的命令相同,它就像一个魅力!

虽然无法调整速度,但太糟糕了(它在设置中设置,也许我可以通过相同的方式动态更改其值)但这是一个开始。

无论如何,感谢您的帮助,保持我最喜欢的专业论坛的出色工作。

【讨论】:

    【解决方案4】:

    我会使用一个刷有 OpenWrt 的路由器作为你的机器人通讯中心。从这里您可以直接连接 IP 摄像机以及向您的 Arduino 发送串行命令进行控制。

    您可以使用 OpenCV 直接连接到 IP 摄像机流。

    我还会编写一个小型服务器,在路由器上作为后台服务运行。该服务器将负责向 arduino 发送串行命令以控制机器人的电机。

    总而言之,这需要几个软件:arduino 代码将串行命令解释为用于电机控制的 H 桥,服务器(python 很容易)接收 tcp 数据包(或标准 Web 请求)并转换信息传递到串行,您的 gui 界面从 IP 摄像机加载当前图像(看起来您已经想通了),以及与服务器的 TCP 套接字连接以执行电机的命令和控制。

    【讨论】:

    • 谢谢你,这是一些非常有价值的建议。这将避免在 arduino 上使用以太网屏蔽,这意味着成本更低(我的时间没有计入我紧张的预算中)。我更关心如何在实践中控制相机的电机,但它仍然回答了我的部分问题(我同意它由两个组成):)
    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 2013-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多