ROS2通过websocket从USB摄像头流视频图像

问题描述 投票:0回答:1

ROS2 新手,尝试将图像从 USB 摄像头流式传输到本地主机中的简单网站。 相机可以工作,我可以将其添加到 rviz2 并以灰度形式查看视频。

我的做法是:

1-为此相机创建一个主题。我使用命令

ros2 launch realsense2_camera rs_launch.py
视频的主题是
/camera/fisheye1/image_raw
。当我检查这个主题的类型时,我得到 sensor_msgs/msg/Image

2-我已经构建了一个可以运行的 rosbridge_websocket,我可以将消息发送到我的简单 html 网站。

3-我想检索该主题的数据并将其转换为我可以流式传输的图像。为此,我编写了下一个代码来捕获 java 中的消息:

  var imageTopic = new ROSLIB.Topic({
    ros: ros, // Your ROS connection
    name: '/camera/fisheye1/image_raw', // The ROS topic you want to subscribe to
    messageType: 'sensor_msgs/msg/Image' // The message type for the topic 
  });

 // and the subscriber
 imageTopic.subscribe(function(message) {
   //code to convert from message's data in mono8 to image
  });

我知道我的图像采用 mono8 编码,也可以在运行时仔细检查

ros2 topic echo /camera/fisheye1/image_raw --no-arr
我得到类似的信息:

header:
  stamp:
    sec: 1698430962
    nanosec: 551425280
  frame_id: camera_fisheye1_optical_frame
height: 800
width: 848
encoding: mono8 // <---- 
is_bigendian: 0
step: 848
data: '<sequence type: uint8, length: 678400>'  

所以这表示编码。

但是当我在 javascript 订阅者中收到消息并检查里面的内容时,数据是字母数字而不是像素值。 我知道图像流在rviz2中工作,并且主题和消息类型与程序中的相同。我不确定是什么导致了这种错误的流媒体。

提前致谢。

javascript websocket ros ros2 roslibjs
1个回答
0
投票

我实际上已经设法以另一种方式做到这一点。我使用 realsense2 通过 python 创建到相机的流。然后使用 opencv 将流中的每个帧转换为二进制类型。之后,我将二进制图像生成(flask'函数)到我用flask制作的web应用程序中。

realsense2 lib 是必需的,因为我使用的是 Intel realsense T265 摄像头。您可以使用任何其他库来创建流。

© www.soinside.com 2019 - 2024. All rights reserved.