本文用于ubuntu20.04系统、ros noetic版本,从rosbag中直接提取mp4文件,网上也有方法是将rosbag提取为jpeg文件的,这种方法不能设置提取的帧率,导致有很多张重复的图片,我的机器人移动平台收集的视频数据量巨大而且存在抖动,所以我通过直接提取视频数据,然后取我需要的视频片段进行图片提取。以下是我的运行方法。
测试环境
系统:ubuntu20.04
版本: ros-noetic
参考来源:
rosbag/Tutorials/Exporting image and video data - ROS Wiki
GitHub - jsk-ros-pkg/jsk_common: common programs for jsk-ros-pkg
一开始直接在原有的空间中安装jsk-common,使用命令sudo apt-get install ros-noetic-jsk-common,以为这样就装上了jsk-common,等于装上了里面的jsk-rosbag-tools,但是发现并没有效果,然后我尝试源码安装,下载了github上的源码到原来的工作空间,但因为我自己的空间中已经安装了很多包,不方便我检查错误的来源,所以我从新在home目录下新建了一个jsk_common_ws的目录,重新安装,最后catkin build安装成功了。
安装
参照以下步骤安装,其中的catkin_ws全部替换为jsk_common_ws
注意:catkin build指令需要catkin tool 确保自己安装了catkin tool。
安装中有出现报错,我把解决方法写在最后。
运行并生成视频
运行代码:
rosrun jsk_rosbag_tools bag_to_video.py /home/zyt/2023-11-06-10-36-48.bag --samplerate 16000 --channels 1 --audio-topic /audio --image-topic /camera/color/image_raw -o /tmp/2023-11-06-10-36-48.mp4
注意:
/home/zyt/2023-11-06-10-36-48.bag :bag的绝对路径
/camera/color/image_raw:需要转换为ideo的rosbag中的话题
/tmp/2023-11-06-10-36-48.mp4:转换成mp4的路径
成功生成mp4文件
在计算机中的tmp文件夹中可以找到下载的位置
运行报错
报错1:
这个错误表明在构建jsk_rosbag_tools时发生了问题,具体原因是由于pip-compile在生成虚拟环境时计算的哈希值与预期的哈希值不匹配。
根据错误日志中的信息,这是由于jsk_rosbag_tools中的某个Python依赖项的哈希值不匹配导致的。这可能是因为依赖项的版本已更改,但哈希值没有更新,也可能是由于网络问题导致下载的文件与预期不一致。
尝试手动更新
jsk_rosbag_tools中的Python依赖项。在jsk_common_ws/src/jsk_common/jsk_rosbag_tools/requirements.in文件中找到并更新哈希值不匹配的依赖项。查看requirements.in文件,找到对应依赖项的版本,并手动更新哈希值。
jsk_common_ws/src/jsk_common/jsk_rosbag_tools/requirements.in文件中显示如下,moviepy==1.0.3scipy=1.21.0,查看电脑的版本并安装正确的版本
pip show moviepy pip show scipy pip show numpy
根据输出结果,可以看到:
- moviepy没有安装。使用以下命令安装特定版本的 moviepy
pip install moviepy==1.0.3
- scipy
已经安装,版本是1.3.3。在 requirements.in 文件中,要求 scipy 的版本应该小于1.9.0。
- numpy
已经安装,版本是1.17.4。在requirements.in 文件中,要求 numpy 的版本应该大于等于1.21.0。可以尝试升级 numpy 到符合要求的版本:
pip install --upgrade numpy>=1.21.0
在更新这些包之后,重新运行 catkin build 命令,检查是否解决了构建问题。如果问题仍然存在,确保没有其他依赖项版本引起的冲突,然后尝试调整其他依赖项的版本。
清理缓存:
rm -rf /home/zyt/jsk_common_ws/build/jsk_rosbag_tools/venv
然后重新运行构建命令:
catkin build
报错2:
这两个错误是由于环境中缺少了一些依赖项或存在版本不匹配的问题引起的。
- 解决
launchpadlib 缺少 testresources 问题:
launchpadlib 1.10.13版本需要testresources,通过运行以下命令安装它:
pip install testresources
jupyter-client 版本不匹配的问题:
jupyter-client 8.6.0版本要求 python-dateutil >= 2.8.2,而环境中的版本是2.8.1,尝试升级 python-dateutil 到符合要求的版本:
pip install --upgrade python-dateutil>=2.8.2
然后再次运行 catkin build。
报错3:
这个错误是由于 jupyter-client 版本和 python-dateutil 版本不匹配引起的。
- 升级
使用以下命令升级 python-dateutil 到符合 jupyter-client 要求的版本:
pip install --upgrade python-dateutil>=2.8.2
然后重新清理缓存,最后catkin build