一些常用的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格式的图像。即使原始编码此压缩图像bgr8
,readImage
转换。
compressedFormatted = readImage(imgcomp);
使用可视化图像imshow
功能。
图imshow(compressedFormatted)
大多数的图像格式支持的压缩图像信息类型。万博1manbetx该16UC1
和32FC1
编码不支持压缩的深度图像。万博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
函数忽略所有为NaN
X,
ÿ,
ž坐标,即使RGB值点存在。
图scatter3(ptcloud)