Jetson nano 上使用ROS进行双目摄像头(CSI-IMX219)操作标定

Jetson nano 上使用ROS进行双目摄像头(CSI-IMX219)操作标定

Nvidia的Jetson nano上使用索尼的IMX219相机操作ROS

CSI-IMX219简介

imx219是索尼800万像素中,超越imx179的一款对角为4.6mm (1/4.0型) , 有效像素约808万的背照式cmos图像传感器。imx219面向移动终端 (智能手机, 平板电脑) , 可以拍摄帧率180帧/秒高速视频的cmos图像传感器。imx219满足了高性能拍照应用所需的 [高灵敏度] 、[高帧率拍摄] 等基本功能需求, 由于芯片的小型化, 使得它即使在时尚的窄边框设计的设备的前置摄像头上也能很方便应用。

拍摄功能在通常的全尺寸8mpix输出时30帧/秒的基础上, 通过2×2像素同时读取的加算功能还实现了4倍速拍摄。而且, 通过搭载lsc1功能来降低模块生产过程中产生的光学偏差, 进而有助于减少系统成本。另外, 通过与具备bme hdr2功能的后段isp的组合, 还可以扩展出高动态范围视频拍摄功能。

在Jetson nano上简单使用

首先介绍下V4L2,V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。在Linux中,视频设备是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video下,如果只有一个视频设备,通常为/dev/video0,当接入三个摄像头时候,使用ls /dev/video 并不能显示这个CSI线接入的设备,则可能会显示,例如v4l-subdev0这样的v4l设备,既然设备不是很好找,那么我们直接使用下面的命令先开启摄像头测试摄像头是否可用:

nvgstcapture

摄像头可用的话那么屏幕上则会开启一个摄像头的展示框。

使用ROS操作CSI-IMX219

这一步的前提是CSI-IMX219摄像头可以正常开启。
首先从github上克隆一个日本程序员写的第三方包组,使用这个包可以实现双目摄像头的标定等操作。

cd ~/catkin_ws/src
git clone https://github.com/rt-net/jetson_nano_csi_cam_ros.git 

接下来下载一些gscam的依赖,上述包组是依赖于gscam的,因此也要把gscam克隆下来

sudo apt-get install gstreamer1.0-tools libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev libgstreamer-plugins-good1.0-dev
cd ~/catkin_ws/src
git clone https://github.com/ros-drivers/gscam.git

接下来我们进入到克隆好的gscam目录中使用sed命令添加一行参数

cd ~/catkin_ws/src/gscam
sed -e "s/EXTRA_CMAKE_FLAGS = -DUSE_ROSBUILD:BOOL=1$/EXTRA_CMAKE_FLAGS = -DUSE_ROSBUILD:BOOL=1 -DGSTREAMER_VERSION_1_x=On/" -i Makefile

然后我们在src目录下直接编译

cd ~/catkin_ws
catkin_make
source devel/setup.bash

将作CAM0连接的相机流的数据/csi_cam_0/image_raw进行ROS主题发布,在终端中执行以下命令:

roslaunch jetson_nano_csi_cam jetson_csi_cam.launch sensor_id:=0 width:=<image width> height:=<image height> fps:=<desired framerate>

将与CAM0和CAM1连接的相机流的数据/csi_cam_0/image_raw和//csi_cam_1/image_raw同时进行ROS主题发布,在终端中执行以下命令:

roslaunch jetson_nano_csi_cam jetson_dual_csi_cam.launch width:=<image width> height:=<image height> fps:=<desired framerate>

要以ROS为主题开启摄像头不间断连续发送相机视频,在终端中执行以下命令:

roslaunch jetson_csi_cam jetson_csi_cam.launch

这个launch只是启动发送用的节点。为了确认发送的视频,会使用其他的手段。
为了简单确认影像是否被发送,可以在终端执行rostoopic list,从发送中的ROS话题一览找到/csi_cam_0/image_raw这个话题。

rostopic list

同样我们也可以使用rqt_image_view选择/csi_cam_0/image_raw实时的去看我们的视频是否不间断获取到:

rqt_image_view

可以添加视频的参数:

roslaunch jetson_csi_cam jetson_csi_cam.launch width:=1920 height:=1080 fps:=15

关于其他参数,在roslaunch时name>:=格式指定选项。


sensor(default: 0) --相机ID

width(default:640)--发送的影像的宽度

height(default:480)--发送的影像高度

fps(default:30)--发送的帧速率(根据分辨率的不同可能不满足这个帧速率)

cam_name (default: csi_cam_$(arg sensor_id)--与camerainfo对应的相机名称

frame_id (default: /$(arg cam_name)_link)--tf中使用的照相机的帧名

sync_sink (default: true)--appsink(如果将帧速率设置低并发生问题时将此选项设为假,问题可能会得到解决)

flip_method(default:0)--视频传送时图像的反转选项

计算刷新频率:

可以通过以下命令确认ROS主题的刷新频率

rostopic hz /csi_cam_0/image_raw

图像视频校准:

rosrun camera_calibration cameracalibrator.py --size 8x6 --square  image:=/csi_cam_0/image_raw camera:=/csi_cam_0

Github原文链接:https://github.com/rt-net/jetson_nano_csi_cam_ros
想获取一些其他ROS学习资料或者购买一套以学习ROS为目的机器人,可以查看巨匠机器人。

你可能感兴趣的:(Jetson,nano,ROS,机器人,图像识别,CSI-IMX219)