与专业ROS信息工作

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

先决条件:与基本ROS信息工作

加载示例消息

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

exampleHelperROSLoadMessages

激光扫描消息

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

采用rosmessage创建消息。

emptyscan = rosmessage('sensor_msgs /激光扫描'
emptyscan = ROS激光扫描消息属性:消息类型: 'sensor_msgs /激光扫描' 部首:[1x1的头] AngleMin:0 AngleMax:0 AngleIncrement:0 TimeIncrement:0 SCANTIME:0 RangeMin:0的RangeMax:0范围:[为0x1单]强度:[为0x1单]使用showdetails来显示消息的内容

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

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

扫描
扫描= ROS激光扫描消息属性:消息类型: 'sensor_msgs /激光扫描' 部首:[1x1的头] AngleMin:-0.5467 AngleMax:0.5467 AngleIncrement:0.0017 TimeIncrement:0 SCANTIME:0.0330 RangeMin:0.4500的RangeMax:10个范围:[640x1单]强度:为0x1单]使用showdetails来显示消息的内容

您可以使用在笛卡尔坐标获得测量点readCartesian功能。

XY = readCartesian(扫描);

这种填充XY与列表[X,Y]这是基于所有有效范围内的读数来计算坐标。可视化使用扫描消息情节功能:

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

图片信息

MATLAB还提供了用于图像消息,它总是具万博1manbetx有消息类型支持sensor_msgs /图像

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

emptyimg = rosmessage('sensor_msgs /图像'
消息类型: 'sensor_msgs /图像' 部首:emptyimg = ROS图像的属性信息[1x1的报头]高度:0宽度:0编码: '' IsBigendian:0步骤:0数据:[α为0x1 UINT8]使用showdetails显示的内容消息

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

检查图像消息变量IMG在您的工作空间。的图像的大小被存储在宽度高度属性。ROS发送利用在一个载体中的实际图像数据数据属性。

IMG
消息类型:IMG = ROS图像的属性信息 'sensor_msgs /图像' 部首:[1x1的头]高度:480宽度:640编码: 'RGB8' IsBigendian:0步骤:1920的数据:[921600x1 UINT8]使用showdetails来显示内容该消息的

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

imageFormatted = readImage(IMG);

原始图像具有“RGB8”编码。默认,readImage在返回图像的标准480通过-640×3UINT8格式。查看该图像使用imshow功能。

图imshow(imageFormatted)

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

压缩消息

许多ROS系统以压缩格式发送的图像数据。MATLAB提供了这些压缩的图像万博1manbetx信息支持。

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

emptyimgcomp = rosmessage('sensor_msgs / CompressedImage'
emptyimgcomp = ROS CompressedImage消息属性:消息类型: 'sensor_msgs / CompressedImage' 部首:[1x1的头]格式: '' 数据:[α为0x1 UINT8]使用showdetails来显示消息的内容

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

检查imgcomp这是由照相机拍摄的变量。该格式物业捕获所有的MATLAB需要解压缩存储在图像数据的信息数据

imgcomp
imgcomp = ROS CompressedImage消息属性:消息类型: 'sensor_msgs / CompressedImage' 部首:[1x1的头]格式:“bgr8;JPEG压缩bgr8' 数据:[30376x1 UINT8]使用showdetails来显示消息的内容

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

compressedFormatted = readImage(imgcomp);

使用可视化图像imshow功能。

图imshow(compressedFormatted)

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

点云

点云可以通过各种机器人,包括激光雷达,Kinect®,和立体摄像机使用的传感器的被捕获。在ROS用于发送点云中最常见的消息类型是sensor_msgs / PointCloud2和MATLAB为你提供了一些特殊的功能与此数据的工作。

您可以通过创建一个空的点云信息见点云信息标准ROS格式。

emptyptcloud = rosmessage('sensor_msgs / PointCloud2'
PreserveStructureOnRead:0消息类型:具有属性emptyptcloud = ROS PointCloud2消息 'sensor_msgs / PointCloud2' 部首:[1x1的头]高度:0宽度:0 IsBigendian:0 PointStep:0 RowStep:0 IsDense:0字段:[为0x1 PointField]数据:[为0x1 UINT8]使用showdetails来显示消息的内容

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

ptcloud
ptcloud = ROS PointCloud2消息属性:PreserveStructureOnRead:0消息类型: 'sensor_msgs / PointCloud2' 部首:[1x1的头]高度:480宽度:640 IsBigendian:0 PointStep:32 RowStep:20480 IsDense:0字段:[4X1 PointField]数据:[9830400x1 UINT8]使用showdetails来显示消息的内容

点云信息是在编码数据该消息的属性。您可以提取Xÿž坐标为ñ通过调用-by-3矩阵readXYZ功能。

XYZ = readXYZ(ptcloud)
XYZ =307200x3单矩阵楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠楠⋮

为NaN在点云数据表明一些是Xÿž值无效。这是Kinect®传感器的神器,你可以安全地删除所有为NaN值。

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颜色值,以在一个点云中的每个点。如果存在这些颜色值,你可以用一个调用来检索他们readRGB

RGB = readRGB(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⋮

您可以用可视化的点云scatter3功能。scatter3自动提取Xÿž坐标和RGB颜色值(如果它们存在),并将其显示在3-d散点图。该scatter3函数忽略所有为NaNXÿž坐标,即使RGB值点存在。

图scatter3(ptcloud)