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

标签 linux ubuntu linux-kernel raspberry-pi camera

我想安装 OV7251 摄像头驱动程序来使用我最近购买的模块 Arducam OV7251 MIPI ,因为我需要执行称为虚拟惯性导航 (VIN) 的类似 SLAM 的系统,因此首选全局快门相机。就我的系统而言,我在运行 Ubuntu 16.04 的 RPI-3B+ 上使用 ROS Kinetic。我正在使用这款相机,因为它接近我的价格点(<20 美元),并且通过 RPI 的 CSI 端口,消息来源说这比通过 USB 的更容易和更快。
我想拿这台相机并将它的数据发布到一个主题,我用于 VIN 的存储库,OpenVINS ,可以跟踪相机的位置。现在,我正在使用的相机除了制造商的 github 页面之外没有太多内容,该页面在 Ubuntu 上不起作用,并且无法连接到 ROS。现在,我对 RPI(包括 ROS)相当缺乏经验,因为我最初想在 Arduino 上执行此操作,但这主要是不可能的,所以我怀疑我是否能够编写一个简单的 ROS 节点,更不用说与CSI 端口。
目前,我无法为此找到很多图书馆,而且事实证明给我的帮助并不重要。相机本身没有 RPI 支持的驱动程序,这就是为什么我找不到任何/dev/video 库,cheese 什么都没有出现,命令 $ Vcgencmd get_camera返回未检测到的设备。有人建议进行内核黑客攻击,以便使用 here 之类的库启用 menuconfig 中的模块.虽然我对内核黑客不太了解,但他建议我关注 this指导,在我运行 defconfig 行之后,我应该在 menuconfig 中搜索“OV7251”并将唯一弹出的模块化。尽管多次闪烁并重复此过程以确保我没有选择错误的分支、rpi-5.4.y 分支或错误的型号 RPI-3B+,但每次重新启动后,我最终都卡在了彩虹屏幕上.我知道彩虹屏幕要么意味着低功耗,这不是因为我之前运行过它,要么是内核错误,这很可能是有意义的。
现在,虽然我非常想修复彩虹屏错误,但我也想知道,在安装了 OV7251 驱动程序后,如何让它与 ROS 一起工作以将数据发送到主题?由于我怀疑我是否可以编写自己的节点,是否有一个库可以让我执行此操作,或者以前由于缺少驱动程序而无法工作的库现在会突然工作,还是我必须采用现有的一个并且修改它?在任何情况下,一个更底层的教程来完成这个将非常方便,因为我是新手。
但是,如果这不是软件,并且不支持此相机的原因是有充分理由的,还有其他便宜的全局快门相机我可以使用吗?在我的各种搜索中,我似乎找不到很多,但也许你们在这个领域都有更好的运气/经验。虽然,我确实找到了another这家制造商的库恰好支持我的相机型号,甚至还有一个可以在 ubuntu 上运行的 ROS 节点。但是,我相信如果可以做到这一点,那么只需 CSI 端口就可以做到这一点,而不是为 pi 购买额外的 40 美元 USB 摄像头帽,与此同时,我开始怀疑这家公司的有效性存储库。
然而,事实上,我在 RPI 的 CSI 端口上仅发现关于这台相机主题的信息很少,这家公司有多出名,这让我害怕,这可能是不可能的,如果是的话,请给我一些其他的好东西,希望能好- 记录相机,这很可能需要很多。如果用我设置的参数根本不可能得到我想要的结果,那么卷帘快门相机会对 VIN 的性能产生多大的影响,此外,是否有任何专门为卷帘快门设计的数据集可以最大限度地减少质量下降?这个地形对我来说太陌生了。

最佳答案

好的,所以我让一个 rpi 工程师在 rpi 的固件中为 ov7251 添加了 dtoverlay,并且最近的 rpi-update 在内核中有覆盖。
我做了sudo rpi-update安装更新,然后我添加了dtoverlay=ov7251到/boot/config.txt 以启用覆盖,我通过运行 sudo nano /boot/config.txt 对其进行了编辑.并且仓库只有一个依赖,v4l-utils ,通过运行 sudo apt-get install v4l-utils 很容易安装.最后我跑了sudo reboot初始化更改。
为了将图像拉入 ROS,我编辑了一个名为 usb_cam 的 v4l2 节点。为了接受ov7251相机使用的像素格式(Y10)。我的 fork 可以找到here .为了安装它,(因为原始仓库的文档对安装说得很少),我跑了:

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将其可视化。非常感谢树莓派论坛上的 6by9,不要认为没有他我就无法完成,他做了很多我非常感谢的工作。思想id在这里分享知识,以防有人发现它有用。
编辑:我听说你也可以用 catkin_make --pkg usb_cam -DCMAKE_BUILD_TYPE=Release 编译而不是 catkin_make如果节点占用过多的 CPU。另外,如果您在编译时看到大量错误消息,这很好,它仍然应该可以工作,但是如果您想摆脱它们,可以引用 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.

关于linux - 在 RPI-3B+ 中安装 OV7251 驱动程序以与 ROS 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62604858/

相关文章:

linux - 如何让 Ubuntu 成功搜索许可证的环境变量?

c - 在c中指针变量保存的地址上使用模数

linux - 在文件夹中运行 "N"Shell 脚本

linux - bash:一次从字符串中读取一个字符

shell - 在 shell 文件中使用 xautomation

linux - 如何让 tickless 内核工作? nohz_full、rcu_nocbs、isolcpus 还有什么?

ioremap 后的内存访问非常慢

c - kfree 函数调用时发生了什么

linux - 如何在 Vimdiff 中展开/折叠差异部分?

linux - 在 bash 中比较整数和 float