Difference between revisions of "VEYE CS Camera for Jetson TX2"
(Created page with "查看中文 <br />") |
|||
Line 1: | Line 1: | ||
[[VEYE CS Camera for Jetson TX2/zh|查看中文]] | [[VEYE CS Camera for Jetson TX2/zh|查看中文]] | ||
+ | '''<big>How to use VEYE and CS series camera module on NVIDIA Jetson TX2</big>''' | ||
+ | |||
+ | ===Overview=== | ||
+ | This guide shows how to use VEYE and CS series camera modules on Jetson TX2. Jetson TX2 JetPack SDK Version is r32.2.1. We provide two ways to do so: '''Prebuilt Binaries''' or '''Source Code. Yes, It's Open Source!''' | ||
+ | |||
+ | VEYE and CS series camera modules are STARVIS camera module with ISP functions build in. It output UYVY data using MIPI-CSI2. We provide '''V4L2 interface''' for video streaming apps , and '''Video Control Toolkits (which is Shell Script)''' to control the camera module directly, which is called DRA(Directly Register Access). | ||
+ | ===Hardware Setup=== | ||
+ | ====NVIDIA TX2 Developer Kit==== | ||
+ | We have designed a special adapter board for TX2 developwer kit, It support up to 6 cameras at the same time. | ||
+ | |||
+ | It is connected as shown in figure (TODO). | ||
+ | <br /> | ||
+ | ===Upgrade Jetson TX2 system=== | ||
+ | ====Setting Up the Host PC Environment==== | ||
+ | |||
+ | *Cross-compiling Toolchain | ||
+ | |||
+ | Please refer to this [https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%2520Linux%2520Driver%2520Package%2520Development%2520Guide%2Fxavier_toolchain.html%23wwpID0ESHA link] to install toolchain on your Host PC. | ||
+ | |||
+ | *L4T source code and Rootfs | ||
+ | |||
+ | You could use SDK Manager or [https://developer.nvidia.com/embedded/downloads directly download] to get source code. | ||
+ | |||
+ | *Setting Up the Environment | ||
+ | |||
+ | Assume SDK install directory is <TOPDIR>,source code is in $L4T_DIR/sources directory. | ||
+ | |||
+ | <code>export TOP_DIR=/home/xumm/nvidia/nvidia_sdk/JetPack_4.2.2_Linux_GA_P3310/</code> | ||
+ | |||
+ | <code>export L4T_DIR=$TOP_DIR/Linux_for_Tegra</code> | ||
+ | |||
+ | <code>export LOCALVERSION=-tegra</code> | ||
+ | |||
+ | <code>export LDK_ROOTFS_DIR=$TOP_DIR/Linux_for_Tegra/rootfs</code> | ||
+ | |||
+ | <code>export ARCH=arm64</code> | ||
+ | |||
+ | <code>export CROSS_COMPILE=aarch64-linux-gnu-</code> | ||
+ | |||
+ | <code>export CROSS32CC=arm-linux-gnueabihf-gcc</code> | ||
+ | |||
+ | <code>export TEGRA_KERNEL_OUT=$L4T_DIR/sources/kernel/out_kernel</code> | ||
+ | |||
+ | <code>export KERNEL_PATH=$L4T_DIR/sources/kernel/out_kernel</code> | ||
+ | |||
+ | <code>export NVIDIA_PATH=$L4T_DIR/sources/kernel/nvidia</code> | ||
+ | |||
+ | <code>export TX2_DTS_PATH=$L4T_DIR/sources/hardware/nvidia/platform/t18x</code> | ||
+ | |||
+ | <code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code> | ||
+ | |||
+ | *Build default image, flashing to TX2, prepare L4T environment | ||
+ | |||
+ | <code>cd $L4T_DIR</code> | ||
+ | |||
+ | <code>sudo ./apply_binaries.sh</code> | ||
+ | |||
+ | <code>sudo ./flash.sh jetson-tx2 mmcblk0p1</code> | ||
+ | ====Download out bsp package for Jetson TX2==== | ||
+ | <code>cd $L4T_DIR</code> | ||
+ | |||
+ | <code>git clone https://github.com/veyeimaging/nvidia_jetson_veye_bsp<nowiki/>.git</code> | ||
+ | |||
+ | <code>export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp</code> | ||
+ | =====bsp package includes:===== | ||
+ | |||
+ | *prebuild linux kernel:Image | ||
+ | *prebuild dtb for different boards | ||
+ | *driver source code | ||
+ | *dts source code | ||
+ | *i2c toolkits | ||
+ | |||
+ | ====Using prebuild Image and DTB==== | ||
+ | |||
+ | *Installing the Kernel | ||
+ | |||
+ | Whether you use a prebuild kernel or you build it yourself , you just need to copy it to /boot/ dir on the Jetson TX2 board: | ||
+ | |||
+ | <code>sudo cp <path to your Image dir>/Image /boot/Image -f</code> | ||
+ | |||
+ | *Flash dtb file | ||
+ | |||
+ | Enter the recovery mode,and on the Host PC: | ||
+ | |||
+ | <code>cp <path to your dtb dir>/dtbfilename $L4T_DIR/kernel/dtb/ -f</code> | ||
+ | |||
+ | <code>cd $L4T_DIR</code> | ||
+ | |||
+ | <code>sudo ./flash.sh -r -k kernel-dtb jetson-tx2 mmcblk0p1</code> | ||
+ | |||
+ | Reset TX2 after flashing. | ||
+ | ====Building from Source==== | ||
+ | =====Build kernel===== | ||
+ | |||
+ | *patch code | ||
+ | |||
+ | <code>cp $RELEASE_PACK_DIR/drivers_source/cs_imx307 veye327/* $NVIDIA_PATH/drivers/media/i2c/</code> | ||
+ | |||
+ | <code>cp $RELEASE_PACK_DIR/drivers_source/kernel_csimx307veye327_config $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/kernel_csimx307veye327_config</code> | ||
+ | |||
+ | *build | ||
+ | |||
+ | <code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code> | ||
+ | |||
+ | <code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT kernel_csimx307veye327_config</code> | ||
+ | |||
+ | <code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4</code> | ||
+ | |||
+ | Completed Image file is $TEGRA_KERNEL_OUT/arch/arm64/boot/Image,could be used for Flashing or Upgrading. | ||
+ | |||
+ | Install Image for Flashing: | ||
+ | |||
+ | <code>sudo cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $L4T_DIR/kernel/ -f</code> | ||
+ | =====Build DTS===== | ||
+ | |||
+ | *patch code | ||
+ | |||
+ | <code>cp $RELEASE_PACK_DIR/TX2/JetPack_4.2.2_Linux_GA_P3310/dts\ dtb/common/t18x/* -r $TX2_DTS_PATH/</code> | ||
+ | |||
+ | For CS-MIPI-IMX307 | ||
+ | |||
+ | <code>cp $RELEASE_PACK_DIR/TX2/JetPack_4.2.2_Linux_GA_P3310/dts\ dtb/CS-MIPI-IMX307/tegra186-quill-p3310-1000-a00-00-base.dts $TX2_DTS_PATH/quill/kernel-dts/</code> | ||
+ | |||
+ | For VEYE-MIPI-327 | ||
+ | |||
+ | <code>cp $RELEASE_PACK_DIR/TX2/JetPack_4.2.2_Linux_GA_P3310/dts\ dtb/VEYE-MIPI-327/tegra186-quill-p3310-1000-a00-00-base.dts $TX2_DTS_PATH/quill/kernel-dts/</code> | ||
+ | |||
+ | *build | ||
+ | |||
+ | <code>cd $L4T_DIR/sources/kernel/kernel-4.9/</code> | ||
+ | |||
+ | <code>make ARCH=arm64 O=$TEGRA_KERNEL_OUT dtbs</code> | ||
+ | |||
+ | Could be used for Flashing or Upgrading. | ||
+ | ===Applications and Test=== | ||
+ | ====Check system status==== | ||
+ | Run the following command to confirm whether the camera is probed. | ||
+ | |||
+ | *For VEYE-MIPI-327 | ||
+ | |||
+ | <code>dmesg | grep veye327</code> | ||
+ | |||
+ | The output message appears as shown below.: | ||
+ | |||
+ | <code>Detected VEYE327 sensor</code> | ||
+ | |||
+ | <code>subdev veye327 3X-003b bound</code> | ||
+ | |||
+ | 此外,检查/dev/videoX设备节点,应当是存在的。 | ||
+ | |||
+ | *For CS-MIPI-IMX307 | ||
+ | |||
+ | <code>dmesg | grep csimx307</code> | ||
+ | |||
+ | The output message appears as shown below.: | ||
+ | |||
+ | <code>Detected CS307 sensor</code> | ||
+ | |||
+ | <code>subdev csimx307 3X-003b bound</code> | ||
+ | |||
+ | * Run the following command to check the presence of video node. | ||
+ | |||
+ | <code>ls /dev/video*</code> | ||
+ | |||
+ | The output message appears as shown below. | ||
+ | |||
+ | <code>videoX</code> | ||
+ | |||
+ | ====Video Stream Toolkits Manual==== | ||
+ | Our camera appears as /dev/videoX device node,where X is between [0-5]. | ||
+ | |||
+ | in gstreamer command ,v4l2src has a param device=/dev/videoX to identify which camera to use. | ||
+ | =====Gstreamer Usage===== | ||
+ | |||
+ | *Preview FHD(HW accelerated) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code> | ||
+ | |||
+ | *Preview 720p@60 (CS-MIPI-IMX307,HW accelerated) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)60/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false</code> | ||
+ | |||
+ | *Record FHD in H.264 format to a video file(HW accelerated) | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src num-buffers=300 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! omxh264enc qp-range=20,20:20,20:-1,-1 ! matroskamux ! queue ! filesink location=videoname.mkv</code> | ||
+ | |||
+ | *Playback of saved video file (HW accelerated) | ||
+ | |||
+ | <code>gst-launch-1.0 filesrc location=videoname.mkv ! matroskademux ! h264parse ! omxh264dec ! nvoverlaysink</code> | ||
+ | |||
+ | *Capturing FHD still image | ||
+ | |||
+ | <code>gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! jpegenc ! filesink location=jpgname.jpg</code> | ||
+ | ====Video Control Toolkits Manual==== | ||
+ | |||
+ | *i2c bus description: | ||
+ | |||
+ | ADP-TX2-6CAM has 6 MIPI CSI-2 interface [A-F],the corresponding i2c address is[30-35]. | ||
+ | |||
+ | It is also the same as the 3X part of dmesg message: | ||
+ | |||
+ | <code>subdev veye327 3X-003b bound</code> | ||
+ | |||
+ | <code>subdev csimx307 3X-003b bound</code> | ||
+ | |||
+ | using -b option to identify which bus you want to use. | ||
+ | |||
+ | *VEYE-MIPI-327 | ||
+ | |||
+ | Video Control Toolkits Manual :[[VEYE-MIPI-290/327 i2c/|VEYE-MIPI-327 I2C]] | ||
+ | |||
+ | *CS-MIPI-IMX307 | ||
+ | |||
+ | Video Control Toolkits Manual :[[CS-MIPI-X i2c|CS-MIPI-IMX307 I2C]] | ||
+ | ===Realtimes RTSO-9001 === | ||
+ | ====Hardware Setup==== | ||
+ | [[File:CS-MIPI-307 to ruitai 9001tx2.jpg|center|thumb|800x800px|CS-MIPI-IMX307 and RTSO-9001(TX2)|link=http://wiki.veye.cc/index.php/File:CS-MIPI-307_to_ruitai_9001tx2.jpg]] | ||
+ | |||
+ | |||
+ | Matching with Realtimes RTSO-9001, you need to use RTST-RPI adapter board. | ||
+ | |||
+ | Note: the power supply capacity of the MIPI CSI-2 interface of the current version of RTSO-9001 is not enough to support the power requirements of our camera, which requires an additional 5V power supply to the camera. It is not shown in the picture above. | ||
+ | ====Software bsp==== | ||
+ | |||
+ | *The corresponding directory for Realtimes RTSO-9001, is: | ||
+ | |||
+ | nvidia_jetson_veye_bsp\TX2\JetPack_4.2.2_Linux_RTSO-9001 | ||
+ | |||
+ | *Subject to the agreement with Ruitai, we do not release the source code | ||
+ | *Our code have been submitted to Realtimes, and customers are advised to contact Realtimes for a complete version of the supported image. | ||
+ | |||
+ | ===References=== | ||
+ | Jetson start up: https://developer.nvidia.com/embedded/learn/getting-started-jetson | ||
+ | |||
+ | TX2 development kit: https://developer.nvidia.com/embedded/jetson-tx2-developer-kit | ||
+ | |||
+ | SDK Manager: https://docs.nvidia.com/sdk-manager/index.html | ||
+ | |||
+ | TX2 user guide: [https://developer.download.nvidia.cn/embedded/L4T/r28_Release_v2.0/GA/Docs/Jetson_TX1_and_TX2_Developer_Kits_User_Guide.pdf?lumI95GW6BEyMmhP1Is8E79OYo105-tpsC2bOVQmBZ6Tw8AkLU4pSDMPCuzOaEonWMiDO2hliXbNvtkH9do81TNIXmLZGGoV7xoEehyEgfc2WO8e0Czz5chLSHoCqIuPLL1 link] | ||
+ | |||
+ | Realtimes website:http://www.realtimes.cn/ | ||
<br /> | <br /> |
Revision as of 15:38, 8 March 2020
How to use VEYE and CS series camera module on NVIDIA Jetson TX2
1 Overview
This guide shows how to use VEYE and CS series camera modules on Jetson TX2. Jetson TX2 JetPack SDK Version is r32.2.1. We provide two ways to do so: Prebuilt Binaries or Source Code. Yes, It's Open Source!
VEYE and CS series camera modules are STARVIS camera module with ISP functions build in. It output UYVY data using MIPI-CSI2. We provide V4L2 interface for video streaming apps , and Video Control Toolkits (which is Shell Script) to control the camera module directly, which is called DRA(Directly Register Access).
2 Hardware Setup
2.1 NVIDIA TX2 Developer Kit
We have designed a special adapter board for TX2 developwer kit, It support up to 6 cameras at the same time.
It is connected as shown in figure (TODO).
3 Upgrade Jetson TX2 system
3.1 Setting Up the Host PC Environment
- Cross-compiling Toolchain
Please refer to this link to install toolchain on your Host PC.
- L4T source code and Rootfs
You could use SDK Manager or directly download to get source code.
- Setting Up the Environment
Assume SDK install directory is <TOPDIR>,source code is in $L4T_DIR/sources directory.
export TOP_DIR=/home/xumm/nvidia/nvidia_sdk/JetPack_4.2.2_Linux_GA_P3310/
export L4T_DIR=$TOP_DIR/Linux_for_Tegra
export LOCALVERSION=-tegra
export LDK_ROOTFS_DIR=$TOP_DIR/Linux_for_Tegra/rootfs
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export CROSS32CC=arm-linux-gnueabihf-gcc
export TEGRA_KERNEL_OUT=$L4T_DIR/sources/kernel/out_kernel
export KERNEL_PATH=$L4T_DIR/sources/kernel/out_kernel
export NVIDIA_PATH=$L4T_DIR/sources/kernel/nvidia
export TX2_DTS_PATH=$L4T_DIR/sources/hardware/nvidia/platform/t18x
cd $L4T_DIR/sources/kernel/kernel-4.9/
- Build default image, flashing to TX2, prepare L4T environment
cd $L4T_DIR
sudo ./apply_binaries.sh
sudo ./flash.sh jetson-tx2 mmcblk0p1
3.2 Download out bsp package for Jetson TX2
cd $L4T_DIR
git clone https://github.com/veyeimaging/nvidia_jetson_veye_bsp.git
export RELEASE_PACK_DIR=$L4T_DIR/nvidia_jetson_veye_bsp
3.2.1 bsp package includes:
- prebuild linux kernel:Image
- prebuild dtb for different boards
- driver source code
- dts source code
- i2c toolkits
3.3 Using prebuild Image and DTB
- Installing the Kernel
Whether you use a prebuild kernel or you build it yourself , you just need to copy it to /boot/ dir on the Jetson TX2 board:
sudo cp <path to your Image dir>/Image /boot/Image -f
- Flash dtb file
Enter the recovery mode,and on the Host PC:
cp <path to your dtb dir>/dtbfilename $L4T_DIR/kernel/dtb/ -f
cd $L4T_DIR
sudo ./flash.sh -r -k kernel-dtb jetson-tx2 mmcblk0p1
Reset TX2 after flashing.
3.4 Building from Source
3.4.1 Build kernel
- patch code
cp $RELEASE_PACK_DIR/drivers_source/cs_imx307 veye327/* $NVIDIA_PATH/drivers/media/i2c/
cp $RELEASE_PACK_DIR/drivers_source/kernel_csimx307veye327_config $L4T_DIR/sources/kernel/kernel-4.9/arch/arm64/configs/kernel_csimx307veye327_config
- build
cd $L4T_DIR/sources/kernel/kernel-4.9/
make ARCH=arm64 O=$TEGRA_KERNEL_OUT kernel_csimx307veye327_config
make ARCH=arm64 O=$TEGRA_KERNEL_OUT Image -j4
Completed Image file is $TEGRA_KERNEL_OUT/arch/arm64/boot/Image,could be used for Flashing or Upgrading.
Install Image for Flashing:
sudo cp $TEGRA_KERNEL_OUT/arch/arm64/boot/Image $L4T_DIR/kernel/ -f
3.4.2 Build DTS
- patch code
cp $RELEASE_PACK_DIR/TX2/JetPack_4.2.2_Linux_GA_P3310/dts\ dtb/common/t18x/* -r $TX2_DTS_PATH/
For CS-MIPI-IMX307
cp $RELEASE_PACK_DIR/TX2/JetPack_4.2.2_Linux_GA_P3310/dts\ dtb/CS-MIPI-IMX307/tegra186-quill-p3310-1000-a00-00-base.dts $TX2_DTS_PATH/quill/kernel-dts/
For VEYE-MIPI-327
cp $RELEASE_PACK_DIR/TX2/JetPack_4.2.2_Linux_GA_P3310/dts\ dtb/VEYE-MIPI-327/tegra186-quill-p3310-1000-a00-00-base.dts $TX2_DTS_PATH/quill/kernel-dts/
- build
cd $L4T_DIR/sources/kernel/kernel-4.9/
make ARCH=arm64 O=$TEGRA_KERNEL_OUT dtbs
Could be used for Flashing or Upgrading.
4 Applications and Test
4.1 Check system status
Run the following command to confirm whether the camera is probed.
- For VEYE-MIPI-327
dmesg | grep veye327
The output message appears as shown below.:
Detected VEYE327 sensor
subdev veye327 3X-003b bound
此外,检查/dev/videoX设备节点,应当是存在的。
- For CS-MIPI-IMX307
dmesg | grep csimx307
The output message appears as shown below.:
Detected CS307 sensor
subdev csimx307 3X-003b bound
- Run the following command to check the presence of video node.
ls /dev/video*
The output message appears as shown below.
videoX
4.2 Video Stream Toolkits Manual
Our camera appears as /dev/videoX device node,where X is between [0-5].
in gstreamer command ,v4l2src has a param device=/dev/videoX to identify which camera to use.
4.2.1 Gstreamer Usage
- Preview FHD(HW accelerated)
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false
- Preview 720p@60 (CS-MIPI-IMX307,HW accelerated)
gst-launch-1.0 v4l2src ! "video/x-raw,format=(string)UYVY, width=(int)1280, height=(int)720, framerate=(fraction)60/1" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false
- Record FHD in H.264 format to a video file(HW accelerated)
gst-launch-1.0 v4l2src num-buffers=300 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! omxh264enc qp-range=20,20:20,20:-1,-1 ! matroskamux ! queue ! filesink location=videoname.mkv
- Playback of saved video file (HW accelerated)
gst-launch-1.0 filesrc location=videoname.mkv ! matroskademux ! h264parse ! omxh264dec ! nvoverlaysink
- Capturing FHD still image
gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! jpegenc ! filesink location=jpgname.jpg
4.3 Video Control Toolkits Manual
- i2c bus description:
ADP-TX2-6CAM has 6 MIPI CSI-2 interface [A-F],the corresponding i2c address is[30-35].
It is also the same as the 3X part of dmesg message:
subdev veye327 3X-003b bound
subdev csimx307 3X-003b bound
using -b option to identify which bus you want to use.
- VEYE-MIPI-327
Video Control Toolkits Manual :VEYE-MIPI-327 I2C
- CS-MIPI-IMX307
Video Control Toolkits Manual :CS-MIPI-IMX307 I2C
5 Realtimes RTSO-9001
5.1 Hardware Setup
Matching with Realtimes RTSO-9001, you need to use RTST-RPI adapter board.
Note: the power supply capacity of the MIPI CSI-2 interface of the current version of RTSO-9001 is not enough to support the power requirements of our camera, which requires an additional 5V power supply to the camera. It is not shown in the picture above.
5.2 Software bsp
- The corresponding directory for Realtimes RTSO-9001, is:
nvidia_jetson_veye_bsp\TX2\JetPack_4.2.2_Linux_RTSO-9001
- Subject to the agreement with Ruitai, we do not release the source code
- Our code have been submitted to Realtimes, and customers are advised to contact Realtimes for a complete version of the supported image.
6 References
Jetson start up: https://developer.nvidia.com/embedded/learn/getting-started-jetson
TX2 development kit: https://developer.nvidia.com/embedded/jetson-tx2-developer-kit
SDK Manager: https://docs.nvidia.com/sdk-manager/index.html
TX2 user guide: link
Realtimes website:http://www.realtimes.cn/