从ROS.bag提取图像时如何理解remap标签及处理话题类型不匹配问题
报错根因
image_view功能包的extract_images节点仅支持接收sensor_msgs/Image类型的图像话题,你在remap配置中指定的/prediction/predicted_trajectories_rviz是visualization_msgs/MarkerArray类型的RViz标记数组话题,两者消息类型不匹配,因此连接被强制中断。
实现方案
你需要的最终效果是和rosbag play运行时RViz显示效果一致的视频,即叠加了预测轨迹、自车状态、道路信息等可视化元素的合成画面,可按两种路径实现:
路径1:快速手动生成(适合单次需求)
直接启动你提供的bag播放launch文件,打开RViz确认显示效果符合预期后,用录屏工具(如Kazam、OBS)录制RViz窗口,bag播放完成后停止录制即可直接得到MP4格式视频。
路径2:自动化生成(适合批量处理需求)
如果需要无人工介入自动生成视频,按以下步骤操作:
- 若你仅需要bag中原生的未叠加标注的原始图像,先执行以下命令查询bag内的图像类话题:
rosbag info /opt/ros/melodic/share/image_view/myBag.bag
在输出结果中找到类型为sensor_msgs/Image的话题,将你现有提取launch文件中remap标签的to参数替换为该话题名称,即可正常提取原始图像帧。
2. 若你需要叠加RViz可视化元素的合成画面,先安装rviz_camera_publisher功能包,在你原有播放bag的launch文件中新增该节点配置,将RViz视口的内容实时发布为sensor_msgs/Image类型的话题。
3. 新增extract_images节点,将其remap到上述发布的图像话题,即可提取带标注的画面帧。
4. 所有图像帧提取完成后,用ffmpeg命令合并为MP4视频,示例命令如下(需根据你的文件名格式、实际帧率调整参数):
ffmpeg -r 10 -i ~/.ros/frame%04d.jpg -vcodec libx264 output.mp4
内容的提问来源于stack exchange,提问作者zhenDong

