Jetson/Cameras

Camera interfaces on Jetson TK1
The Jetson TK1 board provides several different interfaces that allow camera input:
 * USB 3.0 port (supports many USB 2.0 or USB 3.0 webcams). Additional USB 3.0 ports can be added through mini-PCIe, eg: mini-PCIe (untested).
 * USB 2.0 port (through a micro-B to female USB-A adapter, that is sometimes included with Jetson TK1).
 * Gigabit Ethernet port. Additional Gigabit or Dual-Gigabit Ethernet ports can be added through mini-PCIE, eg: mini-PCIe (untested).
 * CSI-2 MIPI dual camera ports (one 4-lane camera port and one 1-lane camera port) through the GPIO expansion port.
 * Firewire (available through mini-PCIe), eg: mini-PCIe (untested).
 * Analog video capture cards, available through mini-PCIe (eg: mini-PCIe (untested)), USB 3.0 (eg: USB 3.0 (untested)), or USB 2.0 (eg: USB 2.0 (untested)).

= Interface details =

USB 2.0
USB 2.0 (480 Mbps) is the most common & cheapest method for camera input, since USB 2.0 webcams range from $5 - $200. However, USB 2.0 is the slowest of the possible camera interfaces, so it usually only supports upto 720p 30fps (eg: Logitech C310 $45 (untested)), (except for the few USB 2.0 cameras supporting 1080p video compression, such as Logitech C910 (untested)). Logitech C910 is known to work on Jetson TK1 in uncompressed modes but has not been tested in 1080p compressed mode.

Typically, webcams are successfully giving the same frame-rates & resolutions on Jetson TK1 as on an x86 desktop running Linux (eg: 640x480 @ 30 FPS, 960x720 @ 15 FPS, and 1920x1080 @ 15 FPS). Note that many webcams will run slower if there is low lighting, so for example, it might be 30 FPS when pointed at a bright light but only 10 FPS when pointed at a shadow.

Disabling USB auto-suspend
Some USB devices & cameras have problems on Jetson TK1 due to automatic suspending of inactive USB ports in L4T 19.2 OS to save power. So you might need to disable USB auto-suspend mode. This will disable it temporarily until you reboot: sudo bash -c 'echo -1 > /sys/module/usbcore/parameters/autosuspend' To automatically disable USB auto-suspend on bootup, follow the instructions to Run a command automatically on bootup.

USB 2.0 webcams known to be working

 * Rocksoul WC-102 5MP
 * Gearhead WC4500AFW
 * Logitech C210
 * Logitech C920
 * Rocketfish HD Webcam Pro
 * Creative Live! Cam Chat VF0700
 * Generic "Full HD 1080p" webcams using the Realtek chipset
 * Microsoft LifeCam HD-3000
 * Microsoft LifeCam Studio
 * Sony PlayStation Eye (PS3 Eye) (can give very fast framerates, but some extra steps are required).

USB 2.0 webcams with known problems

 * Microsoft LifeCam HD-5000 does not work. Please use a different model such as LifeCam HD-3000 instead.

Note: If a webcam or video capture card is supported by UVC or Video4Linux (see examples) then it will probably work the same on Jetson TK1 as on a desktop, but there is a possibility that it requires the firmware to be copied to your "/lib/firmware" folder or potentially even compiling & flashing your own custom Linux kernel with appropriate drivers enabled.

USB 3.0
USB 3.0 (5 Gbps) has enough bandwidth to allow sending uncompressed 1080p video streams. But USB 3.0 hasn't reached the mass consumer market like USB 2.0 has, so USB 3.0 cameras are mostly still limited to expensive professional-grade cameras. eg: PointGrey Flea3 1080p @ 120 FPS (untested) or e-Con See3CAM_80 1080p @ 30 FPS (working!).

Enabling support for USB 3.0
Note that early versions of Linux4Tegra didn't come with USB 3.0 support enabled, and thus you might need to enable USB 3.0 support and re-flash your whole L4T system. According to the L4T R19.2 Release Notes, you should modify the odmdata settings in "jetson-tk1.conf" to enable USB 3.0: ODMDATA=0x6209C000; Then flash your L4T system and reboot.
 * 1) USB 2.0 operation on USB2 port(J1C2 connector)/for use as root device use ODMDATA=0x6009C000;
 * 2) USB 3.0 operation on USB2 port(J1C2 connector) use ODMDATA=0x6209C000, requires firmware load from userspace or initial ramdisk

USB 3.0 webcams known to be working

 * e-Con See3CAM_80 (~$90) has been tested as fully working on Jetson TK1 for Full-HD 1920x1080 @ 30 FPS (see video) by Korneliusz Jarzębski. It requires flashing a custom L4T Linux kernel that has the CONFIG_HIDRAW setting enabled. This camera board has good Linux support and contains an 8 Mega-Pixel MIPI camera with auto-focus ability and an onboard ISP including 10 GPIOs that can potentially be used for other purposes besides flash & camera activation.

Gigabit Ethernet
"IP Cameras" are fairly easy to find and tend to be a good option. Gigabit Ethernet cameras (1 Gbps) has enough bandwidth for uncompressed 1080p video streams. eg: GigE cameras (untested) or regular IP network cameras. Nico notes that older GigE cameras typically do not apply any compression, since compression is a feature of the newer GigE Vision 2 standard, and thus most industrial GigE cameras for computer vision don't have compression and send Bayer images instead. IP cameras typically have M-JPEG compression as well as a video streaming server such as by providing a URL where M-JPEG or JPEG frames are available.

Firewire
Firewire has been used for professional video capture for a long time, since Firewire cameras do a lot of both the compression and the data transmission in hardware and thus don't put nearly as much stress on the host CPU compared to USB.

CSI MIPI
CSI is the ideal method for camera input, since the cameras are tiny and the images can be processed directly by the ISP rather than needing to be stored into the computer's DRAM first before processing.

No CSI MIPI camera has currently been tested on Jetson TK1.

Licensing of ISP has been reported as the constraint as it is only generally viable for millions of units.

An untested example is 720p 60fps. However there isn't a single standard for CSI cameras, thus each customer typically designs their own connector that is specific to a camera module and a computer or ISP.

= Multiple Cameras = There are several ways to handle multiple cameras on Jetson TK1 at the same time:
 * Ethernet: multiple IP cameras on a network (eg: several TRENDnet Internet Cameras (untested) at $118 each). Theoretically you could have 3 x Gigabit Ethernet ports on Jetson TK1 to theoretically support 6 x 1080p 30fps cameras (discussed on the forum)!
 * USB: 2 cameras on USB 3.0 (eg: LI-USB30 for $400 (untested)).
 * Firewire: 2 or 3 cameras (eg: Bumblebee 2 or Bumblebee XB3 (untested)).
 * CSI MIPI: 2 cameras (eg: a front camera and a rear camera (untested)).

= Specialized camera sensors =
 * Stereo cameras (eg: Bumblebee 2 (untested)). See Multiple Cameras section above.
 * Time-Of-Flight 3D depth "RGBD" cameras (eg: Microsoft Kinect is known to work, see details below).
 * Night-vision or Thermal-imaging Infrared cameras, typically with interfaces similar to standard cameras.

Microsoft Kinect Structured-Light 3D Depth camera
Several users (eg: HellMood have been able to use a Kinect camera on Jetson TK1, after disabling the USB auto-suspend (mentioned above).

Then you need to follow the Kinect Manual Installation Guide rather than the many x86 based guides, since the Tegra CPU uses ARM architecture.

User HellMood also posted a video showing the new Kinect camera working on Jetson TK1: MoodShades Preview.

= Camera access = To see which video capture devices you have available: ls /dev/video* To see the supported video formats of your webcam: sudo apt-get install luvcview luvcview -d /dev/video0 -L You can also use luvcview to record video from your webcam to a video file. It will open a GUI window showing the camera preview. Then along the middle of the bottom row there are 4 rectangle buttons, click the bottom-left of the 4 buttons to start/stop video recording, and the bottom-right button to quit. To record video using the default settings of your webcam: luvcview -o out.avi To record video using a custom resolution (of those shown when running luvcview -L above): luvcview -o out.avi -s 640x480 Normally, guvcview can be used to adjust default camera settings, but it seems that the default guvcview is not working correctly on ARM due to a kernel change.