Multiple Argus Camera in Isaac SDK

Hi @ShaneCCC @JerryChang @hemals Does Argus Component in Isaac SDK support Multiple Cameras, I want to broadcast 3 cameras simultaneously in Isaac SDK.

I don’t clear the relative of Isaac SDK with Argus, however Argus able support 3 cameras.

@dusty_nv Need your valuable Inputs, Right now, I am unable to use multiple streams of nvargus cameras inside Isaac . Now I feel using Deepstream SDK inside Isaac SDK is the only option ?

As mentioned in thread, you should be able to configure multiple ArgusCsiCamera components to make this work in Isaac SDK.

@hemals

This is my JSON file for your reference :
multi_argus.app.json (4.8 KB)

Nope, the Multi Argus Camera does not work !! I am attaching my Json File for your reference and the Error code I am getting is :

(NvCameraUtils) Error InvalidState: Mutex already initialized (in Mutex.cpp, function initialize(), line 41)
(Argus) Error InvalidState: (propagating from src/rpc/socket/client/ClientSocketManager.cpp, function open(), line 54)
(Argus) Error InvalidState: (propagating from src/rpc/socket/client/SocketClientDispatch.cpp, function openSocketConnection(), line 258)
(Argus) Error InvalidState: Cannot create camera provider (in src/rpc/socket/client/SocketClientDispatch.cpp, function createCameraProvider(), line 102)
2022-04-05 18:13:16.856 ERROR external/com_nvidia_isaac_engine/engine/alice/components/Codelet.cpp@229: Component ‘argus/camera’ of type ‘isaac::ArgusCsiCamera’ reported FAILURE:

Failed to create CameraProvider

2022-04-05 18:13:16.856 ERROR external/com_nvidia_isaac_engine/engine/alice/backend/event_manager.cpp@43: Stopping node ‘argus’ because it reached status ‘FAILURE’
====================================================================================================
| Isaac application terminated unexpectedly |
====================================================================================================
#01 external/com_nvidia_isaac_engine/engine/alice/tools/main(+0x65fc8) [0x5592ea7fc8]
#02 external/com_nvidia_isaac_engine/engine/alice/tools/main(+0xcfa88) [0x5592f11a88]
#03 external/com_nvidia_isaac_engine/engine/alice/tools/main(+0xcfd90) [0x5592f11d90]
#04 linux-vdso.so.1(__kernel_rt_sigreturn+0) [0x7f8f99d6b0]
#05 isaac::ArgusCsiCamera::stop() /home/octo/deploy/octo-ws/multi_argus-pkg//packages_jetpack45/sensors/libargus_camera_module.so(_ZN5isaac14ArgusCsiCamera4stopEv+0x104) [0x7f8e55796c]
#06 isaac::alice::CodeletCanister::stop() /home/octo/deploy/octo-ws/multi_argus-pkg//packages_jetpack45/sensors/libargus_camera_module.so(_ZN5isaac5alice15CodeletCanister4stopEv+0x4b4) [0x7f8e59e5fc]
#07 isaac::alice::NodeCanister::stopCodelets() const /home/octo/deploy/octo-ws/multi_argus-pkg//packages_jetpack45/sensors/libargus_camera_module.so(_ZNK5isaac5alice12NodeCanister12stopCodeletsEv+0x4c) [0x7f8e5b63fc]
#08 isaac::alice::NodeCanister::stop() /home/octo/deploy/octo-ws/multi_argus-pkg//packages_jetpack45/sensors/libargus_camera_module.so(_ZN5isaac5alice12NodeCanister4stopEv+0x14c) [0x7f8e5b65b4]
#09 external/com_nvidia_isaac_engine/engine/alice/tools/main(+0x72050) [0x5592eb4050]
#10 external/com_nvidia_isaac_engine/engine/alice/tools/main(+0x7219c) [0x5592eb419c]
#11 external/com_nvidia_isaac_engine/engine/alice/tools/main(+0xc95f8) [0x5592f0b5f8]
#12 external/com_nvidia_isaac_engine/engine/alice/tools/main(+0x169f4) [0x5592e589f4]
#13 /usr/lib/aarch64-linux-gnu/libstdc++.so.6(+0xbbe94) [0x7f8f6aee94]
#14 /lib/aarch64-linux-gnu/libpthread.so.0(+0x7088) [0x7f8f78e088]
====================================================================================================
Minidump written to: /tmp/ad2f4e0e-f631-4aa4-45a6c5b9-b2acd4ce.dmp
Segmentation fault (core dumped)

@hemals If you guys are so busy and cannot reply to the topic in 1 Week, I think its better to ditch Isaac SDK and switch to ROS full-time !!

The app json seems fine (camera_id set and there are two nodes for ArgusCsiCamera), but the error here indicates that the libArgus camera provider itself was not available to even request which cameras were connected in the first place.
Can you run this demo with just one camera and make sure Argus is running correctly on your device?

This may be an issue with running multiple ArgusCsiCamera codelets however in the same process but we need to confirm that still. Each ArgusCsiCamera codelet tries to create its own CameraProvider through a shared Argus::CameraProvider::create() which may be the issue here.

You could try using the code in the Isaac ROS version of Argus stereo camera here which uses one CameraProvider for two camera capture sessions as a template for implementing your own N-camera ArgusMultiCsiCamera codelet.

@hemals I confirm I can use Single Argus Camera, I think we will have to write a custom codelet for using multiple Argus cameras, If there is an issue with running multiple ArgusCsi Camera.

I’m staring at the same problem…

app.json below:

{
    "name": "argus_stereo_camera",
    "modules": [
      "sensors:argus_camera",
      "sight",
      "viewers"
    ],
    "graph": {
        "nodes": [
          {
            "name": "argus",
            "components": [
              {
                "name": "MessageLedger",
                "type": "isaac::alice::MessageLedger"
              },
              {
                "name": "camera1",
                "type": "isaac::ArgusCsiCamera"
              }
            ]
          },
          {
            "name": "viewer1",
            "components": [
              {
                "name": "MessageLedger",
                "type": "isaac::alice::MessageLedger"
              },
              {
                "name": "ImageViewer1",
                "type": "isaac::viewers::ImageViewer"
              }
            ]
          },
          {
            "name": "viewer2",
            "components": [
              {
                "name": "MessageLedger",
                "type": "isaac::alice::MessageLedger"
              },
              {
                "name": "ImageViewer2",
                "type": "isaac::viewers::ImageViewer"
              }
            ]
          }
        ],
        "edges": [
            {
                "source": "argus/camera1/image",
                "target": "viewer1/ImageViewer1/image"
            },
            {
                "source": "argus/camera1/image",
                "target": "viewer2/ImageViewer2/image"
            }
        ]
    },
    "config": {
        "argus": {
            "camera1": {
                "mode": 5,
                "camera_id": 0,
                "framerate": 30,
                "focal_length": [
                    700.0,
                    700.0
                ],
                "optical_center": [
                    0.0,
                    0.0
                ]
            },
            "camera2": {
                "mode": 5,
                "camera_id": 1,
                "framerate": 30,
                "focal_length": [
                    700.0,
                    700.0
                ],
                "optical_center": [
                    0.0,
                    0.0
                ]
            }
        },
        "websight": {
            "WebsightServer": {
                "port": 3000,
                "ui_config": {
                    "windows":{
                        "Camera": {
                            "renderer": "2d",
                            "channels": [
                                { "name": "argus_stereo_camera/viewer1/ImageViewer1/image" },
                                { "name": "argus_stereo_camera/viewer2/ImageViewer2/image" }
                            ]
                        }
                    }
                }
            }
        }
    }

}

This code works. But as soon as I try to use the second camera the first problem shows up as ...Mutex already initialized.... It’s a problem wether I use one “argus” config or two to define both cameras. Seems like the “argus” can’t export two isaac::ArgusCsiCamera at the same time. I think it’s the same issue when two differently named “argus_x” nodes are created. Is this a limitation of libargus_camera_module.so dynamic library?

So it’s been a while since the last post, did anyone sort this out? How would I go about using the example here.

I know it would need to be compiled into a dynamic library, is there a recipe for this?
Does it possess all the exports necessary to be used with Isaac engine?

All the best!

@trinitytest I will suggest switching to Isaac-ROS , if there are no dependencies on Ubuntu 18.