Is it possible to have argus to only send necessary commands over I2C to speed up starting?
Issue Overview
Users are experiencing delays in the startup speed of multiple cameras connected to the Nvidia Jetson Orin Nano via MIPI and I2C. The primary issue arises when invoking the function iCaptureSession->repeat(requestPtr);
, which appears to queue requests rather than executing them simultaneously. As a result, I2C commands are sent sequentially, leading to a cumulative delay of approximately 260 milliseconds for all commands to be processed.
The context of this problem occurs during camera initialization, where users aim to optimize performance by reducing the time taken to set camera parameters. The cameras are accessed using the nvargus
library in C++, with each camera operating on its own thread.
Key specifications include:
- Hardware: Nvidia Jetson Orin Nano with 5-6 cameras
- Software: Utilizing
nvargus
library for camera access - Symptoms: Significant delays in command execution due to sequential I2C communication
The impact on user experience is substantial, particularly for applications requiring real-time video processing or quick camera setup.
Possible Causes
-
Hardware Incompatibilities: The configuration of the cameras or their connection methods may not be optimized for simultaneous command execution.
-
Software Bugs or Conflicts: There may be underlying issues within the
nvargus
library that prevent efficient command handling. -
Configuration Errors: Incorrect settings in the camera initialization code could lead to unnecessary repeated commands being sent over I2C.
-
Driver Issues: The camera drivers may not support the desired functionality or may have bugs that affect command processing.
-
Environmental Factors: Power supply issues or thermal conditions might impact performance, although these are less likely given the nature of the problem.
-
User Errors or Misconfigurations: Improperly set parameters in the code could cause excessive I2C communication.
Troubleshooting Steps, Solutions & Fixes
-
Diagnosing the Problem
- Review the initialization code for any misconfigurations.
- Use logging to capture timing metrics for each command sent over I2C.
- Check if other users have reported similar issues with specific camera models.
-
Gathering System Information
- Execute the following commands in your terminal to gather relevant logs:
dmesg | grep tegracam
- Check for any error messages or warnings that might indicate driver issues.
- Execute the following commands in your terminal to gather relevant logs:
-
Isolating the Issue
- Test with a single camera connected to see if the delay persists.
- Experiment with different camera models or configurations to identify if the problem is hardware-specific.
-
Potential Fixes and Workarounds
- Attempt to disable automatic exposure (AE) algorithms by locking settings:
iAutoControlSettings->setAeLock(true); iAutoControlSettings->setAwbLock(true);
- Set fixed values for exposure and gain:
iAutoControlSettings->setIspDigitalGainRange(Argus::Range<float>(1, 1)); iSourceSettings->setExposureTimeRange(Argus::Range<uint64_t>(preSetExposure, preSetExposure)); iSourceSettings->setGainRange(Argus::Range<float>(preSetGain, preSetGain));
- Confirm that these settings are applied correctly and that no further adjustments are made by
nvargus
.
- Attempt to disable automatic exposure (AE) algorithms by locking settings:
-
Documentation and Updates
- Check for updates to the
nvargus
library and related drivers that may address performance issues. - Refer to Nvidia’s official documentation for any additional configuration options that could optimize command handling.
- Check for updates to the
-
Best Practices
- Always ensure that firmware and libraries are updated to their latest versions.
- Conduct thorough testing after making changes to configurations or firmware.
- Document any successful configurations for future reference.
Unresolved aspects include whether there is a definitive method to completely disable AE algorithms within nvargus
, as some users have reported mixed results. Further investigation into driver capabilities and potential updates from Nvidia may be necessary.