一些常用的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)
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的16UC1
和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 =同场的结构:消息类型: 'sensor_msgs / PointCloud2' 部首:[1x1的结构]高度:480宽度:640字段:[4X1结构] IsBigendian:0 PointStep:32 RowStep:20480数据:[α9830400x1 UINT8] IsDense:0
点云信息是在编码数据
该消息的属性。您可以提取x,
y,
z作为一个坐标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⋮
南
在点云数据中表明x,
y,
z值无效。这是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
自动提取x,
y,
z坐标和RGB颜色值(如果存在的话),并在3d散点图中显示它们。的rosPlot
函数忽略所有南
x,
y,
z坐标,即使RGB值点存在。
图ROSPOT(PTCLOUD)