主要内容

使用机器人操作系统(ROS)的树莓派流图像

本例向您展示如何使用ROS通信接口将树莓派™板上的网络摄像头捕获的图像流式传输到主机。

简介

在本例中,您将使用ROS发布块将树莓派板上的图像流式传输到主机计算机。您将使用ROS MATLAB®命令行界面在主机计算机上显示图像。

先决条件

  • 这个例子需要机器人工具箱™和计算机视觉系统工具箱™。

所需的硬件

要运行这个例子,你需要以下硬件:

  • 树莓派板

  • 树莓派相机板或兼容的网络摄像头

在使用ROS时,我们强烈建议使用树莓派2板。

任务1 -连接相机

在此任务中,您将连接USB相机或树莓派相机模块到树莓派硬件,并检查Linux内核是否正确检测到相机。

1.如果你有USB摄像头:

  • 将USB摄像头连接到树莓派板上的一个USB端口。请注意,一些相机可能会消耗太多的电力,可能需要一个有电源的USB集线器才能正常运行。

如果你有树莓派相机模块:

  • 摄像机模块和树莓派单板之间使用CSI线缆连接,请按照制造商的说明进行连接。

  • 在MATLAB提示符中执行以下命令激活树莓派相机模块V4L2内核驱动程序:

R =覆盆子;系统(r / sbin / modprobe bcm2835_v4l2)

2.通过在MATLAB提示符中执行以下命令来检查Linux内核是否识别相机:

System (r,'ls -al /dev/video*')

典型输出将是:

crw-rw——T+ 1根视频81,0 12月16日14:43 /dev/video0

任务2 -配置和运行Simulink模型金宝app

在这个任务中,您将创建一个ROS节点,发布从连接到树莓派板的相机捕获的图像。

1.打开发布从网络摄像头捕获的图像到/摄像头主题模型。

2.确保视频设备文件名确定在任务1匹配V4L2视频捕获块掩码上指定的“设备名称”参数。在本例中,'Device name'应该设置为“/ dev / video0”

2.在主机上启动ROS主机:

rosinit('NodeHost',<您的计算机的IP地址>)

例如,主机的IP地址为10.10.10.2,则执行如下命令:

rosinit(“NodeHost”、“10.10.10.2”)

3.硬件选项卡中的Simuli金宝appnk模型模式部分中,选择在船上跑然后点击构建、部署和启动自动生成ROS节点,并在树莓派硬件上运行。

请注意发布从网络摄像头捕获的图像到/摄像头主题在主机上查看图像时,仅以160x120的相对较小的尺寸发布捕获图像的Y(即亮度)组件,以使网络延迟降到最低。您可以通过增强Simulink模型来增加图像大小并以彩色形式发布图像。金宝app但是请注意,这通常会引入额外的延迟,并在树莓派板上使用更多的CPU资源。

任务3 -验证ROS节点

在本任务中,您将使用MATLAB ROS命令行接口验证新构建的ROS节点的行为。

1.发布从网络摄像头捕获的图像到/摄像头主题模型上发布消息/相机主题使用sensor_msgs /形象消息。首先,验证一个名为/相机已生成:

Rostopic信息/相机

你应该在发布者列表中看到树莓派的IP地址。

2.属性的ROS订阅者/相机主题:

S = rossubscriber('/camera')

订阅者年代使用std_msgs /形象消息类型表示从连接到树莓派板上的相机捕获的黑白图像。

3.创建附加到订阅者的回调函数年代当树莓派板发布图像时,自动在主机上显示它们:

s.NewMessageFcn = @(~,msg) imagesc(重塑(msg. data,[160,120])');

当你执行上面的命令时,你应该看到一个图形窗口弹出,显示从树莓派板上发布的图像。要将图像显示为黑白,请将颜色映射设置为灰色:

colormap灰色

4.要停止流式图像,在MATLAB提示符中执行以下命令:

stopROSNode (r, rosberrypi_publish_camera)

您可以在任何时候通过在MATLAB提示符上执行以下命令重新启动ROS节点:

runROSNode (r,“rosberrypi_publish_camera”、“~ / catkin_ws”)

任务4 -使用Simulink显示已发布的图像金宝app

在此任务中,您将执行与任务3但这次使用Simulink ROS订阅程金宝app序块。

1.清除任务3中创建的ROS订阅者:

明确的(“s”)

2.打开从/camera topic接收图像模型。点击.在“SDL视频显示”窗口中可以看到从树莓派发送的图像。还要注意,图像宽度、高度和序列号显示在Simulink模型上。金宝app