模板: IMX462 2MP Starlight Camera Use Guide For Nano
来自Waveshare Wiki
版本说明
IMX462 摄像头在英伟达平台使用要安装相关驱动,加载新的设备树文件。目前支持Jetson Nano, Jetson Xavier NX, Jetson TX2 NX, Jetson AGX Xavier.
注:AGX Xavier等接口封装不同的,需要自己另外购买或做转接板支持。
目前支持的Jetapck版本:
- Jetpack4.2.2,L4T版本r32.2.1
- Jetpack4.3,L4T版本r32.3.1
- Jetpack4.4,L4T版本r32.4.3
- Jetpack4.4.1,L4T版本r32.4.4
- Jetpack4.5,L4T版本r32.5
- Jetpack4.5.1,L4T版本r32.5.1
- Jetpack4.6,L4T版本r32.6.1
- Jetpack4.6.1,L4T版本r32.7.1
- Jetpack4.6.2,L4T版本r32.7.2
- Jetpack5.0.1DP,L4T版本r34.1.1
查看JetPack版本
如果你不确定你的软件版本是否在支持范围内,可以用以下指令查看。
cat /etc/nv_tegra_release
如果显示 R32 (release), REVISION: 4.3 代表当前的版本为R32.4.3
硬件连接
说明
请将摄像头排线,金手指接触面朝向核心板一侧,接入jetson开发板。
- Jetpack4.x版本
使用IMX462摄像头,需要更新Jetson系统的Image和dtb部分。Image部分,增加了摄像头驱动,dtb部分则指明了使用的摄像头型号。一般情况下,只需使用已编译好的Image和dtb,非必要情况下,无需根据代码进行编译。
- JetPack5.0以后的版本(针对Xavier NX和AGX Xavier以及更高性能的模组)
驱动不再编译进Image,而是以独立module的形式加载到系统中。dtb现在依然是采用整体编译到一起的方式以方便进行替换。dtb也可以以overlay形式动态加载。
BSP包
- 下载路径:
- bsp包内容:
- 预编译好的不同平台下的dtb
- driver源码
- dts源码
- i2c通信工具集
- DTB包文件和板卡的对应关系:
- Nano B01
- tegra210-p3448-0000-p3449-0000-b00.dtb
- Nano eMMC
- tegra210-p3448-0002-p3449-0000-b00.dtb
- AGX XAVIER
- tegra194-p2888-0001-p2822-0000.dtb
- XAVIER NX
- tegra194-p3668-all-p3509-0000.dtb
- (Jetpack5.0.1) tegra194-p3668-0000-p3509-0000.dtb
- AGX Orin
- tegra234-p3701-0000-p3737-0000.dtb
- Orin NX
- Jetson Orin NX 16G(P3767-0000):tegra234-p3767-0000-p3768-0000-a0.dtb
- Jetson Orin NX 8G (P3767-0001):tegra234-p3767-0001-p3768-0000-a0.dtb
- Orin Nano
- Jetson Orin Nano 8G(P3767-0003) and Jetson Orin Nano Devkit(P3767-0005):tegra234-p3767-0003-p3768-0000-a0.dtb
- Jetson Orin Nano 4G (P3767-0004):tegra234-p3767-0004-p3768-0000-a0.dtb
安装驱动
直接在jetson主板上升级。
wget https://github.com/veyeimaging/nvidia_jetson_veye_bsp/releases/latest/download/nvidia_jetson_veye_bsp.tar.gz tar -xzvf nvidia_jetson_veye_bsp.tar.gz
升级Image(适用JetPack4.x)
- 备份原来的Image
cp /boot/Image /boot/Image.backup cp /boot/Image.sig /boot/Image.sig.backup
- (Jetson Nano)在下载的bsp包中,找到对应的Image压缩包,进行解压,然后执行指令
sudo cp <path to your Image dir>/Image /boot/Image -f
- 注意这里要将<path to your Image dir>替换成你实际解压出来的Image文件的路径。
- (NX) 如果你使用的是Xavier NX,需要使用签名版本,也就是带signed字眼的包。
sudo cp <path to your Image dir>/Image /boot/Image -f sudo cp <path to your Image dir>/Image.sig /boot/Image.sig -f
安装module是(适用JetPack5.x)
- 查看linux版本
uname -r
- 在nvidia_jetson_veye_bsp/ko目录下找到对应的驱动版本目录, 运行指令
sudo cp nvidia_jetson_veye_bsp/ko/$(uname -r)/* /lib/modules/$(uname -r)/kernel/drivers/media/i2c/ -f sudo depmod
升级dtb
- 在bsp包目录下,找到对应摄像头(VEYE-MIPI-CAM2M)型号和L4T版本号的dtb文件。进行拷贝
sudo mkdir /boot/veyecam/ sudo cp <path to your dtb dir>/<DTB file name> /boot/veyecam -f
- 备份extlinux.conf文件
cp /boot/extlinux/extlinux.conf /boot/extlinux/extlinux.conf.back
- 编辑 /boot/extlinux/extlinux.conf文件,在最下面增加如下一行
FDT /boot/veyecam/<DTB file name>
注:<DTB file name>应当替换为主板对应的dtb名称,确保FDT一行所指明的文件确实正确存在。
- 重启系统:
sudo reboot
测试摄像头
检查摄像头是否正常连接
在系统升级成功后,可以在Jetson nano终端输入以下指令检测摄像头是否正常连接
dmesg | grep veye
有IMX462等提示即可。同时查看ls /dev/ 有videox设备节点
测试摄像头(Gstreamer)
- 视频预览1080P
export DISPLAY=:0 gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)NV12" ! nvoverlaysink sync=false
gst-launch-1.0 nvv4l2camerasrc device=/dev/video0 ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvoverlaysink sync=false
- 视频预览1080p (xvimagesink)
export DISPLAY=:0 gst-launch-1.0 -e v4l2src io-mode=4 device=/dev/video0 do-timestamp=true ! 'video/x-raw, width=1920, height=1080, framerate=30/1, format=UYVY' ! xvimagesink sync=false
- 同时预览两路摄像头
WIDTH=960 HEIGHT=540 CAPS="video/x-raw(memory:NVMM),format=(string)UYVY, width=1920, height=1080" gst-launch-1.0 nvcompositor name=comp sink_0::xpos=0 sink_0::ypos=0 sink_0::width=$WIDTH sink_0::height=$HEIGHT sink_1::xpos=$WIDTH sink_1::ypos=0 sink_1::width=$WIDTH sink_1::height=$HEIGHT ! nvoverlaysink nvv4l2camerasrc device=/dev/video0 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp. nvv4l2camerasrc device=/dev/video1 ! $CAPS ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420"! comp
- 用Opencv调用Gstreamer
gst-launch-1.0 nvv4l2camerasrc ! video/x-raw(memory:NVMM), format=(string)UYVY, width=(int)1920, height=(int)1080 ! nvvidconv ! video/x-raw(memory:NVMM), format=(string)I420 ! nvvidconv ! video/x-raw, format=(string)BGRx ! videoconvert ! video/x-raw, format=(string)BGR ! appsink
- 视频录制1080p
gst-launch-1.0 nvv4l2camerasrc num-buffers=300 ! "video/x-raw(memory:NVMM),format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)NV12" ! nvv4l2h264enc control-rate=1 bitrate=10000000 ! h264parse ! qtmux ! filesink location=filename.mp4 -e
- 播放录像
gst-launch-1.0 filesrc location=filename.mp4 ! qtdemux ! queue ! h264parse ! nvv4l2decoder ! nvoverlaysink -e
- 抓拍图片
gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvjpegenc ! filesink location=jpgname.jpg
- Jetpack5.x系统上测试摄像头
- 视频预览1080p
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)NV12" ! nv3dsink -e
- 视频录像1080p
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)NV12" ! nvv4l2h264enc control-rate=1 bitrate=10000000 ! h264parse ! qtmux ! filesink location=filename.mp4 -e
- 抓拍图像
gst-launch-1.0 v4l2src num-buffers=1 ! "video/x-raw,format=(string)UYVY, width=(int)1920, height=(int)1080" ! nvvidconv ! "video/x-raw(memory:NVMM),format=(string)I420" ! nvjpegenc ! filesink location=jpgname.jpg
测试摄像头(v4l2-ctl)
- 安装v4l2-utils
sudo apt-get install v4l-utils
- 查看摄像头支持的数据格式
v4l2-ctl --list-formats-ext
- 帧率统计
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=UYVY--stream-mmap --stream-count=-1 --stream-to=/dev/null
- 保存图片到文件
v4l2-ctl --set-fmt-video=width=1920,height=1080,pixelformat=UYVY --stream-mmap --stream-count=1 --stream-to=uyvy-1920x1080.yuv
测试摄像头(yavta)
- 安装yavta
git clone https://github.com/veyeimaging/yavta.git cd yavta sudo make
- 保存图片到文件
./yavta -c1 -FUYVY-1920x1080.yuv --skip 0 -f UYVY -s 1920x1080 /dev/video0
Opencv例程
- 这里提供了三个加单的Opencv例程,例程将摄像头数据从V4l2设备导入到opencv,可以作为参考