一些常用的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 =结构体字段:MessageType: 'sensor_msgs/Image' Header: [1x1 struct] Height: 480 Width: 640 Encoding: 'rgb8' IsBigendian: 0 Step: 1920 Data: [921600x1 uint8]
的数据
属性存储在MATLAB中不能直接用于处理和可视化的原始图像数据。你可以使用rosReadImage
函数检索与MATLAB兼容的格式的图像。
imageFormatted = rosReadImage (img);
原始图像有一个'rgb8'编码。默认情况下,rosReadImage
返回480 × 640 × 3的标准图像uint8
格式。查看此图像使用imshow
函数。
图imshow (imageFormatted)
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格式的图像。即使这个压缩图像的原始编码是bgr8
,rosReadImage
的转换。
compressedFormatted = rosReadImage (imgcomp);
可视化图像使用imshow
函数。
图imshow (compressedFormatted)
压缩图像消息类型支持大多数图像格式。金宝app的16 uc1
和32 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 =结构体字段:MessageType: 'sensor_msgs/PointCloud2' Header: [1x1 struct] Height: 480 Width: 640 Fields: [4x1 struct] IsBigendian: 0 PointStep: 32 RowStep: 20480 Data: [9830400x1 uint8] IsDense: 0
将点云信息编码到数据
属性。你可以提取x,
y,
z作为一个坐标N通过调用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⋮
南
在点云数据中表明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颜色值(如果存在的话),并在3d散点图中显示它们。的rosPlot
函数忽略所有南
x,
y,
z坐标,即使该点的RGB值存在。
图rosPlot (ptcloud)