Changing default cameras
We are trying to change the default cameras on the VOXL flight deck to be all the pinhole type used for the stereo but we have run into a weird issue. We have successfully been able to change the downward camera to a pinhole but when we try to change the hires to a pinhole it doesn't work.
The error I'm seeing is that the hires camera port is not being recognized when the pinhole camera is installed. I have determined this to be the case since the other camera ports id numbers have been shifted by 1. We have it configured as follows: hires = 0, downward = 1, and stereo = 2. Though we are seeing the downward feed on id 0 and the stereo feed on id 1 and nothing on id 2, when we have the pinhole connected to the hires port.
Does anyone have any idea how to remedy this issue?
This would be sensor specific. Which type of sensor are you connecting to which connectors?
We are using one of the cameras for the stereo pair kit, https://www.modalai.com/products/stereo-camera-pair-and-flex-cable-kit-mkit-00009, with the adapter extension cable.
Is this sensor not able to be connected to the hires port?
The supported camera configurations are here
I think you are trying to connect an OV7251 (M0015) module to J2 using an interposer. This will likely work with configuration 3.
It is most likely you have connected something backwards in J2.
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
0xC0is one of the two possible slave addresses for this camera. The other one is
0xE0and 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
leftport on the flex because the
rightport 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>