How do I run Apriltag detection on multiple cameras and get their tag detections separately?

Hi,
The isaac apriltag detector works great with one camera. However, for my use case, one camera simply won’t cut it. How can I run multiple cameras and interpret their inputs separately?

I’ve already tried modifying usb_cam_params and the launch.py, and that does indeed work to get the system to run tag detections on multiple cameras concurrently. However, I found that when I try this, the components talk over each other and the tag data is subsequently published to /tag_detections all in one amalgamation of pose3ds originating from different cameras.

What I want is a clean separation of camera data, with each camera publishing to its own ros topic so I can interpret each tag pose as coming from a distinct source. Unfortunately, it seems that no matter what I try there’s always some conflict between nodes or topics.

Hi @3x71us1v3

A good strategy to fix your issue is to split your camera output into different topics for the camera and start the April tag detector from this output.

You can use the Isaac ROS image proc - Crop node

Best,
Raffaello

Hi Raffaelo,

I have a similar question to the original poster. I would also like to detect Apriltags with multiple camera streams but publish the detections separately or even implement a transformation based on the physical locations of the cameras. You mention using the Isaac ROS image proc Crop mode to solve this problem. Can you go into more detail about what could be required because I don’t see how this could be done? Two potential ideas I had are to run multiple ROS master nodes across separate Docker containers, or merge the camera streams using something like Deepstream and run the Apriltag detection pipeline on that combined stream. Any input you have is greatly appreciated.

Thanks,
Nicholas