Hey everyone, I’m trying to get my Arducam ToF camera running at 60 FPS on a Raspberry Pi 5 and hitting a wall. The sensor datasheet says this thing can do up to 120 FPS, but no matter what I try, I seem to be capped at around 30 FPS for the depth stream.
Is it actually possible to push past 30 FPS on the Pi 5? Or is there some hardware/driver bottleneck I’m running into? I’ve been digging through settings but can’t find the right combo.
Also wondering: should I be using raw data streaming mode instead of depth mode if I want higher frame rates? And what’s the recommended configuration — firmware version, resolution, interface mode — to hit 60 FPS or better?
Running the Arducam ToF on a Raspberry Pi 5. Any pointers appreciated.
This is a really common point of confusion with ToF cameras, so let me break down what’s happening.
The sensor itself does capture raw frames (phase images) at 120 FPS — so the datasheet isn’t wrong. But here’s the catch: to generate a single usable depth map, the camera needs to capture and process four distinct raw phase images. Each of those four frames is taken with a slightly different phase offset, and they all get combined mathematically to produce one depth frame.
So the math works out to: 120 raw FPS / 4 = 30 depth map FPS.
This isn’t a Raspberry Pi 5 limitation, and it’s not a driver issue either. It’s baked into how the ToF sensor does depth calculation. There’s no firmware setting, resolution tweak, or interface mode that can get you a 60 FPS depth map — the sensor simply cannot complete four phase captures and the depth computation faster than that given the 120 FPS raw capture ceiling.
Now, if your application can work with raw phase images instead of computed depth maps, you can grab those at the full 120 FPS. But fair warning: raw phase images are not depth data. They’re the intermediate captures — you’d need to do the depth computation yourself downstream, and that’s nontrivial. If you just need the depth output, 30 FPS is your ceiling.
Ah, that makes a lot of sense now. I was going in circles thinking it was a config issue or something on the Pi side. The 4-phase capture per depth frame explains it perfectly. Thanks for the detailed explanation — I’ll stick with 30 FPS depth mode for now and maybe look into the raw phase approach down the road if we really need the higher temporal resolution.