2

对于我在大学的最后一年项目,我正在扩展一个名为 Rviz for Android 的应用程序。这是一款适用于 Android 平板电脑的应用程序,它使用 ROS(机器人操作系统)来显示来自机器人的信息。该项目的主要意图本质上与传统的增强现实相反——我不是将数字化的东西投影到现实世界的视图上,而是将来自平板电脑相机的现实世界的视图投影到数字化视图上。世界(抽象地图)。该应用程序的预期目的是当平板电脑四处移动时,现实世界的视图应该在地图上移动。

为了在屏幕上移动摄像头的视图,我使用平板电脑的加速度计并计算行进距离。这本质上是有缺陷的,因此,运动远非准确(这本身并不重要——它是我报告的好材料)。为了改善摄像机源的移动,我希望使用放置在现实世界中预定义位置的标记,目的是如果检测到标记,视图会跳转到标记的位置。不幸的是,虽然有许多处理标记检测的 SDK(例如 Qualcomm SDK),但它们都面向适当的增强现实(也就是说,在标记上覆盖一些东西)。

到目前为止,我确定的唯一两个可能有用的框架是 OpenCV(看起来确实很有前途,尽管我对 C++ 不是很熟悉)和 AndAR,它似乎又非常专注于传统的 AR 用途,但我可能能够修改。这些框架中的任何一个都适合吗?还有其他方法可以实现解决方案吗?

如果它有帮助,这是我正在扩展的应用程序的源代码这是 Android 上 ROS 的源代码(使用相机的代码在“android_gingerbread_mr1”文件夹中。我还可以提供一个链接到我对 Rviz 的扩展,如果这也有帮助的话。非常感谢!

编辑:我目前遇到的主要问题是尝试集成访问相机的两个单独的类(OpenCV 中的 JavaCameraView 和 ROS 中的 CameraPreviewView)。他们都需要同时活跃,但他们做的事情不同。我确信我可以将它们结合起来。如前所述,如果需要,我将链接到/上传有问题的类。

4

2 回答 2

2

查看OpenCV 文档中关于模板匹配的部分。这个线程也可能有用。

于 2013-03-04T19:45:20.923 回答
1

所以我设法找到了解决我的问题的方法,这与我想象的完全不同。所有的图像处理都卸载到计算机上,并由 ROS 节点执行。此节点使用名为ArUco的库来检测标记。标记由库提供的单独程序生成,每个标记都有自己的唯一 ID。

当检测到标记时,会发布一条包含标记 ID 的 ROS 消息。平板电脑上的应用程序接收到消息,并根据它接收到的标记移动现实世界的视图。它工作得很好,虽然它有点不可靠,因为我必须使用低图像质量来更快地渲染和传输图像。这就是我的解决方案!一旦项目完全完成,我可以在这里发布我的源代码。

于 2013-03-08T17:00:02.563 回答