主要内容

与专业ROS信息工作

一些常用的ROS消息的数据存储在一个需要某种变换它可用于进一步处理之前的格式。MATLAB®可以通过格式化这些专门ROS消息易用帮助你。在这个例子中,你可以探索如何进行激光扫描,无压缩和压缩的图像和点云信息类型进行处理。

先决条件:使用基本的ROS消息

加载示例消息

加载一些示例消息。这些消息被填充有来自各种传感器的机器人所收集的数据。

负载(“specialROSMessageData.mat”

激光扫描消息

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

rosmessage创建消息。

emptyscan = rosmessage (“sensor_msgs /提升”“DataFormat”“结构”
emptyscan =同场的结构:MessageType: 'sensor_msgs/LaserScan' Header: [1x1 struct] AngleMin: 0 AngleMax: 0 AngleIncrement: 0 TimeIncrement: 0 ScanTime: 0 RangeMin: 0 RangeMax: 0 Ranges: [0x1 single]强度:[0x1 single]

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

检查扫描变量。该消息中的主数据是范围财产。在该数据范围被记录在小角度的增量距离障碍物的矢量。

扫描
扫描=同场的结构:MessageType: 'sensor_msgs/LaserScan' Header: [1x1 struct] AngleMin: -0.5467 AngleMax: 0.5467 AngleIncrement: 0.0017 TimeIncrement: 0 ScanTime: 0.0330 RangeMin: 0.4500 RangeMax: 10 Ranges: [640x1 single]强度:[0x1 single]

你可以用笛卡尔坐标得到测量点rosReadCartesian函数。

XY = rosReadCartesian(扫描);

这种填充xy列出(x, y)这是基于所有有效范围内的读数来计算坐标。可视化使用扫描消息rosPlot功能:

图rosPlot(扫描,'MaximumRange',5)

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

图像信息

MATLAB还提供了用于图像消息,它总是具金宝app有消息类型支持sensor_msgs /图像

使用。创建空图像消息rosmessage查看图像消息的标准ROS格式。

emptyimg = rosmessage (“sensor_msgs /形象”“DataFormat”“结构”
emptyimg =同场的结构:MessageType: 'sensor_msgs/Image' Header: [1x1 struct] Height: 0 Width: 0 Encoding: " IsBigendian: 0 Step: 0 Data: [0x1 uint8]

为了方便起见,exampleHelperROSLoadMessages功能装载被完全填充并且被存储在图像信息IMG.变量。

检查图像消息变量IMG.在您的工作空间。的图像的大小被存储在宽度高度属性。ROS使用向量发送实际的图像数据数据财产。

IMG.
img =同场的结构:消息类型: 'sensor_msgs /图像' 部首:[1x1的结构]高度:480宽度:640编码: 'RGB8' IsBigendian:0步骤:1920的数据:[921600x1 UINT8]

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

imageFormatted = rosReadImage(IMG);

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

图imshow (imageFormatted)

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

MATLAB®支金宝app持编码格式的所有ROS形象,rosReadImage处理转换图像数据的复杂性。除了彩色图像,MATLAB还支持单色和深度图像。金宝app

压缩消息

许多ROS系统以压缩格式发送图像数据。MATLAB提供对这些压缩图像消金宝app息的支持。

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

emptyimgcomp = rosmessage (“sensor_msgs / CompressedImage”“DataFormat”“结构”
emptyimgcomp =同场的结构:MessageType: 'sensor_msgs/ compres沉积物'报头:[1x1 struct] Format: " Data: [0x1 uint8]

为了方便起见,exampleHelperROSLoadMessages功能装载一个已填充的压缩的图像信息。

检查imgcomp被摄像机捕捉到的变量。的格式物业捕获所有的MATLAB需要解压缩存储在图像数据的信息数据

imgcomp
imgcomp =同场的结构:MessageType: 'sensor_msgs/ compres沉积物' Header: [1x1 struct] Format: 'bgr8;数据:[30376x1 uint8]

类似于图像消息,您可以使用rosReadImage以获得在标准RGB格式的图像。即使原始编码此压缩图像bgr8rosReadImage的转换。

compressedFormatted = rosReadImage (imgcomp);

可视化图像使用imshow函数。

图imshow (compressedFormatted)

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

大多数的图像格式支持的压缩图像信息类型。金宝app的16UC132 fc1编码不支持压缩的深度图像。金宝app单色和彩色图像编码的支持。金宝app

点云

点云可以被机器人中使用的各种传感器捕捉,包括激光雷达、Kinect®和立体相机。ROS中最常见的传输点云的信息类型是sensor_msgs / PointCloud2和MATLAB为你提供了一些特殊的功能与此数据的工作。

您可以通过创建空点云消息来查看点云消息的标准ROS格式。

emptyptcloud = rosmessage (“sensor_msgs / PointCloud2”“DataFormat”“结构”
emptyptcloud =同场的结构:MessageType: 'sensor_msgs/PointCloud2' Header: [1x1 struct] Height: 0 Width: 0 Fields: [0x1 struct] IsBigendian: 0 PointStep: 0 RowStep: 0 Data: [0x1 uint8] IsDense: 0 . MessageType: 'sensor_msgs/PointCloud2' Header: [1x1 struct] Height: 0

查看存储在人口稠密的点云信息ptcloud变量在您的工作空间:

ptcloud
ptcloud =同场的结构:消息类型: 'sensor_msgs / PointCloud2' 部首:[1x1的结构]高度:480宽度:640字段:[4X1结构] IsBigendian:0 PointStep:32 RowStep:20480数据:[α9830400x1 UINT8] IsDense:0

点云信息是在编码数据该消息的属性。您可以提取xyz作为一个坐标N通过调用-by-3矩阵rosReadXYZ函数。

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

在点云数据中表明xyz值无效。这是Kinect®传感器的神器,你可以安全地删除所有值。

xyzvalid = xyz (~ isnan (xyz (: 1)):)
xyzvalid =193359x3单矩阵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自动提取xyz坐标和RGB颜色值(如果存在的话),并在3d散点图中显示它们。的rosPlot函数忽略所有xyz坐标,即使RGB值点存在。

图ROSPOT(PTCLOUD)

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