使用机器人操作系统(ROS)的树莓派流图像
本例向您展示如何使用ROS通信接口将树莓派™板上的网络摄像头捕获的图像流式传输到主机。
简介
在本例中,您将使用ROS发布块将树莓派板上的图像流式传输到主机计算机。您将使用ROS MATLAB®命令行界面在主机计算机上显示图像。
先决条件
这个例子需要机器人工具箱™和计算机视觉系统工具箱™。
完成树莓派上的机器人操作系统(ROS)入门的例子。
所需的硬件
要运行这个例子,你需要以下硬件:
树莓派板
树莓派相机板或兼容的网络摄像头
在使用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