在 RPI-3B+ 中安装 OV7251 驱动程序以与 ROS 一起使用

Install OV7251 driver in RPI-3B+ to use with ROS

我想安装 OV7251 摄像头驱动程序以配合我最近购买的模块 Arducam OV7251 MIPI,因为我需要执行称为虚拟惯性导航 (VIN) 和全局快门的类 SLAM 系统为此,相机是首选。就我的系统而言,我在 RPI-3B+ 运行ning Ubuntu 16.04 上使用 ROS Kinetic。我正在使用这款相机,因为它接近我的价位(<20 美元),并且通过 RPI 的 CSI 端口,据消息人士称,这比通过 USB 更容易和更快。

我想拿这台相机并将它的数据发布到一个主题,这样我用于 VIN 的存储库 OpenVINS 就可以跟踪相机的位置。现在,我使用的相机除了制造商的 github 页面外没有太多内容,它在 Ubuntu 上不起作用,并且无法连接到 ROS。现在,我对 RPI(包括 ROS)相当缺乏经验,因为我最初想在 Arduino 上执行此操作,但这基本上是不可能的,所以我怀疑我是否能够编写一个简单的 ROS 节点,更不用说与CSI 端口。

目前,我无法为此找到很多库,而且给我的帮助也被证明是非实质性的。相机本身没有 RPI 支持的驱动程序,这就是为什么我找不到任何 /dev/video 库,cheese 什么也没找到,命令 $ Vcgencmd get_camera returns 没有检测到设备。有人建议内核 hacking,以便使用 here. While I do not know much about kernel hacking, he reccomended that I follow this 指南之类的库在 menuconfig 中启用模块,在我 运行 defconfig 行之后,我应该在 menuconfig 中搜索“OV7251”并将唯一的模块模块化弹出。尽管多次闪烁并重复此过程以确保我没有选择错误的分支,rpi-5.4.y 分支,或错误的型号,RPI-3B+,但我最终还是卡在了彩虹屏幕上我每次都重新启动。我知道彩虹屏幕要么意味着低功耗,这不是因为我以前有过它 运行,要么是内核错误,这很可能是有道理的。

现在,虽然我非常想修复彩虹屏错误,但我也想知道,在安装 OV7251 驱动程序后,如何让它与 ROS 一起工作以向主题发送数据?由于我怀疑我是否可以编写自己的节点,是否有一个我可以寻找的库来执行此操作,或者以前由于缺少驱动程序而无法工作的库现在突然可以工作了,或者我是否必须使用现有的库并修改吗?无论如何,作为新手,一个更底层的教程来完成这个会非常方便。

但是,如果这不是软件,不支持这个相机是有充分理由的,有没有其他便宜的全局快门相机我可以使用?我在各种搜索中似乎找不到很多,但也许你们在这个领域都有更好的 luck/experience。虽然,我确实设法找到了同一家制造商的 another 库,它恰好支持我的相机型号,甚至还有一个适用于 ubuntu 的 ROS 节点。但是,我相信如果可以做到这一点,那么仅通过 CSI 端口也可以做到这一点,而不是为 pi 额外购买 40 美元的 USB 摄像头帽,与此同时,我开始怀疑这家公司的有效性存储库。

然而,事实上我在 RPI 的 CSI 端口上发现了很少关于这台相机的信息,这家公司的知名度让我害怕这可能是不可能的,如果是的话,做 link 给我一些其他好的,希望有据可查的相机,这很可能需要很多。如果用我设置的参数根本不可能得到我想要的结果,那么滚动快门相机对 VIN 性能的影响有多严重,此外是否有任何专门为滚动快门设计的数据集可以最大限度地减少质量下降?这个地形对我来说太陌生了。

好的,所以我让一个 rpi 工程师在 rpi 的固件中为 ov7251 添加了一个 dtoverlay,并且最近的 rpi-update 在内核中有覆盖。

sudo rpi-update 安装更新,然后我将 dtoverlay=ov7251 添加到 /boot/config.txt 以启用覆盖,我通过 运行 对其进行了编辑宁sudo nano /boot/config.txt。而且存储库只有一个依赖项 v4l-utils,运行ning sudo apt-get install v4l-utils 很容易安装它。最后我运行sudo reboot来初始化变化。

为了将图像拉入 ROS,我编辑了一个名为 usb_cam 的 v4l2 节点,以接受 ov7251 相机使用的像素格式 (Y10)。我的叉子可以找到 here。为了安装它,(因为原始 repo 的文档对安装的说明很少),我 运行:

cd ~/catkin_ws/src
git clone https://github.com/ai-are-better-than-humans/usb_cam.git
cd ..
catkin_make

然后你所要做的就是roslaunch usb_cam usb_cam-test.launch启动节点。我的一开始是黑暗的,所以我不得不进入启动文件并稍微调整一下亮度。当您在那里时,请确保 pixel_format 参数的值为 Y10

您应该收到一条 sensor_msgs::Image 消息发布到名为“/image_raw”的主题,您可以 运行 rqt_graph想象它。非常感谢 raspberry pi 论坛上的 6by9,我认为没有他我无法完成它,他做了很多我非常感谢的工作。 Thought id 在这里分享知识,以防有人觉得它有用。

编辑:我听说如果节点占用太多 CPU,您也可以使用 catkin_make --pkg usb_cam -DCMAKE_BUILD_TYPE=Release 而不是 catkin_make 进行编译。此外,如果您在编译时看到大量错误消息,没关系,它仍然应该可以工作,但如果您想摆脱它们,您可以参考 this 来自 ros 线程的回答:

It looks like you need to install libavcodec. I don't know the exact command to install it off the top of my head, but the format will look like this:

sudo apt-get install libavcodec

The exact package name might not be libavcodec. It maybe looks something like libavcodec-VERSION-NUMBER or libavcodec-dev. In these situations you can search for packages with a command like this:

apt-cache search libavcodec

This will find all packages that have text containing "libavcodec". This should find the correct package for you to install.