主要内容

使用专门的ROS的消息

一些常用的ROS消息存储数据的格式,需要一些转换之前,可以用于进一步的处理。MATLAB®可以帮助你通过格式化这些专业ROS消息,方便使用。在本例中,您可以为激光扫描,探讨消息类型未压缩和压缩图像和点云处理。

先决条件:处理基本的ROS消息

加载示例消息

加载一些示例消息。这些信息从各种机器人传感器收集的数据填充。

负载(“specialROSMessageData.mat”)

激光扫描信息

激光扫描仪在机器人常用的传感器。你可以看到激光扫描的标准ROS格式适当类型的消息通过创建一个空的消息。

使用rosmessage创建消息。

emptyscan = rosmessage (“sensor_msgs /提升”,“DataFormat”,“结构”)
emptyscan =结构体字段:MessageType:“sensor_msgs /提升”标题:[1 x1 struct] AngleMin: 0 AngleMax: 0 AngleIncrement: 0 TimeIncrement: 0 ScanTime: 0 RangeMin: 0 RangeMax: 0范围:[0 x1单一]强度:[0 x1单)

既然你创建了一个空的消息,emptyscan不包含任何有意义的数据。为了方便起见,exampleHelperROSLoadMessages函数加载一个激光扫描的消息完全填充和存储在扫描变量。

检查扫描变量。主数据的消息范围财产。中的数据范围是一个向量的障碍距离记录在小角增量。

扫描
扫描=结构体字段:MessageType:“sensor_msgs /提升”标题:[1 x1 struct] AngleMin: -0.5467 AngleMax: 0.5467 AngleIncrement: 0.0017 TimeIncrement: 0 ScanTime: 0.0330 RangeMin: 0.4500 RangeMax: 10范围:x1单[640]强度:[0 x1单)

你可以测量的点在笛卡尔坐标使用rosReadCartesian函数。

xy = rosReadCartesian(扫描);

这个填充xy的列表(x, y)坐标计算基于所有有效的阅读范围。使用可视化扫描信息rosPlot功能:

图rosPlot(扫描,“MaximumRange”5)

图包含一个坐标轴对象。坐标轴对象与激光扫描标题包含一个类型的对象。

图像信息

MATLAB还提供了对图像信息的支持,这总万博1manbetx是有消息类型sensor_msgs /形象

创建一个空的图像信息使用rosmessage看到的标准ROS格式图像的信息。

emptyimg = rosmessage (“sensor_msgs /形象”,“DataFormat”,“结构”)
emptyimg =结构体字段:MessageType: sensor_msgs /图片的标题:[1 x1 struct]高度:0宽度:0编码:“IsBigendian: 0步骤:0数据:[0 x1 uint8]

为了方便起见,exampleHelperROSLoadMessages函数加载图像信息是完全填充和存储在img变量。

检查图像信息变量img在你的工作空间。中存储的图像的大小宽度高度属性。ROS发送实际的图像数据使用一个向量数据财产。

img
img =结构体字段:MessageType: sensor_msgs /图片的标题:[1 x1 struct]高度:480宽度:640编码:“rgb8”IsBigendian: 0步骤:数据:1920 [921600 x1 uint8]

数据属性存储原始图像数据,不能直接使用MATLAB处理和可视化。您可以使用rosReadImage函数来检索图像的格式与MATLAB兼容。

imageFormatted = rosReadImage (img);

原始图像有一个‘rgb8编码。默认情况下,rosReadImage返回图像在标准的480 - 640 - 3uint8格式。查看这张图片使用imshow函数。

图imshow (imageFormatted)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

MATLAB®支万博1manbetx持所有ROS图像编码格式,和rosReadImage处理图像数据转换的复杂性。除了彩色图像,MATLAB还支持单色和深度图像。万博1manbetx

压缩消息

许多活性氧系统把图像数据压缩格式。MATLAB支持这些压缩消息。万博1manbetx

创建一个空压缩消息使用rosmessage。压缩图像ROS消息类型sensor_msgs / CompressedImage和有一个标准的结构。

emptyimgcomp = rosmessage (“sensor_msgs / CompressedImage”,“DataFormat”,“结构”)
emptyimgcomp =结构体字段:MessageType:“sensor_msgs / CompressedImage”标题:[1 x1 struct]格式:“数据:[0 x1 uint8]

为了方便起见,exampleHelperROSLoadMessages函数加载一个压缩的图像信息,已经填充。

检查imgcomp变量被相机捕获。的格式属性捕获的所有信息需要解压缩图像数据存储在MATLAB数据

imgcomp
imgcomp =结构体字段:MessageType:“sensor_msgs / CompressedImage”标题:[1 x1 struct]格式:“bgr8;jpeg压缩bgr8数据(30376:x1 uint8]

类似的图像信息,您可以使用rosReadImage获取标准RGB格式的图像。尽管最初的编码压缩的图像bgr8,rosReadImage的转换。

compressedFormatted = rosReadImage (imgcomp);

使用可视化图像imshow函数。

图imshow (compressedFormatted)

图包含一个坐标轴对象。坐标轴对象包含一个类型的对象的形象。

大多数图像格式支持压缩消息类型。万博1manbetx的16 uc132 fc1编码不支持压缩深度图像。万博1manbetx支持单色和彩色图像编码。万博1manbetx

点云

点云可以被各种各样的传感器用于机器人技术,包括激光雷达,Kinect®,立体相机。最常见的消息类型ROS传送点云sensor_msgs / PointCloud2和MATLAB为您提供一些专门的函数来处理这些数据。

你可以看到点云的标准ROS格式消息通过创建一个空的点云消息。

emptyptcloud = rosmessage (“sensor_msgs / PointCloud2”,“DataFormat”,“结构”)
emptyptcloud =结构体字段:MessageType:“sensor_msgs / PointCloud2”标题:[1 x1 struct]高度:0宽度:0字段:[0 x1 struct] IsBigendian: 0 PointStep: 0 RowStep: 0数据:[0 x1 uint8] IsDense: 0

查看存储在密集的点云的消息ptcloud工作空间中的变量:

ptcloud
ptcloud =结构体字段:MessageType:“sensor_msgs / PointCloud2”标题:[1 x1 struct]高度:480宽度:640字段:x1结构[4]IsBigendian: 0 PointStep: 32 RowStep: 20480数据:[9830400 x1 uint8] IsDense: 0

点云信息编码的数据消息的属性。你可以提取x,y,z作为一个坐标N3矩阵通过调用rosReadXYZ函数。

xyz = rosReadXYZ (ptcloud)
xyz =307200 x3单一矩阵南南南南南南南南南南南南南南南南南南南南南南南南南南南南南南⋮

在点云数据表明一些x,y,z值是无效的。这是一个工件的Kinect®传感器,你可以安全地删除所有值。

xyzvalid = xyz (~ isnan (xyz (: 1)):)
xyzvalid =193359 x3单一矩阵0.1378 -0.6705 1.6260 0.1409 -0.6705 1.6260 0.1433 -0.6672 1.6180 0.1464 -0.6672 1.6180 0.1502 -0.6705 1.6260 0.1526 -0.6672 1.6180 0.1556 -0.6672 1.6180 0.1587 -0.6672 1.6180 0.1618 -0.6672 1.6180 0.1649 -0.6672 1.6180⋮

一些点云传感器也将RGB颜色值分配给每个点的点云。如果这些颜色值存在,您可以检索调用rosReadRGB

rgb = rosReadRGB (ptcloud)
rgb =307200×30.8392 0.7059 0.5255 0.8392 0.7059 0.5255 0.8392 0.7137 0.5333 0.8392 0.7216 0.5451 0.8431 0.7137 0.5529 0.8431 0.7098 0.5569 0.8471 0.7137 0.5569 0.8549 0.7098 0.5569 0.8588 0.7137 0.5529 0.8627 0.7137 0.5490⋮

你可以想象的点云rosPlot函数。rosPlot自动提取x,y,z坐标和RGB颜色值(如果存在的话),向他们展示三维散点图。的rosPlot函数忽略所有x,y,z坐标,即使RGB值存在。

图rosPlot (ptcloud)

图包含一个坐标轴对象。坐标轴对象与标题点云包含一个散射类型的对象。