我正在尝试配置 RaspberryPi2 以将视频数据从摄像头模块记录到 rosbag。为了让相机与 ROS 一起工作,我使用了在这里找到的代码: https://github.com/fpasteau/raspicam_node 。
这工作正常,但我在将数据捕获到 rosbag 时遇到问题。在原始模式下以高帧率捕捉时,它会平滑捕捉几秒钟,然后卡住几秒钟,然后平滑捕捉几秒钟,然后卡住,...
例如,我尝试使用 640x480@30FPS 捕获文件,这就是 rosbag info
产生的结果:
duration: 2:51s (171s)
size: 2.9 GB
messages: 5049
compression: none [2504/2504 chunks]
types: rosgraph_msgs/Log [acffd30cd6b6de30f120938c17c593fb]
sensor_msgs/CameraInfo [c9a58c1b0b154e0e6da7578cb991d214]
sensor_msgs/Image [060021388200f6f0f447d0fcd9c64743]
topics: /camera/camera_info 2505 msgs : sensor_msgs/CameraInfo
/camera/image 2504 msgs : sensor_msgs/Image
/rosout 22 msgs : rosgraph_msgs/Log (2 connections)
/rosout_agg 18 msgs : rosgraph_msgs/Log
因此,如果我们有 171 秒的视频,在 90FPS 时,应该给出 15390 条消息,我们只有 2504,大约是 14FPS。文件本身的大小为 2.9GB。这意味着它的平均写入速度约为 17.5MB/s。最终我找到了一个命令来测试 SD 卡的写入速度(
dd if=/dev/zero of=~/test.tmp bs=500K count=1024
),它说我的写入速度平均约为 19MB/s。所以我的问题是:
最佳答案
看起来 raspicam_node
发布的图像采用 bgra8
编码( raspicam_raw_node.cpp#L266 ),所以我们需要存储 4*640*480*30 Bytes/second = 36.86 MB/s。
然而,~18 MB/s 似乎几乎是 Raspberry 2 ( microSD card performance comparison ) 的限制。
不是尝试保存所有原始数据,而是让 rosbag 存储 sensor_msgs/CompressedImage
主题中的 /camera/image/compressed
。您可以调整 <base_topic>/compressed/jpeg_quality
参数(请参阅 compressed_image_transport
的 dynamic reconfigure parameters ),但默认值为 80,您应该获得大约 30:1 的压缩比,即 1.23 MB/s。
Raspberry 应该能够轻松处理这个问题。鉴于微型 Raspberry 相机的图像质量,您甚至可能感觉不到任何质量差异。
关于raspberry-pi - 将树莓派摄像头录制到 rosbag,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33304521/