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:= height:= fps:=
将与CAM0和CAM1连接的相机流的数据/csi_cam_0/image_raw和//csi_cam_1/image_raw同时进行ROS主题发布,在终端中执行以下命令:
roslaunch jetson_nano_csi_cam jetson_dual_csi_cam.launch width:= height:= fps:=
要以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) --相机IDwidth(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 --squareimage:=/csi_cam_0/image_raw camera:=/csi_cam_0
【Jetson|Jetson nano 上使用ROS进行双目摄像头(CSI-IMX219)操作标定】Github原文链接:https://github.com/rt-net/jetson_nano_csi_cam_ros
想获取一些其他ROS学习资料或者购买一套以学习ROS为目的机器人,可以查看巨匠机器人。
推荐阅读
- Linux|ROS通信——C++实现
- ROS学习总结——节点之间的通信方式及其实现(C++)
- ECS 175 图形设计
- 机器视觉|k210识别物体的基本流程(kpu库函数)
- Note|ROS--基于机器人操作系统设计与实现
- 机器人工程专业|机器人编程实践-ROS2基础与应用-第⑦版
- python|用Python写个自动批改作业系统!
- python|用Python写个自动批改作业系统