机器人中特殊的消息类型

描述

图像信息

MATLAB提供了对图像消息的支持,其消息类型始终为sensor_msgs/Image。

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

emptyimg = rosmessage("sensor_msgs/Image",DataFormat="struct")
emptyimg = struct with fields:
MessageType: ‘sensor_msgs/Image’
Header: [1x1 struct]
Height: 0
Width: 0
Encoding: ‘’
IsBigendian: 0
Step: 0
Data: [0x1 uint8]

为了方便起见,从specialROSMessageData.mat加载一个完全填充并存储在img变量中的图像消息。

在工作空间中检查图像消息变量img。图像的大小存储在Width和Height属性中。ROS使用data属性中的向量发送实际图像数据。

load("specialROSMessageData.mat")
img
img = struct with fields:
MessageType: ‘sensor_msgs/Image’
Header: [1x1 struct]
Height: 480
Width: 640
Encoding: ‘rgb8’
IsBigendian: 0
Step: 1920
Data: [921600x1 uint8]

Data属性存储无法在MATLAB中直接用于处理和可视化的原始图像数据。

可以使用rosReadImage函数以与MATLAB兼容的格式检索图像。然后通过imshow显示

imageFormatted = rosReadImage(img);
imshow(imageFormatted)

** 点云信息**

点云可以被机器人技术中使用的各种传感器捕获,包括激光雷达、Kinect®和立体摄像机。

ROS中用于传输点云的最常见消息类型是sensor_msgs/PointCloud2, MATLAB提供了一些专门的函数来处理这些数据。具体步骤和图像大同小异

emptyptcloud = rosmessage("sensor_msgs/PointCloud2",DataFormat="struct")
% xyz = rosReadXYZ(ptcloud)% 通过调用rosReadXYZ函数,可以将x、y、z坐标提取为N乘3矩阵。
% xyzValid = xyz(~isnan(xyz(:,1)),:)%可以安全地删除所有NaN值
rgb = rosReadRGB(ptcloud)
rosPlot(ptcloud)

使用rosReadAllFieldNames函数检查点云消息中存储的所有字段。加载的点云消息包含x、y、z和rgb四个字段。

fieldNames = rosReadAllFieldNames(ptcloud)

fieldNames = 1x4 cell
{‘x’} {‘y’} {‘z’} {‘rgb’}

占用栅格地图信息

ROS使用Octomap消息实现3D占用网格。八叉树地图信息通常用于机器人应用,如3D导航。

您可以通过创建适当类型的空消息来查看octomap消息的标准ROS格式。具体步骤和图像大同小异

emptyoctomap = rosmessage("octomap_msgs/Octomap",DataFormat="struct")
occupancyMap3DObj = rosReadOccupancyMap3D(octomap);
show(occupancyMap3DObj)
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分