ros-noetic采集单目USB相机数据
1、查看USB相机端口号
ls /dev/video* //插上摄像头后打开终端查看是否检测到摄像头
注:此时会出现两个设备号:/dev/video0和/dev/video1,一个是Video Capture,一个是Metadata Capture,但是只能使用/dev/video0调用,使用/dev/video1调取视频会报错。
2、下载usb_cam功能包
mkdir -p camera_ws/src
cd camera_ws/src/
git clone https://github.com/bosch-ros-pkg/usb_cam.git
cd ../
catkin_make
3、运行launch文件
cd ~/camera_ws
source devel/setup.bash
roslaunch usb_cam usb_cam-test.launch
注:在终端中使用source命令设置的环境变量只能在当前终端中生效,如果希望环境变量在所有终端中生效,则需要在终端的配置文件中加入环境变量的设置:echo “source /camera_ws/devel/setup.bash”>>/.bashrc
4、记录相机数据
rosbag record -a -O test.bag -x "(.*)/compressed(.*)"
- 注1:-a选项表示将当前发布的所有 topic 数据都录制保存到一个 bag 文件中。
- 注2:大写-O指定录制的bag包的全称,即test.bag;小写的-o指定录制的bag包的前缀,如test_2022-12-06-08-55-55.bag;不指定时,只以时间命名,如2022-12-05-13-04-56.bag。
- 注3:-x选项记录压缩主题
5、bag转换成jpg图像
5.1 创建export.launch
<launch>
<node pkg="rosbag" type="play" name="rosbag" args="-d 2 /home/tcgd/Bags/test.bag"/>
<node name="extract" pkg="image_view" type="extract_images" respawn="false" output="screen" cwd="ROS_HOME">
<remap from="image" to="/usb_cam/image_raw"/>
</node>
</launch>
- 注1:export.launch可在任意路径下创建,但终端需在相同路径下打开,roslaunch才能找到export.launch
- 注2:需要修改两个地方,一个是第一行node标签中的test.bag路径;另一个是第三行remap标签中的要订阅的主题的名字,"/usb_cam/image_raw"要与usb_cam-test.launch发布的主题的名字相同。若不相同则无法转换。
5.2 运行export.launch
roslaunch export.launch
运行完后即可在~/.ros文件夹中找到生成的jpg格式的图片,可将图片文件移动到指定文件夹
mv ~/.ros/frame*.jpg ~/Pictures/sequences/00
6、遇到的问题
6.1 Camera calibration
问题描述:[WARN]: Camera calibration file /home/tcgd/.ros/camera_info/head_camera.yaml not found.
解决方法:利用ros和棋盘格进行相机标定,参考:: 使用ros标定相机的内参和外参.
6.2 head_camera
问题描述:[WARN]: [head_camera] does not match name narrow_stereo in file /home/tcgd/.ros/camera_info/head_camera.yaml
解决方法:将所在文件中的 narrow_stereo 改成 head_camera.
6.3 focus_auto
问题描述:[WARN]: unknown control ‘focus_auto’
解决方法:暂未解决,不影响使用
7、参考链接
[1] ROS下使用单目/双目摄像头发布图像话题.
[2] 使用ros标定相机的内参和外参.
[3] rosbag数据记录及转换图片、视频.
[4] 提取rosbag包中的图像或视频.