It will not be possible to fully use four ov7251 cameras at the same time due to i2c address conflict. the downward camera can coexist with the stereo pair because
- one of the stereo cameras is actually on a different i2c bus
- ov7251 camera has two i2c addresses, so with some software configuration it works. However, having 3 ov7251 cameras on i2c bus cannot be done without a conflict.
In a condition of i2c conflict between cameras, what will happen is..
- system will be able to detect each camera at boot time because probing happens while other cameras are powered off
- you should be able to fully use the conflicting cameras one at a time (not concurrently)
- if you use the conflicting cameras concurrently, commands sent to one camera will go out to both cameras, for example exposure and gain control. nothing will physically break, but this is currently not a supported use case.
- there will also be a short glitch after you started the first conflicting camera and when you are starting the second conflicting camera, since the first one will also get re-initialized with the commands intended for the second camera
in your case, the ov7251 plugged into J2 was not detected because the camera configuration xml file is not configured to query this camera on J2 connector. If you wanted to enable it, you need to back up and edit the following file : /system/etc/camera/camera_config.xml and add an entry that looks like below (then reboot). The slave address
0xC0 is one of the two possible slave addresses for this camera. The other one is
0xE0 and is already used by the camera plugged into J4 (downward facing).
So are you using one of the stereo cameras + stereo flex + extension cable? if you are using the stereo flex with one camera, make sure to use the
left port on the flex because the
right port is connected to the secondary i2c bus, accessible only in stereo configuration. Also, multiple stereo pairs are not supported on VOXL and stereo can only be used in J3.
With the below config addition, you should be able to detect all 4 ov7251 cameras and successfully use the following configurations without confilicts:
- J2 + J4 (hires slot + tracking slot)
- J3 + J4 (stereo slot + tracking slot)
- if you want to use J2 + J3 (hires + tracking slot), change the I2C id to 0xE0, but then it's the same thing as current stereo + tracking.
Now, in this configuration you should also be able to run all 4 cameras together but depending on the i2c ID of the camera in slot 0, it will conflict either with left stereo or tracking camera. I would not mess with stereo, so you could set i2c id of slot 0 to the same as in slot 2 (hires and tracking). then there is is still an issue of exposure/gain controls between the two cameras fighting with each other (both cameras will receive both exposure/gain updates).
In order to prevent two cameras from fighting exposure/gain settings the only way to do it is to prevent one of the camera drivers from sending out exposure/gain updates at all. Then both cameras will have the same exposure/gain computed based on one camera's image. This would require a little bit of work on the camera driver side but it's possible (though not supported now).
Anyway, this is just a long explanation of what you could try and what you will see.
<!-- ov7251 tracking camera in camera slot 0 --> <CameraModuleConfig> <CameraId>0</CameraId> <SensorName>ov7251</SensorName> <SensorSlaveAddress>0xC0</SensorSlaveAddress> <ChromatixName>ov7251_chromatix</ChromatixName> <ModesSupported>1</ModesSupported> <Position>FRONT</Position> <MountAngle>360</MountAngle> <CSIInfo> <CSIDCore>0</CSIDCore> <LaneMask>0x1F</LaneMask> <LaneAssign>0x4320</LaneAssign> <ComboMode>0</ComboMode> </CSIInfo> <LensInfo> <FocalLength>4.73</FocalLength> <FNumber>2.2</FNumber> <TotalFocusDistance>1.9</TotalFocusDistance> <HorizontalViewAngle>64.1</HorizontalViewAngle> <VerticalViewAngle>51.6</VerticalViewAngle> <MinFocusDistance>0.1</MinFocusDistance> </LensInfo> </CameraModuleConfig>