Edge 2上两台imx415如何同步?

Which version of system do you use? Khadas official images, self built images, or others?

edge2-ubuntu-20.04-gnome-linux-5.10-fenix-1.5.1-230710-emmc-develop.img

Please describe your issue below:

Edge 2的cam1和cam3分别连接了一个imx415,如何使这两个相机同步,让它们同时得到图像?

Post a console log of your issue below:

RK3588支持双摄像头操作,cam1和cam3的使用请参考文档

视频节点:
cam1 → /dev/video33
cam3 → /dev/video42

这个文档我看过了,对我的帮助很小。
我目前尝试了使用两个线程分别打开两个摄像头获取图像数据,让两相机尽可能同时打开同时拍摄,但是两相机获取的图片的时间戳总会有差。
两线程开启,让他们尽可能的同时开启视频流streamon,但是不会真正同时,他们输出的第一帧数据总有一个0.002s-0.01s的时间差。而且这个时间差并不稳定,但是比顺序打开两个视频流的情况下的时间差要小。
我希望得到双目imx415,两台相机同时启动、同时拍摄。有没有什么方法能够做到?

这个问题关键在于两个摄像头的同步,如何做软件同步?或者硬件同步?

延迟的原因可能有多种。 由于操作队列的原因,文件系统无法同时写入两个文件而没有任何时间延迟。 但您对延迟的描述是 > 0.01 秒,这比每秒 60 帧(0.0166 秒)的延迟要短。 所以我认为这不会对你的申请产生太大影响。

可能有一个软件计时器,将每秒帧速率锁定为每秒 30 或 60 帧,并确保在最小延迟间隔内捕获帧数据

我们的要求是左右目的时间差不超过0.003s,根据目前的条件,其实只要能让他们同时启动,基本上就能满足左右目时间差小于0.003s的要求。正如前面所说的,双线程启动并不稳定。这个软件计时器在哪里可以找到设置,可以的话,启动后,让两个摄像头等待?同步一下,再写入帧数据,也是能满足要求的。

影响延迟的因素有很多,例如文件系统延迟、CPU 和 ISP 之间的总线延迟。 您从 ISP 传输的图像分辨率是多少?
也许您可以尝试降低分辨率以减少传输延迟并减少所花费的时间。 如果您使用 3840x2160 全分辨率,则可能无法根据所需的延迟同步输出。

分辨率是640*480,是uyvy格式的数据。

好吧,在这种情况下,分辨率可能不会影响延迟,但你说时间戳会受到影响。 在这种情况下,主要是文件系统问题。 您可能会因存储延迟瓶颈而遇到问题。 没有其他原因导致出现此问题,您可以通过创建用于存储图像的 ramdisk 并在其中写入来确认这一点。 看看你是否遇到这样的瓶颈。

:face_with_spiral_eyes:您说的这个方法我不会具体操作。
但是我认为应该不是这个问题,因为在多线程启动相机的几次尝试中,有数次两台相机第一帧图片的时间戳(由v4l2_buf得到的)差值小于0.003s。能否简单些,例如让两台不同相机的启动时间同步(同时启动)?

不幸的是,我不知道您的软件的更多具体细节 :sweat_smile: 但也许我可以提供另一个建议。 也许在你的主线程上,你可以在生成线程之前创建一个信号量。 在线程启动并打开各自的视频节点进行操作后,让线程轮询信号量的状态,当检测到变化时,您可以开始让每个线程对相机进行操作。 这样您就可以消除任何开始时间不同步的情况。