Why does the T265 not show up in the rs::context? If a D435i and a T265 are present, I would have expected the device count to be 2. Instead it is just 1 - just the D435i. This can get messy with the Python scripts that work fine if the D435i is not connected but fail with a format error if the D435i is connected. What is the proper way for a Windows 10 app figure out which device to use?
When you have both a T265 and a depth camera such as D435i connected then the devices should be distinguished between using their serial numbers. My understanding is that the serial number is not needed if only one of the devices is attached.
I hope the script in the link below will be helpful.
MartyG - thanks for the response. I have provided the SN in the code you sent and got the following errors indicating that the FW had crashed. Unlike the D435i, the FW updates for the T265 are supposed to be automated. Is there some way to manually update the firmware. rs-enumerate shows that the firmware on the T265 is 0.2.0.879. I am running the 2.31 version of librealsense on Windows 10.
I am able to get pose info out of the rs-pose app. I am able to successfully run the T265-stereo.py script and get depth (and I am definitely on a USB 3 attached to the motherboard.) Several of the other T265 python scripts fail (unsupported format) because there is a D435i attached to the system and it is selected before the T265.
The T265 uses the rs::config but none of the T265 apps use the rs::context. If rs::context were available, I wouldn't have to provide a serial number!
Device with serial number 845412110621 got
21:32:49:449  [E] Device-C5A0: FW crashed - got error in interrupt endpoint thread function: status = -1 (LIBUSB_ERROR_IO), actual = 0
21:32:49:449  [E] Device-C5A0: FW crashed - got error in stream endpoint thread function: status = -1 (LIBUSB_ERROR_IO), actual = 0
fisheye 1, 848x800
21:32:49:936  [E] Device-C5A0: ERROR LIBUSB_ERROR_IO while control transfer of messageID: 0x11 (CONTROL_GET_INTERFACE_VERSION)
21:32:49:936  [E] Device-C5A0: Error Transferring CONTROL_GET_INTERFACE_VERSION
21:32:49:936  [E] Device-C5A0: ERROR: Bulk transfer message 0x13 (DEV_STOP) request to device got LIBUSB_ERROR_IO. Bytes requested 6, bytes transferred 0
21:32:50:137  [E] Device-C5A0: Entered state [ERROR_STATE]
A number of users have experienced the problem with T265 and D435 not working together if D435 launches first. A common workaround has been a timer to delay the D435's launch. This is often done in a ROS launch file. The RealSense ROS wrapper also offers the ability to launch devices by USB port ID instead of serial number.
I would first recommend trying the new SDK 2.32.1, which massively overhauled how T265 is handled and installs a new T265 firmware 0.2.0.926.
I am not aware of a means to update the T265 firmware manually.
MartyG - that made a big difference. I used a USB enumeration (https://stackoverflow.com/questions/3331043/get-list-of-connected-usb-devices) to verify that a D435i or T265 or both were present. If the D435i is present, just enable the streams and go. If the D435i is not present but the T265 is, then enabling the D435i streams will fail. If the D435i is present and the T265 is not, an attempt to enable the streams for the T265 will fail. If they are both present, enabling the streams and starting the pipe will work fine for both.
In the past, I have used QueryDevices to determine which camera was present. It helped to determine if the IMU is present but with the USB-enumeration, it is no longer necessary.
Thanks for your help.
Please sign in to leave a comment.