gpt4 book ai didi

c++ - 如何让 ROS GSCam 在 Docker 容器中工作?

转载 作者:行者123 更新时间:2023-12-04 12:55:17 27 4
gpt4 key购买 nike

我正在尝试使用 ROS GSCam打包在 Docker 容器中以从相机流中读取并发布到 ROS 主题。通过 gst-launch 使用 GStreamer在容器中工作正常。例如,运行

gst-launch-1.0 -v tcpclientsrc host=10.0.0.20 port=7001 ! decodebin ! filesink location= xyz.flv
在容器中成功将相机流保存到 xyz.flv文件。当我尝试使用以下命令使用 GSCam 时
roscd gscam
mkdir bin
cd bin
export GSCAM_CONFIG="tcpclientsrc host=10.0.0.20 port=7001 ! decodebin ! ffmpegcolorspace"
rosrun gscam gscam
如果这些命令在容器外运行,相机流将发布到 ROS 主题,但在容器内运行时,它们会产生以下输出:
[ INFO] [1625351876.482947987]: Using GStreamer config from env: "tcpclientsrc host=10.0.0.20 port=7001 ! decodebin ! ffmpegcolorspace"
[ INFO] [1625351876.486672898]: using default calibration URL
[ INFO] [1625351876.486702714]: camera calibration URL: file:///root/.ros/camera_info/camera.yaml
[ INFO] [1625351876.486735225]: Unable to open camera calibration file [/root/.ros/camera_info/camera.yaml]
[ WARN] [1625351876.486750795]: Camera calibration file /root/.ros/camera_info/camera.yaml not found.
[ INFO] [1625351876.486759250]: Loaded camera calibration from
[ INFO] [1625351876.502708790]: Time offset: 1625351189.738
[FATAL] [1625351876.519311654]: Failed to PAUSE stream, check your GStreamer configuration.
[FATAL] [1625351876.519330710]: Failed to initialize GSCam stream!
我能做些什么来解决这个问题?
编辑。 问题似乎来自这段代码:
gst_element_set_state(pipeline_, GST_STATE_PAUSED);

if (gst_element_get_state(pipeline_, NULL, NULL, -1) == GST_STATE_CHANGE_FAILURE) {
ROS_FATAL("Failed to PAUSE stream, check your gstreamer configuration.");
return false;
}
使用来自 here 的代码,可以看到 gst_element_set_state()的返回值是 SUCCESS , 和 gst_element_get_state() 的返回值一样对于管道的每个元素(tcpclientsrc0、decodebin0 和 appsink0)。然而奇怪的是, gst_element_get_state(pipeline_, NULL, NULL, -1) 的输出是 FAILURE ,这似乎没有意义。我错过了什么?尽管所有元素都成功更改了状态,但管道状态更改是否会失败?或者管道是否有一些其他(可能是隐藏的)元素无法改变状态?

最佳答案

从给出的答案 here我意识到我的问题源于以下事实:常见的 ROS GSCam 包(通过 ppa 下载)使用 GStreamer0.10,但是因为我是从 Docker 镜像中的源代码构建包,所以它使用了 GStreamer1.0。将构建依赖项更改为

<build_depend>libgstreamer0.10-dev</build_depend>
<build_depend>libgstreamer-plugins-base0.10-dev</build_depend>
package.xml文件解决了这个问题。

关于c++ - 如何让 ROS GSCam 在 Docker 容器中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68240538/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com